<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>初めての2Dゲームを作ろう on Godot 4 レシピ</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/index.html</link><description>Recent content in 初めての2Dゲームを作ろう on Godot 4 レシピ</description><generator>Hugo -- gohugo.io</generator><language>ja</language><atom:link href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/index.xml" rel="self" type="application/rss+xml"/><item><title>プロジェクト設定</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_01/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_01/index.html</guid><description>&lt;p&gt;この最初のゲームプロジェクトでは、初めてGodot Engineでゲームを作成する手順をご案内します。事前の経験は必要ありませんが、少なくとも&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/g1intr/start/"&gt;はじめてのGodot&lt;/a&gt;セクションに目を通していることが望ましいです。ここでは、エディターのインターフェースやGodotのUIの操作方法について学べます。&lt;/p&gt;
&lt;div class="box notices cstyle note"&gt;
&lt;div class="box-label"&gt;&lt;i class="fa-fw fas fa-exclamation-circle"&gt;&lt;/i&gt; なぜ2Dから始めるべきか？&lt;/div&gt;
&lt;div class="box-content"&gt;
&lt;p&gt;一言で言えば、3Dゲームは2Dゲームと比べて格段に複雑です。しかし、理解すべき基本エンジン機能の多くは同じものです。Godotの開発ワークフローをしっかり習得するまでは、2Dプロジェクトに専念することをオススメします。その段階までくれば、3Dへの移行はずっとスムーズに感じられるはずです。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Godotを起動して新規プロジェクトを開始します。名前は自由に決めて構いません - ここでは「クラシック・シューティング」と名付けます。これは伝統的なシューティングゲームスタイルの作品となるからです。&lt;/p&gt;
&lt;h2 id="アートワークのダウンロード方法"&gt;アートワークのダウンロード方法&lt;/h2&gt;
&lt;p&gt;ゲームで使用するアートワークは、itch.ioからダウンロードできます。
&lt;a href="https://grafxkid.itch.io/mini-pixel-pack-3" target="_blank"&gt;Grafxkid氏によるミニピクセルパック&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;アートワークパックを解凍し、プロジェクトにコピーするには、フォルダを[ファイルシステム]タブにドラッグアンドドロップしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-3c23e8c09208f7f88f80cb31c8b0b7dd" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_01.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-3c23e8c09208f7f88f80cb31c8b0b7dd"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_01.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="プロジェクト設定"&gt;プロジェクト設定&lt;/h2&gt;
&lt;p&gt;次に必要なのは、プロジェクト全体の設定をセットアップすることです。&lt;strong&gt;プロジェクト設定&lt;/strong&gt;を開き、右上にある「詳細設定」トグルを有効にしてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;表示/ウィンドウ&lt;/strong&gt; セクションにおいて：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Viewport Width&lt;/strong&gt; と &lt;strong&gt;Viewport Height&lt;/strong&gt; を &lt;code&gt;240&lt;/code&gt;, &lt;code&gt;320&lt;/code&gt; に設定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window Width Override&lt;/strong&gt; と &lt;strong&gt;Window Height Override&lt;/strong&gt; を &lt;code&gt;480&lt;/code&gt;, &lt;code&gt;640&lt;/code&gt; に設定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stretch/Mode&lt;/strong&gt; を &lt;code&gt;canvas_items&lt;/code&gt; に指定。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの設定により、ゲームが適切なサイズで表示されるようになります。ピクセルアートを使用しているため、画像自体は極端に小さく、古い機種向けの解像度である&lt;code&gt;240x320&lt;/code&gt;でも問題なく表示されます。ただし現代のモニターではこのサイズは画面に対してかなり小さいため、他の設定で比例的に拡大表示できます。1080pモニターをお使いの場合は、オーバーライド値を&lt;code&gt;720x960&lt;/code&gt;に変更することもできます。また、ゲーム実行中にウィンドウサイズを変更することもできるようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;キャンバステクスチャ&lt;/strong&gt;セクションの&lt;strong&gt;レンダリング/テクスチャ&lt;/strong&gt;設定で、&lt;strong&gt;デフォルトテクスチャフィルタ&lt;/strong&gt;を &lt;code&gt;Nearest&lt;/code&gt; に設定してください。これにより、美しいピクセルアートが鮮明なまま保たれ、左側ではなく右側のようなきれいな表示になります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="#image-235bbbd44ad3f98149ef68e5d8e5044e" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_02.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-235bbbd44ad3f98149ef68e5d8e5044e"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_02.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;プロジェクト設定&lt;/strong&gt; 画面の上部にある &lt;strong&gt;インプットマップ&lt;/strong&gt; タブをクリックしてください。ここではゲーム内で使用する入力設定します。「新規アクション追加」欄に以下を入力し、各入力項目を追加したら&lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt;キーを押してください。&lt;code&gt;right(右)&lt;/code&gt;、&lt;code&gt;left(左)&lt;/code&gt;、&lt;code&gt;up(上)&lt;/code&gt;、&lt;code&gt;down(下)&lt;/code&gt;、&lt;code&gt;shoot(射撃)&lt;/code&gt;。それぞれの入力にキーボードショートカットを割り当てるには、対応する &lt;strong&gt;+&lt;/strong&gt; ボタンをクリックした後、キーボードでそのキーを押してください。作業が完了したら、以下のような設定になっているはずです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="#image-399b99c585afa2b18a4ec483be4bda5e" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_03.png?width=500" alt="alt" style="height: auto; width: 500;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-399b99c585afa2b18a4ec483be4bda5e"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_03.png?width=500" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;他のキー設定を使いたい場合は、自由に変更してください。&lt;/p&gt;
&lt;h2 id="次のステップ"&gt;次のステップ&lt;/h2&gt;
&lt;p&gt;設定は完了しました。いよいよ開始できます！次のセクションでは、プレイヤーが操作する宇宙船を作成します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/"&gt;
&lt;i class="fas fa-arrow-left"&gt;&lt;/i&gt;
戻る
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_02/"&gt;
次へ
&lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>プレイヤーシーンの設計</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_02/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_02/index.html</guid><description>&lt;p&gt;最後のセクションでは、プロジェクトを設定し、ゲームアートをダウンロードしました。これでコーディングを開始する準備が整いました。まずはプレイヤー操作可能な宇宙船から着手します。&lt;/p&gt;
&lt;h2 id="船シーンの設定"&gt;船シーンの設定&lt;/h2&gt;
&lt;p&gt;Godot ワークフローにおいて共通的な作業の一つにシーンの作成があります。前述したように、Godotにおける「シーン」とは、単なる複数の「ノード」の集合体に過ぎません。ほとんどのGodotプロジェクトでは、各ゲームオブジェクトは個別のシーンとして構成され、目的に応じた機能を提供するノードと、必要に応じて動作をカスタマイズするスクリプトが組み込まれています。&lt;/p&gt;
&lt;h3 id="ノードの選択方法"&gt;ノードの選択方法&lt;/h3&gt;
&lt;p&gt;最初のステップは、どのタイプのノードから始めるかを決めることです。シーンに追加する最初のノードは「ルートノード」と呼ばれます。通常、シーンのルートノードはゲームオブジェクトの主要な動作を定義するものでなければなりません。その後、追加機能を実現するために「子ノード」を取り付けていきます。&lt;/p&gt;
&lt;p&gt;さて、ゲームに登場する船はどんなデザインにすべきでしょうか？要件を整理し、それらを満たすために活用できそうなノードを検討してみます。&lt;/p&gt;
&lt;p&gt;その船には以下が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;2D空間での移動&lt;/em&gt; : これには基本的な&lt;i class="gd-Node2D"&gt;&lt;/i&gt;&lt;code&gt;Node2D&lt;/code&gt;ノードで十分です。なぜならこのノードには&lt;code&gt;position&lt;/code&gt;、&lt;code&gt;rotation&lt;/code&gt;などの2D関連プロパティが備わっているからです。ただし、外観に関する要素はありません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;画像を表示&lt;/em&gt; : &lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt;はこの目的のためのノードです。これも&lt;i class="gd-Node2D"&gt;&lt;/i&gt;&lt;code&gt;Node2D&lt;/code&gt;であるため、自由に移動させることができます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;衝突検出機能&lt;/em&gt;：画面内で敵キャラが射撃したり移動したりするため、自機がダメージを受けたタイミングを正確に把握する必要があります。固い物体同士の相互作用（跳ね返りや運動量伝達など）を考慮する必要はなく、単に接触を検知できれば十分です。この用途には&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt;コンポーネントが最適です。他オブジェクトとの接触検出機能を備え、位置関連プロパティを持っていますが、独自の視覚表現は持ちません。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このリストを見ると、&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt;が主要な機能を提供していることがわかります。ここに&lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt;をアタッチして宇宙船の画像を表示すれば、必要なものはすべて揃います。&lt;/p&gt;
&lt;h2 id="シーンの構築方法"&gt;シーンの構築方法&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;シーン&lt;/strong&gt; タブで、&lt;strong&gt;＋&lt;/strong&gt; ボタンまたは&lt;strong&gt;その他のノードを追加&lt;/strong&gt; ボタンをクリックして最初のノードを作成します。&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; と入力し、リストから選択してください。ノードが &lt;strong&gt;シーン&lt;/strong&gt; タブに追加されたら、その名前をクリックして &lt;code&gt;Player&lt;/code&gt; に改名し、&lt;code&gt;&amp;lt;Ctrl+S&amp;gt;&lt;/code&gt; キーを押してシーンを保存します。&lt;/p&gt;
&lt;h3 id="船舶情報の表示"&gt;船舶情報の表示&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Player&lt;/code&gt;ノードを選択した状態で、もう1つのノードを追加してください。&lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt;。整理しやすくするため、このノードの名前を&lt;code&gt;Ship&lt;/code&gt;に変更してください。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ファイルシステム&lt;/strong&gt; タブから、アートパック内の &lt;code&gt;Player_ship (16x16).png&lt;/code&gt; ファイルをドラッグし、 &lt;strong&gt;インスペクター&lt;/strong&gt; の &lt;strong&gt;テクスチャ&lt;/strong&gt; プロパティにドロップしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-5d1a39693cfcdb13a5acb9b17e80dbb2" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_player_ship.png?width=100" alt="alt" style="height: auto; width: 100;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-5d1a39693cfcdb13a5acb9b17e80dbb2"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_player_ship.png?width=100" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最初に気づくのは、どうやら船が3隻あるように見える点です！アートパックに含まれている画像には、左右へ移動するバージョンも含まれています。これを利用してみます - ［インスペクター］の［アニメーション］セクションで、&lt;strong&gt;Hフレーム数&lt;/strong&gt;を&lt;code&gt;3&lt;/code&gt;に設定します。これで&lt;strong&gt;フレーム&lt;/strong&gt;プロパティを変更すると、これら3つの異なるバージョン間を切り替えられるようになります。今のところは&lt;code&gt;1&lt;/code&gt;のままにしておいてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-c2318d44cad2ac029725fef8760feef3" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_04.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-c2318d44cad2ac029725fef8760feef3"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_04.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="衝突形状の追加方法"&gt;衝突形状の追加方法&lt;/h3&gt;
&lt;p&gt;また、&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt;ノードの横にある黄色の警告三角アイコンにもお気づきかもしれません。このアイコンをクリックすると、このエリアに形状が定義されていないという警告メッセージが表示されます。適切に対応するためには、&lt;code&gt;Player&lt;/code&gt;ノードの下に&lt;i class="gd-CollisionShape2D"&gt;&lt;/i&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;ノードを追加が必要です。これにより、オブジェクト同士が衝突判定するための正確な境界を設定できます。&lt;/p&gt;
&lt;p&gt;このノードの&lt;strong&gt;インスペクタ&lt;/strong&gt;ウィンドウで&lt;strong&gt;形状&lt;/strong&gt;プロパティを確認すると、現在は &lt;code&gt;&amp;lt;empty&amp;gt;&lt;/code&gt; と表示されています。このボックスをクリックすると、様々な形状を選択できるドロップダウンメニューが表示されます。ここでは &lt;i class="gd-RectangleShape2D"&gt;&lt;/i&gt;. &lt;code&gt;New RectangleShape2D&lt;/code&gt; を選択して追加すると、船の上に水色の正方形が表示されるはずです。図形のサイズは、オレンジ色の円をドラッグして調整できます。または、形状 プロパティ内の &lt;strong&gt;Shape&lt;/strong&gt; をクリックして拡大表示し、手動で &lt;strong&gt;サイズ&lt;/strong&gt; を入力することも可能です。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-f67cfd7fa17a1aa25b03250df9d0ca56" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_05.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-f67cfd7fa17a1aa25b03250df9d0ca56"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_05.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="排気システム"&gt;排気システム&lt;/h3&gt;
&lt;p&gt;アニメーションを追加すると、船の見た目がよりダイナミックになります。アートパックには「ブースター」と名付けた排気炎のアニメーションが3種類含まれています。それぞれ左舷用、前進時用、右舷用に対応しています。&lt;/p&gt;
&lt;p&gt;これらを表示するには、&lt;code&gt;Ship&lt;/code&gt;ノードを選択し、子要素として&lt;i class="gd-AnimatedSprite2D"&gt;&lt;/i&gt;&lt;code&gt;AnimatedSprite2D&lt;/code&gt;ノードを追加し、「ブースター」という名前を付けてください。&lt;/p&gt;
&lt;p&gt;インスペクターの&lt;strong&gt;アニメーション&lt;/strong&gt; セクション内にある&lt;strong&gt;Sprite Frames&lt;/strong&gt;プロパティは、現在 &lt;code&gt;&amp;lt;空&amp;gt;&lt;/code&gt; と表示されています。これをクリックすると新しい &lt;code&gt;SpriteFrames&lt;/code&gt;が作成され、エディタウィンドウ下部にあるアニメーションパネルを開くために &lt;code&gt;SpriteFrames&lt;/code&gt; 項目をクリックできるようになります。&lt;/p&gt;</description></item><item><title>プレイヤーのコーディング</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_03/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_03/index.html</guid><description>&lt;p&gt;最後のセクションでは、プロジェクトを設定し、ゲームアートをダウンロードしました。これでコーディングを開始する準備が整いました。まずはプレイヤー操作可能な宇宙船から着手します。&lt;/p&gt;
&lt;h2 id="スクリプトの追加方法"&gt;スクリプトの追加方法&lt;/h2&gt;
&lt;p&gt;ゲームの動作やメカニクスを構築するには、スクリプトを記述してノードやその他のオブジェクトにアタッチします。現在の&lt;code&gt;Player&lt;/code&gt;シーンでは宇宙船を表示し、その衝突判定ボックスなどを定義していますが、実際には移動できず、仮に他のものと衝突しても何の反応も生じません。この機能を追加するため、これからコードを実装していきます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Player&lt;/code&gt;ノードを選択して、「&lt;strong&gt;スクリプトのアタッチ&lt;/strong&gt;」ボタンをクリックします。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-c0685740f31e21b58322518a929d99d9" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_13.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-c0685740f31e21b58322518a929d99d9"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_13.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ノードスクリプトのアタッチ&lt;/strong&gt; ウィンドウでオプションを変更する必要はありませんので、単に &lt;strong&gt;作成&lt;/strong&gt; ボタンをクリックすると、スクリプトエディターに移動します。&lt;/p&gt;
&lt;p&gt;スクリプトの最初の行を見てみてください。これは自動的に追加されたものです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;extends&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Area2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この行はこのスクリプトをアタッチすべきオブジェクトのタイプを指定しています。つまり、スクリプトは &lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; が提供するすべての機能にアクセスできるようになります。&lt;/p&gt;
&lt;p&gt;スクリプトが『組み込まれている』ノードの種類と、&lt;code&gt;extend&lt;/code&gt; 文は常に一致している必要があります。&lt;/p&gt;
&lt;div class="box notices cstyle info"&gt;
&lt;div class="box-label"&gt;&lt;i class="fa-fw fas fa-info-circle"&gt;&lt;/i&gt; スクリプトの操作について&lt;/div&gt;
&lt;div class="box-content"&gt;
&lt;p&gt;単独で存在するスクリプト自体には、ほとんど意味がありません。スクリプトは&lt;strong&gt;付加的な機能を定義する&lt;/strong&gt;ものであり、特定のオブジェクトに紐づいて初めて効果を発揮します。単に「あるスクリプト内の変数」ではなく、そのスクリプトによって&lt;strong&gt;定義されたオブジェクトのプロパティ&lt;/strong&gt;を参照することになる点が重要です。これは極めて重要な概念です。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="移動"&gt;移動&lt;/h2&gt;
&lt;p&gt;まず、船を画面上で移動させる機能から作成してください。以下の動作するコードから始めてみます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プレイヤーが押している入力を検知する&lt;/li&gt;
&lt;li&gt;その入力方向に宇宙船を移動させる&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@export&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#b48ead"&gt;150&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_process&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;delta&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; input &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Input&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;get_vector&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#a3be8c"&gt;&amp;#34;left&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#a3be8c"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#a3be8c"&gt;&amp;#34;up&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#a3be8c"&gt;&amp;#34;down&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position &lt;span style="color:#81a1c1"&gt;+=&lt;/span&gt; input &lt;span style="color:#81a1c1"&gt;*&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;*&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを行ごとに分解してみます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;変数名の前に &lt;code&gt;@export&lt;/code&gt; を付けると、&lt;strong&gt;インスペクター&lt;/strong&gt; でその値を調整できるようになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="#image-0f781ae0fd51a277bc479d229b7a5b07" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_14.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-0f781ae0fd51a277bc479d229b7a5b07"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_14.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_process()&lt;/code&gt; 関数はエンジンによって1フレームごとに呼び出されます。この関数内に書いたコードはすべて毎フレーム実行されます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Input.get_vector()&lt;/code&gt; は、指定された4つの入力状態をチェックし、それらの方向に向くベクトルを生成します。&lt;/li&gt;
&lt;li&gt;最後に、与えられた入力ベクトルを移動量として船の &lt;code&gt;position&lt;/code&gt; に加算します。この時、速度値に合わせてベクトルの大きさを調整し、さらに &lt;code&gt;delta&lt;/code&gt; でスケール処理を行います。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="expand"&gt;
&lt;input type="checkbox" id="expand-2" aria-controls="expandcontent-2" &gt;
&lt;label class="expand-label" for="expand-2" &gt;
&lt;i class="fas fa-chevron-down"&gt;&lt;/i&gt;
&lt;i class="fas fa-chevron-right"&gt;&lt;/i&gt;
詳細情報へのリンク
&lt;/label&gt;
&lt;div id="expandcontent-2" class="expand-content"&gt;
&lt;ul&gt;
&lt;li&gt;ベクトルの基本理解：&lt;a href="https://docs.godotengine.org/ja/latest/tutorials/math/vector_math.html" target="_blank"&gt;ベクトル数学&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delta&lt;/code&gt;とは？ &lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/basics/understanding_delta/"&gt;デルタについての解説&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;シーンを実行するには &lt;strong&gt;［現在のシーンを実行］&lt;/strong&gt; ボタンをクリックしてください。その後、自由に移動してみてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-3578c9e117125011f04147b7b0da0e9c" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_15.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-3578c9e117125011f04147b7b0da0e9c"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_15.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="画面表示を維持する機能"&gt;画面表示を維持する機能&lt;/h3&gt;
&lt;p&gt;一つの問題点として、プレイヤーが動き続けると画面外へと移動してしまう点が挙げられます。この問題を解決するには、スクリプト上部でプレイヤーの &lt;code&gt;position&lt;/code&gt; プロパティを画面矩形内に制限が必要です。以下のように追加してください。&lt;/p&gt;</description></item><item><title>シーンの箇条書き表示</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_04/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_04/index.html</guid><description>&lt;p&gt;プレイヤーが自由に画面内を移動できるようになった今、その次のステップとして「射撃」システムを実装していきます。&lt;/p&gt;
&lt;h2 id="再利用可能なオブジェクト"&gt;再利用可能なオブジェクト&lt;/h2&gt;
&lt;p&gt;プレイヤーは試合中に多数の「弾丸」を発射しますが、すべて同一仕様となります。各弾丸は以下の要件を満たす必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プレイヤーのすぐ前方に出現&lt;/li&gt;
&lt;li&gt;画面外に到達するまで前進移動&lt;/li&gt;
&lt;li&gt;敵キャラとの衝突を検知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;すべての弾丸が同じ動作をするように設計されているため、「プロトタイプ」となる基本型を1つ作成すれば、そこから必要な数だけコピーを生成できます。Godotのシーンシステムはこの用途に最適です。&lt;/p&gt;
&lt;h2 id="弾丸シーン"&gt;弾丸シーン&lt;/h2&gt;
&lt;p&gt;メニューから&lt;strong&gt;シーン→新規シーン&lt;/strong&gt;を選択するか、ビューポート上部のタブにある**＋**アイコンをクリックすることで、新しいシーンを作成できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Player&lt;/code&gt;シーンと同様に、弾丸を正しく機能させるために必要なノードを検討が必要です。ここでも衝突判定用の &lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; コンポーネントを使用することで、物体との接触を検出できます。このため、以下のものが必要になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;衝突形状（コリジョンシェイプ）：弾丸が物理的に存在していることをシミュレートするため&lt;/li&gt;
&lt;li&gt;スプライト：弾丸のビジュアル表示用&lt;/li&gt;
&lt;li&gt;画面外検知メカニズム：弾丸が画面から外れたタイミングで自動的に除去する仕組み&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以下にノードの設定を示します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; - この&lt;code&gt;Bullet&lt;/code&gt;に名前を付ける
&lt;ul&gt;
&lt;li&gt;&lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;i class="gd-CollisionShape2D"&gt;&lt;/i&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;i class="gd-VisibleOnScreenNotifier2D"&gt;&lt;/i&gt;&lt;code&gt;VisibleOnScreenNotifier2D&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;アセットパックフォルダから、&lt;code&gt;Player_charged_beam (16 x 16).png&lt;/code&gt;画像ファイルを、&lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt;コンポーネントの&lt;strong&gt;テクスチャ&lt;/strong&gt;プロパティにドラッグ＆ドロップしてください。&lt;/p&gt;
&lt;p&gt;船舶画像と同様に、ここにも複数のバージョンが存在するため、&lt;strong&gt;Hframes&lt;/strong&gt;を&lt;code&gt;2&lt;/code&gt;に設定し、一度に表示する画像を1つだけにしてください。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-CollisionShape2D"&gt;&lt;/i&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt; の形状を、先ほど&lt;code&gt;Player&lt;/code&gt;シーンで設定した方法と同じように設定してください。&lt;/p&gt;
&lt;h2 id="弾丸スクリプト"&gt;弾丸スクリプト&lt;/h2&gt;
&lt;p&gt;ノード&lt;code&gt;Bullet&lt;/code&gt;にスクリプトをアタッチし、移動の基本設定から始めてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;extends&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Area2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@export&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1"&gt;-&lt;/span&gt;&lt;span style="color:#b48ead"&gt;250&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;pos&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; pos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_process&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;delta&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;y &lt;span style="color:#81a1c1"&gt;+=&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;*&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このスクリプトはプレイヤー用のものと類似しているので、見覚えがあると思います。変更しているのは&lt;code&gt;position.y&lt;/code&gt;だけです。弾丸を垂直に真上へ発射させるためです。&lt;/p&gt;
&lt;p&gt;定義した&lt;code&gt;start()&lt;/code&gt;関数に注目してください。これにより、プレイヤーが移動して異なる位置から弾丸を発射するため、弾丸の初期&lt;code&gt;座標&lt;/code&gt;を設定することが可能になります。&lt;/p&gt;
&lt;h3 id="シグナルの接続方法"&gt;シグナルの接続方法&lt;/h3&gt;
&lt;p&gt;次に、&lt;code&gt;bullet&lt;/code&gt;ノードを選択してから、&lt;strong&gt;インスペクター&lt;/strong&gt;の横にある&lt;strong&gt;ノード&lt;/strong&gt;タブをクリックしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-f71b3e47508cdad609f0b0244ddce4d8" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_16.png?width=350" alt="alt" style="height: auto; width: 350;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-f71b3e47508cdad609f0b0244ddce4d8"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_16.png?width=350" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これはこのノードが送信可能なすべてのシグナル一覧です。シグナルはGodotで何かが発生したことを通知する仕組みです。この場合、&lt;code&gt;area_entered&lt;/code&gt; シグナルを使用することで、この弾丸が他の &lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; ノードに接触するたびに検知できます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;area_entered&lt;/code&gt; シグナルを選択し、&lt;strong&gt;接続…&lt;/strong&gt; ボタン（またはシグナル名をダブルクリック）をクリックしてください。表示されるダイアログでは、何も変更する必要はありません。ただ単に&lt;strong&gt;接続&lt;/strong&gt; をクリックするだけで完了です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bullet.gd&lt;/code&gt;を見てください。新しい関数が追加され、名前の横に緑の「接続中」アイコンが表示されます。これはシグナルがこの関数に接続されていることを示すものです。この関数はエリアが何かに接触するたびに呼び出されるため、ここにコードを追加してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_area_entered&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;area&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;if&lt;/span&gt; area&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;is_in_group&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#a3be8c"&gt;&amp;#34;enemies&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; area&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;explode&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;queue_free&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここで弾が敵に当たったかどうかを確認します（詳細は後述）。当たった場合は、敵に対して爆発処理を実行した後、弾オブジェクトを削除します。&lt;/p&gt;
&lt;p&gt;以下の手順に従って、&lt;i class="gd-VisibleOnScreenNotifier2D"&gt;&lt;/i&gt;&lt;code&gt;VisibleOnScreenNotifier2D&lt;/code&gt; の &lt;code&gt;screen_exited&lt;/code&gt; シグナルも接続してください。&lt;/p&gt;</description></item><item><title>射撃</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_05/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_05/index.html</guid><description>&lt;p&gt;&lt;code&gt;Bullet&lt;/code&gt;シーンでは、プレイヤーが射撃するたびに再利用可能なオブジェクトを生成できます。&lt;/p&gt;
&lt;h2 id="プレイヤーへの追加方法"&gt;プレイヤーへの追加方法&lt;/h2&gt;
&lt;p&gt;以下のコードを&lt;code&gt;Player&lt;/code&gt;スクリプトに追加してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@export&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; cooldown &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#b48ead"&gt;0.25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@export&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; bullet_scene &lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;PackedScene&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; can_shoot &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下の2つの&lt;code&gt;@export&lt;/code&gt;変数を使用すると、インスペクターで設定可能なため、クールタイムを調整できます。プロパティをクリックして&lt;code&gt;bullet.tscn&lt;/code&gt;ファイルを選択する形で&lt;code&gt;bullet_scene&lt;/code&gt;を設定してください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;can_shoot&lt;/code&gt;はプログラミング用語で言うところの「フラグ」です。これはある条件を制御するブール型変数です。この場合、プレイヤーが射撃可能かどうかを決定します。クール期間中、この変数は&lt;code&gt;false&lt;/code&gt;に設定されます。&lt;/p&gt;
&lt;p&gt;次に、&lt;code&gt;Bullet&lt;/code&gt;と同様に&lt;code&gt;start()&lt;/code&gt;関数を追加してください。これにより、プレイヤーの初期値を設定できるほか、ゲームが再起動するたびにこれらの値をリセットできるようになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_ready&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Vector2&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;screensize&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;x &lt;span style="color:#81a1c1"&gt;/&lt;/span&gt; &lt;span style="color:#b48ead"&gt;2&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; screensize&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;y &lt;span style="color:#81a1c1"&gt;-&lt;/span&gt; &lt;span style="color:#b48ead"&gt;64&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $GunCooldown&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;wait_time &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; cooldown
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより、プレイヤーは画面の中央下部に配置され、最適なスタート位置となります。また、クールタイムタイマーが適切な待機時間を設定することを保証します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;shoot()&lt;/code&gt;関数は、『射撃』入力が押されるたびに呼び出されるようになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;shoot&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;not&lt;/span&gt; can_shoot&lt;span style="color:#eceff4"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; can_shoot &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $GunCooldown&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; b &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; bullet_scene&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;instantiate&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;get_tree&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;root&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;add_child&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;b&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;position &lt;span style="color:#81a1c1"&gt;+&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Vector2&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#b48ead"&gt;0&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#81a1c1"&gt;-&lt;/span&gt;&lt;span style="color:#b48ead"&gt;8&lt;/span&gt;&lt;span style="color:#eceff4"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この関数の最初の処理は、プレイヤーが射撃可能かどうかを確認することです。もし許可されていない場合、&lt;code&gt;return&lt;/code&gt;文によって即座に関数が終了します。&lt;/p&gt;
&lt;p&gt;プレイヤーが射撃可能状態の場合、フラグを&lt;code&gt;false&lt;/code&gt;に設定し、クールタイムタイマーを開始します。その後、新しい弾丸オブジェクトを作成しゲームに追加し、その&lt;code&gt;start()&lt;/code&gt;関数を呼び出して正しい位置に配置します（プレイヤーの宇宙船すぐ上）。&lt;/p&gt;
&lt;p&gt;この関数を呼び出せるのは、プレイヤーがキーを押している時です。&lt;code&gt;_process()&lt;/code&gt; 関数の末尾、&lt;code&gt;position.clamp()&lt;/code&gt; 行の後にこれを追加してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Input&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;is_action_pressed&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#a3be8c"&gt;&amp;#34;shoot&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;shoot&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;さらに、&lt;code&gt;GunCooldown&lt;/code&gt; の &lt;code&gt;timeout&lt;/code&gt; シグナルも接続する必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_gun_cooldown_timeout&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; can_shoot &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;クールタイムが終了したら、再び射撃を許可できます。&lt;/p&gt;
&lt;p&gt;シーンを実行して、射撃アクションを押してみてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-a1300efaeebd80c8dbd4594c976a78e5" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_17.gif" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-a1300efaeebd80c8dbd4594c976a78e5"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_17.gif" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;div class="box notices cstyle note"&gt;
&lt;div class="box-label"&gt;&lt;i class="fa-fw fas fa-exclamation-circle"&gt;&lt;/i&gt; ツリーへのインスタンス追加について&lt;/div&gt;
&lt;div class="box-content"&gt;
&lt;p&gt;注意：新規に生成した弾丸はシーンツリーのルートノード（&lt;code&gt;get_tree().root&lt;/code&gt;）の下に子要素として追加されたことに留意してください。プレイヤー船の子要素としては追加していません。これは重要な点です。もし弾丸を船の子要素にしていた場合、船が移動するたびにそれらが「固定」されてしまうからです。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="次のステップ"&gt;次のステップ&lt;/h2&gt;
&lt;p&gt;シューティングゲームは撃つ対象がなければ面白くありません。敵キャラの作成に取り掛かりますが、その前にプレイヤーや敵、その他のゲーム内オブジェクトを配置するシーンを作成する必要があります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_04/"&gt;
&lt;i class="fas fa-arrow-left"&gt;&lt;/i&gt;
戻る
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_06/"&gt;
次へ
&lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>メインシーン</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_06/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_06/index.html</guid><description>&lt;p&gt;ほとんどのゲームでは、これを「レベル」または「メインシーン」と呼びます。ここではそのように呼称します。&lt;/p&gt;
&lt;p&gt;シーンを「メイン」という名前の &lt;code&gt;Node2D&lt;/code&gt;（&lt;i class="gd-Node2D"&gt;&lt;/i&gt;で表示）で開始し、保存してください。&lt;/p&gt;
&lt;h2 id="背景の作成方法"&gt;背景の作成方法&lt;/h2&gt;
&lt;p&gt;以下の手順で操作してください。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;アイコンを使用して、新しい &lt;i class="gd-Sprite2D"&gt;&lt;/i&gt;&lt;code&gt;Sprite2D&lt;/code&gt; 子オブジェクトを追加してください。&lt;/li&gt;
&lt;li&gt;このスプライトに「Background」という名前を付けます。&lt;/li&gt;
&lt;li&gt;テクスチャとして &lt;code&gt;Space_BG (2 frames) (64 x 64).png&lt;/code&gt; を適用します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この画像には2つのフレームがあり、それぞれ&lt;code&gt;64x64&lt;/code&gt;ピクセルのサイズです。画面全体に画像を敷き詰めたいので、まずは以下の設定から始めてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Offset&lt;/strong&gt; 設定で &lt;strong&gt;Centered(中央揃え)&lt;/strong&gt; をオフにします。これにより、画像の左上隅が原点から始まるようになり、中心からは始まらなくなります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Region&lt;/strong&gt; 設定で &lt;strong&gt;Enabled&lt;/strong&gt; をオンにし、幅を&lt;code&gt;240&lt;/code&gt;、高さを&lt;code&gt;320&lt;/code&gt;に指定します。これにより画像が画面サイズに合わせて拡大されます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;テクスチャ&lt;/strong&gt; 設定で &lt;strong&gt;Repeat(繰り返し)&lt;/strong&gt; を &lt;code&gt;Enabled(有効)&lt;/code&gt; に変更してください。これにより画像が画面全体に繰り返されるようになります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現在のシーンにプレイヤーを追加するには、&lt;code&gt;Main&lt;/code&gt;ノードを選択して&lt;strong&gt;子シーンをインスタンス化&lt;/strong&gt;ボタンをクリックします。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-db50b67cb8a724c1485c4327d1a0c347" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_18.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-db50b67cb8a724c1485c4327d1a0c347"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_18.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="背景をアニメーション化する方法"&gt;背景をアニメーション化する方法&lt;/h3&gt;
&lt;p&gt;背景アニメーションを追加することでシーンに動きを与えることができます。フレームごとに &lt;code&gt;region_rect&lt;/code&gt; プロパティを変更することでコード上で実現することも可能ですが、ここでは代わりに &lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt; ノードを使いましょう。&lt;code&gt;Main&lt;/code&gt; の子要素として追加してください。&lt;/p&gt;
&lt;p&gt;エディターウィンドウの下部には&lt;strong&gt;アニメーション&lt;/strong&gt;パネルが表示されます。ここには多くの情報が配置されていますので、その構成を確認していきます。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-f6b10798d0037b20fb72dc5552645a77" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_19.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-f6b10798d0037b20fb72dc5552645a77"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_19.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;クリックしてください。次に［新規アニメーション］を選択します。新しいアニメーションには名前を&lt;code&gt;scroll&lt;/code&gt;と付けてください。［長さ］の値は&lt;code&gt;2&lt;/code&gt;に設定し、［ループ再生］と［自動再生］ボタンを有効にします。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt; は、制御したいプロパティを表す「トラック」を追加することで動作します。プレイヤーのタイムライン上では、「キーフレーム」を追加して特定の時点でそのプロパティに設定したい値を指定します。&lt;/p&gt;
&lt;p&gt;アニメーションにキーフレームを追加するには、インスペクターの各プロパティ横に表示された鍵アイコンをクリックします。スライダ（タイムライン上の青いマーカー）が時間&lt;code&gt;0&lt;/code&gt;に位置していることを確認したら、まず &lt;code&gt;Background(背景)&lt;/code&gt; を選択し、&lt;strong&gt;領域/矩形&lt;/strong&gt;の横にある鍵ボタンをクリックします。新規トラックを作成するか確認されるので、指示に従ってください。すると、追加されたキーフレームを表す小さなドットとともに、新しいトラックがアニメーションパネルに追加されます。スライダを時間&lt;code&gt;2&lt;/code&gt;まで移動させ、最後に&lt;strong&gt;領域/矩形&lt;/strong&gt;プロパティの &lt;strong&gt;y&lt;/strong&gt; 値を&lt;code&gt;64&lt;/code&gt;に設定します。別のキーフレームを追加するには、該当するキーをクリックします。&lt;/p&gt;
&lt;p&gt;アニメーションの再生ボタンを押すと、プレイヤーの背後で背景がゆっくりとスクロール表示されるはずです。&lt;/p&gt;
&lt;h2 id="次のステップ"&gt;次のステップ&lt;/h2&gt;
&lt;p&gt;メインシーンが完成し、敵キャラクターを追加する準備が整いました。次のステップでは、弾丸と同じ方法で単一の敵用シーンを作成し、その後複数回インスタンス化します。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_05/"&gt;
&lt;i class="fas fa-arrow-left"&gt;&lt;/i&gt;
戻る
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_07/"&gt;
次へ
&lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>敵兵</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_07/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_07/index.html</guid><description>&lt;p&gt;プレイヤーが射撃できるようになったので、今度は撃つ対象を与えます。&lt;/p&gt;
&lt;h2 id="シーンの設定"&gt;シーンの設定&lt;/h2&gt;
&lt;p&gt;敵キャラには &lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt; を使用します。これは、プレイヤーの弾丸との重複判定や、直接衝突検出する必要があるためです。&lt;/p&gt;
&lt;p&gt;以下に必要となるノードを列挙します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Enemy: &lt;i class="gd-Area2D"&gt;&lt;/i&gt; Area2D
&lt;i class="gd-Sprite2D"&gt;&lt;/i&gt; Sprite2D
&lt;i class="gd-CollisionShape2D"&gt;&lt;/i&gt; CollisionShape2D
&lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt; AnimationPlayer
MoveTimer: &lt;i class="gd-Timer"&gt;&lt;/i&gt; Timer
ShootTimer: &lt;i class="gd-Timer"&gt;&lt;/i&gt; Timer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;※「インスペクター」横の &lt;strong&gt;ノード&lt;/strong&gt; タブをクリックします。&lt;strong&gt;グループ&lt;/strong&gt; セクションに「enemies」と入力し、&lt;strong&gt;追加&lt;/strong&gt; をクリックしてください。弾丸コードで指定したように、これは「enemies」グループ内のオブジェクトを探します。&lt;/p&gt;
&lt;p&gt;スプライトの&lt;strong&gt;テクスチャ&lt;/strong&gt;に&lt;code&gt;Bon_Bon (16 x 16).png&lt;/code&gt;を追加し、&lt;strong&gt;アニメーション/フレーム数&lt;/strong&gt;を&lt;code&gt;4&lt;/code&gt;に設定してください。&lt;/p&gt;
&lt;p&gt;以前と同じように矩形の衝突形状を追加し、サイズを調整してください。タイマーノードの両方で&lt;strong&gt;ワンショット&lt;/strong&gt;を有効にします。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt; において、「バウンス」というアニメーションを追加し、ループ再生と自動再生を設定します。アニメーションパネルの下部にある&lt;strong&gt;スナップ値&lt;/strong&gt;を &lt;code&gt;0.05&lt;/code&gt; に設定してください。&lt;/p&gt;
&lt;p&gt;スプライトノードを選択し、&lt;strong&gt;テクスチャ&lt;/strong&gt; と &lt;strong&gt;フレーム数&lt;/strong&gt; の横にあるキーアイコンをクリックしてトラックを作成します。これは、後でこれらのプロパティに異なる値を使用する「爆発」アニメーションを追加するためです。&lt;/p&gt;
&lt;p&gt;次に、必要な各&lt;strong&gt;フレーム&lt;/strong&gt;値を設定していきます。まずは&lt;code&gt;10ミリ秒&lt;/code&gt;ごとに以下の順番でフレームを設定します。&lt;code&gt;2&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;。最後にもう一度&lt;code&gt;0&lt;/code&gt;を設定してすぐ後ろに配置します。これにより、スプライトが徐々に大きくなり、最後に少し弾むような「脈動」アニメーションが完成します。このセットアップは以下のようになるはずです。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-4b9debd419fcb2679fee976198c44a00" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_20.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-4b9debd419fcb2679fee976198c44a00"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_20.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;再生ボタンを押して実際に動作を確認してみてください。必要に応じて調整していただいても結構です。&lt;/p&gt;
&lt;p&gt;次に、「explode」というアニメーションを追加してください。長さを &lt;code&gt;0.4&lt;/code&gt; 秒に設定してください。&lt;/p&gt;
&lt;p&gt;スプライトの&lt;strong&gt;テクスチャ&lt;/strong&gt;を &lt;code&gt;Explosion (16 x 16).png&lt;/code&gt; に変更し、そのプロパティにキーフレームを適用します。この画像は敵キャラ画像と異なるフレーム数を持っているため、&lt;strong&gt;Hフレーム&lt;/strong&gt;も &lt;code&gt;6&lt;/code&gt; に変更し、同様にキーフレームを設定が必要です。&lt;/p&gt;
&lt;p&gt;現在のキーフレームを時間 &lt;code&gt;0&lt;/code&gt; 時点で&lt;code&gt;0&lt;/code&gt;に、時間 &lt;code&gt;0.4&lt;/code&gt; 時点で&lt;code&gt;5&lt;/code&gt;に設定してください。アニメーションを実行して動作を確認してください。&lt;/p&gt;
&lt;h2 id="敵キャラ用スクリプト"&gt;敵キャラ用スクリプト&lt;/h2&gt;
&lt;p&gt;敵ユニットは画面上部のグリッド状に配置されて出現します。一定時間後にプレイヤー方向へ降下を開始し、破壊されない場合は画面上部に復帰します。また、定期的にプレイヤーに対して攻撃を仕掛けてきます。&lt;/p&gt;
&lt;p&gt;スクリプトを追加し、変数から始めてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;extends&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Area2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; start_pos &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Vector2&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;ZERO
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#b48ead"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@onready&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; screensize &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;get_viewport_rect&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;size
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;変数 &lt;code&gt;start_pos&lt;/code&gt; は、敵の初期位置を追跡するために使用され、移動後に元の位置に復帰できるようにします。これは敵が生成される際に設定し、&lt;code&gt;start()&lt;/code&gt; 関数を呼び出すときに行います。&lt;/p&gt;</description></item><item><title>敵の射撃</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_08/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_08/index.html</guid><description>&lt;p&gt;敵が攻撃できるようになったので、今度は彼らが撃つ対象を与えます。&lt;/p&gt;
&lt;h2 id="敵弾シーン"&gt;敵弾シーン&lt;/h2&gt;
&lt;p&gt;以前プレイヤー用の弾丸を作成したときと同じように、新しい&lt;code&gt;EnemyBullet&lt;/code&gt;シーンを作成してください。ここでは詳細な手順は割愛しますが、行き詰まった場合はその部分を参照してください。唯一の違いは、代わりに&lt;code&gt;Enemy_projectile (16 x 16).png&lt;/code&gt;画像を使用できる点です。&lt;/p&gt;
&lt;p&gt;スクリプトは少し異なります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;extends&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;Area2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@export&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#b48ead"&gt;150&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;pos&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; pos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_process&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;delta&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; position&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;y &lt;span style="color:#81a1c1"&gt;+=&lt;/span&gt; speed &lt;span style="color:#81a1c1"&gt;*&lt;/span&gt; delta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;i class="gd-VisibleOnScreenNotifier2D"&gt;&lt;/i&gt;&lt;code&gt;VisibleOnScreenNotifier2D&lt;/code&gt;と&lt;i class="gd-Area2D"&gt;&lt;/i&gt;&lt;code&gt;Area2D&lt;/code&gt;の &lt;code&gt;screen_exited&lt;/code&gt; シグナルと &lt;code&gt;area_entered&lt;/code&gt; シグナルをそれぞれ接続してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_visible_on_screen_notifier_2d_screen_exited&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;queue_free&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_area_entered&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;area&lt;span style="color:#eceff4"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;if&lt;/span&gt; area&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;name &lt;span style="color:#81a1c1"&gt;==&lt;/span&gt; &lt;span style="color:#a3be8c"&gt;&amp;#34;Player&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;queue_free&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;※プレイヤーへのヒットは検出していますが、現時点では何も処理していません。ダメージを与える仕組みを追加した時点で、この問題に対処します。&lt;/p&gt;
&lt;h2 id="敵への射撃を追加"&gt;敵への射撃を追加&lt;/h2&gt;
&lt;p&gt;敵のスクリプト上部で新しい弾丸をロードします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; bullet_scene &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1"&gt;preload&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#a3be8c"&gt;&amp;#34;res://enemy_bullet.tscn&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に射撃関数を書き換えます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_shoot_timer_timeout&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; b &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; bullet_scene&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;instantiate&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;get_tree&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;root&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;add_child&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;b&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;position&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $ShootTimer&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;wait_time &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#81a1c1"&gt;randf_range&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#b48ead"&gt;4&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#b48ead"&gt;20&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $ShootTimer&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Main&lt;/code&gt; シーンを再生し直すと、ランダムな敵の弾丸が出現するはずです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_07/"&gt;
&lt;i class="fas fa-arrow-left"&gt;&lt;/i&gt;
戻る
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_09/"&gt;
次へ
&lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>ユーザーインターフェースとスコア</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_09/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_09/index.html</guid><description>&lt;p&gt;ゲームの最後の主要コンポーネントは &lt;em&gt;ユーザーインターフェース&lt;/em&gt; (UI) です。プレイヤーにスコアやその他の情報を表示する方法が必要になります。これを実現するために、Godotが提供する各種 &lt;i class="gd-Control"&gt;&lt;/i&gt;&lt;code&gt;Control&lt;/code&gt; ノードを使用します。これらはUI構築用に設計された専用ノードです。&lt;/p&gt;
&lt;h2 id="ユーザインタフェースシーン"&gt;ユーザインタフェースシーン&lt;/h2&gt;
&lt;p&gt;シーンの開始には &lt;i class="gd-MarginContainer"&gt;&lt;/i&gt;&lt;code&gt;MarginContainer&lt;/code&gt; を使用し、名前は &lt;code&gt;UI&lt;/code&gt; としてください。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;コンテナノード&lt;/em&gt; は&lt;i class="gd-Control"&gt;&lt;/i&gt;&lt;code&gt;Control&lt;/code&gt;ノードの一種で、子要素のサイズや位置を制御するように設計されています。これを使用することで、手動で調整する手間をかけずにコントロールノードを簡単に配置・移動できます。&lt;i class="gd-MarginContainer"&gt;&lt;/i&gt;&lt;code&gt;MarginContainer&lt;/code&gt;を使用すると、その子要素が端に近づきすぎるのを防ぐことができます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;インスペクター&lt;/strong&gt;の&lt;strong&gt;テーマオーバーライド/定数&lt;/strong&gt;セクションで、4つの&lt;strong&gt;マージン&lt;/strong&gt;値をすべて &lt;code&gt;10&lt;/code&gt; に設定します。その後、ビューポート上部のメニューバーで、アンカーを&lt;strong&gt;トップワイド&lt;/strong&gt;プリセットに設定してください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-320b473a75103718217bb5db8fbba1ba" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_21.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-320b473a75103718217bb5db8fbba1ba"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_21.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;次に、&lt;i class="gd-HBoxContainer"&gt;&lt;/i&gt;&lt;code&gt;HBoxContainer&lt;/code&gt; を追加してください。このコンテナは子要素を水平方向に配置します。その上に、船のシールドレベルを表示する&lt;i class="gd-TextureProgressBar"&gt;&lt;/i&gt;&lt;code&gt;TextureProgressBar&lt;/code&gt; を追加し、「&lt;code&gt;ShieldBar&lt;/code&gt;」と名前を付けます。&lt;/p&gt;
&lt;p&gt;申し訳ありませんが、進捗バーとして使用できる適切な画像がアートパックにありません（1つ存在はしますが、使い勝手の良いフォーマットではありません）。代わりに以下の2つの画像を使用します。1つは緑色のプログレスバー、もう1つは白い枠線です。これらをプロジェクトフォルダに保存してください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-c392da124535d3eff4f4ca962b0585a9" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/bar_foreground.png?width=100" alt="alt" style="height: auto; width: 100;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-c392da124535d3eff4f4ca962b0585a9"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/bar_foreground.png?width=100" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="#image-6ade1216e3795fcec728ef9c4a188209" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/bar_background.png?width=100" alt="alt" style="height: auto; width: 100;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-6ade1216e3795fcec728ef9c4a188209"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/bar_background.png?width=100" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;テクスチャ設定セクションで、背景画像のドラッグ先を「Progress」に、前景画像のドロップ先を「Under」に指定します。まず気づくのは、デフォルトサイズが非常に小さいことです。最初にレイアウト設定で「カスタム最小サイズ」を &lt;code&gt;(80, 16)&lt;/code&gt; に設定してください。オレンジ色の選択枠は大きくなりますが、画像は変わりません。これは単に画像を延ばすと見た目が悪くなるためです。代わりに、「ナインパッチストレッチ」チェックボックスを有効にし、4つの「伸縮マージン値」をすべて &lt;code&gt;3&lt;/code&gt; に設定します。&lt;/p&gt;
&lt;p&gt;これで長くて塗りつぶされていないバーが表示されているはずです。塗りつぶされた状態でどのように見えるかを確認するには、「Range」セクションの「Value」プロパティを &lt;code&gt;0&lt;/code&gt; から &lt;code&gt;100&lt;/code&gt; の間の任意の値に変更してください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-92e066e6becea25db064d2132de2fba0" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_22.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-92e066e6becea25db064d2132de2fba0"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_22.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;右側にはスコアを表示したいです。単に&lt;i class="gd-Label"&gt;&lt;/i&gt;&lt;code&gt;Label&lt;/code&gt;ノードを使ってフォントを追加するだけでもできますが、それでは面白みがありません。アートパックには、代わりに使用できる美しいピクセル数字セットが含まれています。適切に表示するためには、少しコーディングして数値を切り出す必要があります。&lt;/p&gt;
&lt;h2 id="スコアカウンター"&gt;スコアカウンター&lt;/h2&gt;
&lt;p&gt;新しいシーンを開始し、&lt;i class="gd-HBoxContainer"&gt;&lt;/i&gt;&lt;code&gt;HBoxContainer&lt;/code&gt;を追加してください。&lt;code&gt;ScoreCounter(スコアカウンター)&lt;/code&gt;と名前を付け、&lt;strong&gt;レイアウト設定&lt;/strong&gt;を&lt;strong&gt;ワイド・トップ配置&lt;/strong&gt;に設定し、&lt;strong&gt;整列方法&lt;/strong&gt;を「末尾」に設定してください。さらに、&lt;strong&gt;テーマのオーバーライド/定数/分離幅&lt;/strong&gt;を &lt;code&gt;0&lt;/code&gt; に設定します（プロパティ名の横にあるチェックボックスを必ず有効化してください）。&lt;/p&gt;
&lt;p&gt;このコンテナでは、各数字を表示する &lt;i class="gd-TextureRect"&gt;&lt;/i&gt;&lt;code&gt;TextureRect&lt;/code&gt;ノードの文字列を配置します。まずは1つ追加し、それを複製する方法から始めてください。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-TextureRect"&gt;&lt;/i&gt;&lt;code&gt;TextureRect&lt;/code&gt; &lt;code&gt;Digit0&lt;/code&gt;という名前を付けます。&lt;strong&gt;テクスチャ&lt;/strong&gt;セクションで「新規AtlasTexture」を選択し、ボックスをクリックして開きます。&lt;code&gt;Number_font (8 x 8).png&lt;/code&gt;ファイルを&lt;strong&gt;アトラス&lt;/strong&gt;プロパティにドラッグし、&lt;strong&gt;領域&lt;/strong&gt;を &lt;code&gt;(32, 8, 8, 8)&lt;/code&gt; に設定します。&lt;strong&gt;伸縮モード&lt;/strong&gt;は「アスペクト比を維持（中心固定）」に設定してください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Digit0&lt;/code&gt;ノードを選択し、&lt;code&gt;Ctrl + D&lt;/code&gt; を7回押してノードの複製を作成します。この手順完了後に表示されるべき画面例を以下に示します。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-41166f6c57710e1a73fcbdbd06b4ee28" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_23.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-41166f6c57710e1a73fcbdbd06b4ee28"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/2d_101_23.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;問題が発生しました。&lt;i class="gd-TextureRect"&gt;&lt;/i&gt;&lt;code&gt;TextureRect&lt;/code&gt; を8つの個別コピーに複製したにもかかわらず、すべてのインスタンスが同じ &lt;code&gt;AtlasTexture&lt;/code&gt; を&lt;strong&gt;テクスチャ&lt;/strong&gt;プロパティで共有しています。つまり、&lt;strong&gt;領域&lt;/strong&gt;を変更して別の数字を表示しようとすると、すべての数字が同時に変わってしまうのです。&lt;/p&gt;
&lt;p&gt;これはなぜかというと、&lt;code&gt;Resource&lt;/code&gt;オブジェクト（例えば&lt;code&gt;Texture&lt;/code&gt;）はメモリにロードされてから共有されるからです。実際には単一のテクスチャしか存在しないため、このアプローチは非常に効率的です - 同じ画像を何度も読み込んでメモリを浪費するのを防げます。ただし、特定のノードをユニークにする場合は明示的に指定します。&lt;/p&gt;</description></item><item><title>ゲームの開始と終了方法</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_10/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_10/index.html</guid><description>&lt;p&gt;最後のステップとして、ゲームにスタートボタンと「ゲームオーバー」状態を追加してください。&lt;/p&gt;
&lt;h2 id="ゲーム開始方法"&gt;ゲーム開始方法&lt;/h2&gt;
&lt;p&gt;現在ゲームを実行するとすぐに開始されますが、起動用のボタンを追加してください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Main&lt;/code&gt;を&lt;code&gt;CanvasLayer&lt;/code&gt;の子要素として追加し、そこに&lt;i class="gd-CenterContainer"&gt;&lt;/i&gt;&lt;code&gt;CenterContainer&lt;/code&gt;を追加し、そのレイアウトを&lt;strong&gt;フル矩形&lt;/strong&gt;に設定します。次に、&lt;i class="gd-TextureButton"&gt;&lt;/i&gt;&lt;code&gt;TextureButton&lt;/code&gt;をその子要素として追加してください。このボタンに&lt;code&gt;Start&lt;/code&gt;という名前を付け、その&lt;strong&gt;通常状態&lt;/strong&gt;のテクスチャとして&lt;code&gt;START (48 x 8).png&lt;/code&gt;画像を設定します。&lt;/p&gt;
&lt;p&gt;スクリプトの上部に参照を追加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@onready&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; start_button &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; $CanvasLayer/CenterContainer/Start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このボタンの&lt;code&gt;pressed&lt;/code&gt;テクスチャを&lt;code&gt;Main&lt;/code&gt;に接続し、このコードを追加してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_start_pressed&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start_button&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;hide&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;new_game&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;new_game()&lt;/code&gt;関数はゲームの開始処理を担当するため、&lt;code&gt;_ready()&lt;/code&gt;を変更し、敵を生成しないようにしつつ、ボタンが表示されるようにするだけです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_ready&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start_button&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;show&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#616e87;font-style:italic"&gt;# spawn_enemies()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、&lt;code&gt;new_game()&lt;/code&gt;関数を追加してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;new_game&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; score &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; &lt;span style="color:#b48ead"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $CanvasLayer/UI&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;update_score&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;score&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $Player&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;start&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;spawn_enemies&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;現在は、シーンを実行するとボタンが表示され、クリックするとゲームが開始されるはずです。&lt;/p&gt;
&lt;h2 id="ゲーム終了方法"&gt;ゲーム終了方法&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;CenterContainer&lt;/code&gt;の子として &lt;i class="gd-TextureRect"&gt;&lt;/i&gt;&lt;code&gt;TextureRect&lt;/code&gt; を追加し、ノード名を &lt;code&gt;GameOver&lt;/code&gt; に設定します。画像には &lt;code&gt;GAME_OVER (72 x 8).png&lt;/code&gt; を使用します。この画像はスタートボタンと重なりますが、問題ありません。ゲームでは一度に表示するのは一つだけだからです。&lt;/p&gt;
&lt;p&gt;スクリプトの上部に別の参照を追加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d08770"&gt;@onready&lt;/span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;var&lt;/span&gt; game_over &lt;span style="color:#81a1c1"&gt;=&lt;/span&gt; $CanvasLayer/CenterContainer/GameOver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;また、&lt;code&gt;_ready()&lt;/code&gt; に &lt;code&gt;game_over.hide()&lt;/code&gt; を追加してください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Main&lt;/code&gt; でプレイヤーの &lt;code&gt;died&lt;/code&gt; シグナルを接続してください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript" data-lang="gdscript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#81a1c1;font-weight:bold"&gt;func&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;_on_player_died&lt;/span&gt;&lt;span style="color:#eceff4"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#88c0d0"&gt;get_tree&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;call_group&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#a3be8c"&gt;&amp;#34;enemies&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; &lt;span style="color:#a3be8c"&gt;&amp;#34;queue_free&amp;#34;&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; game_over&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;show&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#81a1c1;font-weight:bold"&gt;await&lt;/span&gt; &lt;span style="color:#88c0d0"&gt;get_tree&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;create_timer&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;&lt;span style="color:#b48ead"&gt;2&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;timeout
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; game_over&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;hide&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start_button&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;show&lt;/span&gt;&lt;span style="color:#eceff4"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この操作で2秒間「ゲームオーバー」画面が表示され、その後スタートボタンに戻るので、再度プレイできます。ぜひお試しいただき、何ゲームか続けて遊んでみてください。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_09/"&gt;
&lt;i class="fas fa-arrow-left"&gt;&lt;/i&gt;
前へ
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;th style="text-align: right"&gt;
&lt;span class="btn cstyle transparent"&gt;
&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_end/"&gt;
次へ
&lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
&lt;/a&gt;
&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>まとめ</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_end/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/games/first_2d/first_2d_end/index.html</guid><description>&lt;p&gt;ここまでついてきてくださった皆さんは、Godotでゲームを構築する基本原理の多くを学べたことでしょう。基本的なゲームが完成しましたので、ここでチュートリアルは終了とします。&lt;/p&gt;
&lt;div class="box notices cstyle tip"&gt;
&lt;div class="box-label"&gt;&lt;i class="fa-fw fas fa-lightbulb"&gt;&lt;/i&gt; 効果的な学習の秘訣&lt;/div&gt;
&lt;div class="box-content"&gt;
&lt;p&gt;このようなチュートリアルや、オンラインで見つけられる他の教材を最大限に活用するためのとっておきの方法をご紹介します。作業が終わったらすぐにプロジェクトを削除し、最初からやり直してください。今度は、解説を見ずに自分で再現してみることに挑戦してみます。行き詰まった部分だけは解説を参照しても構いませんが、その後は再度閉じて進めてください。&lt;/p&gt;
&lt;p&gt;繰り返しのように聞こえるかもしれませんが、これがまさに学ぶ方法です。何度も実践を重ねることで。ぜひこのアドバイスに従ってみてください。ゲーム開発スキルが驚くほど速く上達するのを実感できるでしょう。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="ゲームへの追加方法"&gt;ゲームへの追加方法&lt;/h2&gt;
&lt;p&gt;このゲームで使われている技術に十分慣れたと感じたら、次は新しいことに挑戦する段階です。ゲームに新しい機能を1つ追加してみます。&lt;/p&gt;
&lt;p&gt;アイデアが浮かばないときは、これらの提案を参考にしてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;追加の敵タイプについて&lt;/strong&gt; - アートパックには他種の敵用アートワークも含まれています。これらの敵はどのように移動し、攻撃するのでしょうか？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ウェーブシステム&lt;/strong&gt; - 画面をクリアするたびに新たな敵が次々に出現する仕様を追加&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ボスキャラクター&lt;/strong&gt; - 通常の敵より巨大な「ボスキャラ」が登場するようにしたら？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;パワーアップ要素&lt;/strong&gt; - プレイヤーが収集できるアイテムとして各種パワーアップを実装。関連するグラフィックも用意済み:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;シールド回復アイテム&lt;/strong&gt; - これを回収するとシールド効果が強化される&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;武器アップグレード&lt;/strong&gt; - 発射弾数増加や新たな攻撃パターン追加など&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;効果音とBGM&lt;/strong&gt; - サウンドエフェクトと背景音楽を導入することで、ゲーム全体にさらなる個性と臨場感を与える。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="さらに詳しく学ぶ"&gt;さらに詳しく学ぶ&lt;/h2&gt;
&lt;p&gt;さらに学習を進めませんか？次の学びの冒険に向けたオススメをご紹介します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;&lt;strong&gt;Godot入門：3D制作の始め方&lt;/strong&gt;&lt;/a&gt; - 3Dモデリングに興味がある方は、Godotの3D機能に関するこの解説をご覧ください。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;このウェブサイトの他のコンテンツもご覧ください。夢のゲームを作るための様々な事例、チュートリアル、コードスニペットを豊富にご用意しています。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="このプロジェクトを-githubからダウンロード"&gt;&lt;i class="fas fa-code-branch"&gt;&lt;/i&gt; このプロジェクトを&lt;i class='fab fa-github'&gt;&lt;/i&gt; GitHubからダウンロード&lt;/h2&gt;
&lt;p&gt;プロジェクトコードはこちらからダウンロードしてください。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/godotrecipes/classic_shmup" target="_blank"&gt;https://github.com/godotrecipes/8_direction_animation&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>