無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、操作キャラクターの移動に対応して画面表示を、簡単にスクロールさせることができる Camera2D クラスの利用例を紹介します。
Camera2D クラスの特徴や、ビューポートとの関係についても紹介します。
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※紹介するスクリプトは自己責任でお使いください。
前回の記事
前回は、CharacterBody2D クラスのスケルトンコードを一部変更して、氷の床などで急に止まれないキャラクターの挙動を実現する例を紹介しました。
以前の記事では、 2D の左右移動やジャンプ移動ができる CharacterBody2D クラスを使って、操作するキャラクターを作成する手順を紹介しました。
Camera2D の特徴と登録されるビューポート
Camera2D ノードの移動により画面を簡単にスクロールさせられます。
このノードがなくても画面は表示されますが、スクロールはしません。
Camera node for 2D scenes. It forces the screen (current layer) to scroll following this node. This makes it easier (and faster) to program scrollable scenes than manually changing the position of CanvasItem-based nodes.
Cameras register themselves in the nearest Viewport node (when ascending the tree). Only one camera can be active per viewport. If no viewport is available ascending the tree, the camera will register in the global viewport.
This node is intended to be a simple helper to get things going quickly, but more functionality may be desired to change how the camera works. To make your own custom camera node, inherit it from Node2D and change the transform of the canvas by setting Viewport.canvas_transform in Viewport (you can obtain the current Viewport by using Node.get_viewport).
Note that the Camera2D node’s
position
doesn’t represent the actual position of the screen, which may differ due to applied smoothing or limits. You can use get_screen_center_position to get the real position.2D シーンのカメラ ノード。このノードに従って画面 (現在のレイヤー) を強制的にスクロールします。これにより、CanvasItem ベースのノードの位置を手動で変更するよりも、スクロール可能なシーンをプログラムすることが簡単 (そして高速) になります。 カメラは、(ツリーを登るときに) 最も近いビューポート ノードに自身を登録します。ビューポートごとにアクティブにできるカメラは 1 つだけです。ツリーを上る方向に使用可能なビューポートがない場合、カメラはグローバル ビューポートに登録されます。 このノードは、物事を迅速に進めるための単純なヘルパーであることを目的としていますが、カメラの動作方法を変更するには、より多くの機能が必要になる場合があります。独自のカスタム カメラ ノードを作成するには、Node2D から継承し、ビューポートで Viewport.canvas_transform を設定してキャンバスの変換を変更します (現在のビューポートは Node.get_viewport を使用して取得できます)。 Camera2D ノードの位置は、適用されたスムージングや制限によって異なる可能性がある、画面の実際の位置を表すものではないことに注意してください。 get_screen_center_position を使用して実際の位置を取得できます。Camera2D — Godot Engine (4.x)の日本語のドキュメント と Google 翻訳
Camera2D ノードは上位のにある最も近いビューポートに登録され、該当するビューポートのノードがない場合は、デフォルトのグローバルビューポートに登録されます。
ビューポートは画面に表示されるスクリーンと考えられます。
Think of a Viewport as a screen onto which the game is projected. In order to see the game, we need to have a surface on which to draw it. That surface is the Root Viewport.
ビューポートは、ゲームが投影されるスクリーンと考えてください。ゲームを見るためには、ゲームを描画するための表面が必要です。そのサーフェスがルート ビューポートです。Using Viewports — Godot Engine (stable) documentation in English と Google 翻訳
ビューポートの派生クラスである、 SubViewport を用いることでゲーム画面内に UI 用の画面を表示させられます。
SubViewport Isolates a rectangular region of a scene to be displayed independently. This can be used, for example, to display UI in 3D space.
サブビューポート シーンの長方形の領域を分離して、独立して表示します。これは、たとえば 3D 空間で UI を表示するために使用できます。
SubViewport — Godot Engine (stable) documentation in English と Google 翻訳
Camera2D ノードの追加
Camera2D ノードに従って画面(対応するビューポート)はスクロールされます。
そのため、Camera2D ノードは、カメラで追尾したい対象、今回は操作キャラクターのノードの下に追加します。
カメラを追加する上位のノード(例では操作キャラクターの GodotSan ノード)を右クリックして表示されるメニュー「子ノードを追加」を選択します。
「 Node を新規作成」ダイアログで、Camera2D ノードを選択して「作成」ボタンを押します。
※検索ボックスを使うと探しやすいです。
2D ワークスペースを表示すると、カメラを子ノードに追加したノード(例では操作キャラクター)の周囲に画面サイズと同じサイズのピンク色の枠が表示されます。
この枠が、ウィンドウで表示される範囲になり、上位ノードを移動すれば Camera2D ノードも移動するため、画面をスクロールして表示できます。
テスト
ステージのシーンを F6 キーで実行すると、操作キャラクターを画面の中心でとらえてスクロールしました。
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、操作キャラクターの移動に対応して画面表示を、簡単にスクロールさせることができる Camera2D クラスの利用例を紹介しました。
Camera2D クラスの特徴や、ビューポートとの関係についても紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Using CharacterBody2D/3D — Godot Engine (4.x)の日本語のドキュメント
- CharacterBody2D — Godot Engine (4.x)の日本語のドキュメント
- Camera2D — Godot Engine (4.x)の日本語のドキュメント
- Using Viewports — Godot Engine (stable) documentation in English
- SubViewport — Godot Engine (stable) documentation in English
記事一覧 → Compota-Soft-Press
コメント