プレイヤーシーンの設計

最後のセクションでは、プロジェクトを設定し、ゲームアートをダウンロードしました。これでコーディングを開始する準備が整いました。まずはプレイヤー操作可能な宇宙船から着手します。

船シーンの設定

Godot ワークフローにおいて共通的な作業の一つにシーンの作成があります。前述したように、Godotにおける「シーン」とは、単なる複数の「ノード」の集合体に過ぎません。ほとんどのGodotプロジェクトでは、各ゲームオブジェクトは個別のシーンとして構成され、目的に応じた機能を提供するノードと、必要に応じて動作をカスタマイズするスクリプトが組み込まれています。

ノードの選択方法

最初のステップは、どのタイプのノードから始めるかを決めることです。シーンに追加する最初のノードは「ルートノード」と呼ばれます。通常、シーンのルートノードはゲームオブジェクトの主要な動作を定義するものでなければなりません。その後、追加機能を実現するために「子ノード」を取り付けていきます。

さて、ゲームに登場する船はどんなデザインにすべきでしょうか?要件を整理し、それらを満たすために活用できそうなノードを検討してみます。

その船には以下が必要です。

  • 2D空間での移動 : これには基本的なNode2Dノードで十分です。なぜならこのノードにはpositionrotationなどの2D関連プロパティが備わっているからです。ただし、外観に関する要素はありません。

  • 画像を表示 : Sprite2Dはこの目的のためのノードです。これもNode2Dであるため、自由に移動させることができます。

  • 衝突検出機能:画面内で敵キャラが射撃したり移動したりするため、自機がダメージを受けたタイミングを正確に把握する必要があります。固い物体同士の相互作用(跳ね返りや運動量伝達など)を考慮する必要はなく、単に接触を検知できれば十分です。この用途にはArea2Dコンポーネントが最適です。他オブジェクトとの接触検出機能を備え、位置関連プロパティを持っていますが、独自の視覚表現は持ちません。

このリストを見ると、Area2Dが主要な機能を提供していることがわかります。ここにSprite2Dをアタッチして宇宙船の画像を表示すれば、必要なものはすべて揃います。

シーンの構築方法

シーン タブで、 ボタンまたはその他のノードを追加 ボタンをクリックして最初のノードを作成します。Area2D と入力し、リストから選択してください。ノードが シーン タブに追加されたら、その名前をクリックして Player に改名し、<Ctrl+S> キーを押してシーンを保存します。

船舶情報の表示

Playerノードを選択した状態で、もう1つのノードを追加してください。Sprite2D。整理しやすくするため、このノードの名前をShipに変更してください。

ファイルシステム タブから、アートパック内の Player_ship (16x16).png ファイルをドラッグし、 インスペクターテクスチャ プロパティにドロップしてください。

alt alt

最初に気づくのは、どうやら船が3隻あるように見える点です!アートパックに含まれている画像には、左右へ移動するバージョンも含まれています。これを利用してみます - [インスペクター]の[アニメーション]セクションで、Hフレーム数3に設定します。これでフレームプロパティを変更すると、これら3つの異なるバージョン間を切り替えられるようになります。今のところは1のままにしておいてください。

alt alt

衝突形状の追加方法

また、Area2Dノードの横にある黄色の警告三角アイコンにもお気づきかもしれません。このアイコンをクリックすると、このエリアに形状が定義されていないという警告メッセージが表示されます。適切に対応するためには、Playerノードの下にCollisionShape2Dノードを追加が必要です。これにより、オブジェクト同士が衝突判定するための正確な境界を設定できます。

このノードのインスペクタウィンドウで形状プロパティを確認すると、現在は <empty> と表示されています。このボックスをクリックすると、様々な形状を選択できるドロップダウンメニューが表示されます。ここでは . New RectangleShape2D を選択して追加すると、船の上に水色の正方形が表示されるはずです。図形のサイズは、オレンジ色の円をドラッグして調整できます。または、形状 プロパティ内の Shape をクリックして拡大表示し、手動で サイズ を入力することも可能です。

alt alt

排気システム

アニメーションを追加すると、船の見た目がよりダイナミックになります。アートパックには「ブースター」と名付けた排気炎のアニメーションが3種類含まれています。それぞれ左舷用、前進時用、右舷用に対応しています。

これらを表示するには、Shipノードを選択し、子要素としてAnimatedSprite2Dノードを追加し、「ブースター」という名前を付けてください。

インスペクターのアニメーション セクション内にあるSprite Framesプロパティは、現在 <空> と表示されています。これをクリックすると新しい SpriteFramesが作成され、エディタウィンドウ下部にあるアニメーションパネルを開くために SpriteFrames 項目をクリックできるようになります。

alt alt

「デフォルト」アニメーションをダブルクリックして名前を「前進」に変更します。次に、アニメーション画像を追加するには、スプライトシートからフレームを追加 ボタンをクリックします。

alt alt

Boosters (16 x 16).png画像を選択すると、「フレーム選択」ウィンドウが表示され、必要なフレームを選択できるようになります。

alt alt

このアニメーションにはフレームが2つしかありませんが、グリッドが正しくありません。画像サイズに合わせて サイズ の値を変更してください。16 x 16。その後、両方のフレームをクリックして選択し、フレームを追加(2個) ボタンをクリックしてください。

alt alt

2つのフレームを追加したら、再生ボタンを押してアニメーションを実行してください。また、ロード時に自動再生ボタンを切り替えれば、自動的にアニメーションが開始されるようになります。

alt alt

処理が少し遅いので、フレームレートを10 FPSに変更してください。

追加アニメーションを2つ作成するには、[アニメーションを追加] ボタンをクリックして、それぞれ left(左)right(右) と命名してください。

alt alt

プロセスを繰り返し、左右の「ブースター」スプライトシートを追加してください。

銃のクールタイム時間

最後に設定する必要があるのは、プレイヤーの射撃速度を制御するTimerです。Playerノードの下にTimerを追加し、名前をGunCooldownとします。One Shot プロパティを「オン」に設定します。これにより、タイマー終了後に自動リセットされなくなります。実際の実装では、プレイヤーが銃を撃つタイミングでタイマーを起動させ、タイマーが切れるまでは再射撃できないようにします。

次のステップ

プレイヤーシーンの設定はこれで完了です。ゲーム内でプレイヤーが操作する艦船に必要な機能を実装するため、ノードを追加しました。次のセクションでは、プレイヤーが艦船を制御し、射撃を行い、物体と衝突したことを検知するためのコードを追加してゆきます。

戻る次へ