<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>3Dアセットの扱い方 on Godot 4 レシピ</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/index.html</link><description>Recent content in 3Dアセットの扱い方 on Godot 4 レシピ</description><generator>Hugo -- gohugo.io</generator><language>ja</language><atom:link href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/index.xml" rel="self" type="application/rss+xml"/><item><title>アセットのインポート</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/importing_assets/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/importing_assets/index.html</guid><description>&lt;h2 id="課題"&gt;課題&lt;/h2&gt;
&lt;p&gt;以下の3Dアセットセットをダウンロード（または作成）しました。リギング済みでアニメーション化されたキャラクターを含むファイル群で、これをGodotにインポートしたいです。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;本例では、&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/"&gt;セクションの説明&lt;/a&gt; に記載されているアートパックをダウンロードして解凍済みであることを前提とします。&lt;/p&gt;
&lt;p&gt;プロジェクトにファイルをコピーする前に、以下の点に注意してください。アセットにはOBJ、FBX、GLTFといった複数の異なるファイル形式があります。また、変更を希望する場合に備えてサンプルや個別テクスチャなどの追加ファイルも用意されています。これらすべては不要であり、GodotではGLTF形式が最も推奨されるインポートフォーマットです。したがって、必ず&lt;code&gt;gltf&lt;/code&gt;フォルダまたは&lt;code&gt;.gltf&lt;/code&gt;ファイル（もしくは同等のバイナリ形式である&lt;code&gt;.glb&lt;/code&gt;）のみをプロジェクトディレクトリにドラッグ＆ドロップしてください。&lt;/p&gt;
&lt;p&gt;ここで、「ダンジョン」パックから&lt;code&gt;gltf&lt;/code&gt;フォルダと、「冒険者」パックから&lt;code&gt;characters&lt;/code&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;ダンジョンパックには多くのファイルが含まれています。Godotがすべてを読み込むまで少し時間がかかるかもしれません！&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="キャラクターのインポート方法"&gt;キャラクターのインポート方法&lt;/h2&gt;
&lt;p&gt;ファイルシステムタブで&lt;code&gt;knight.glb&lt;/code&gt;ファイルを選択し、左上の&lt;strong&gt;インポート&lt;/strong&gt;タブをクリックしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-cf6a43570f20c57c47847f25be0cfb77" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_tab.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-cf6a43570f20c57c47847f25be0cfb77"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_tab.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;/p&gt;
&lt;p&gt;
&lt;a href="#image-e3dec9fc90b09f1a941ecb9a7ed86252" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_adv.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-e3dec9fc90b09f1a941ecb9a7ed86252"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_adv.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;左側に表示されるのは、GLTFシーンに含まれる全てのデータです - テクスチャやアニメーションも含まれます。キャラクターに付属する各種武器オプションや、豊富なアニメーションリストに注目してください。&lt;/p&gt;
&lt;p&gt;中央に選択した文字のプレビューが表示され、右側には選択した項目の設定を調整できるオプションメニューがあります。&lt;/p&gt;
&lt;p&gt;プレイヤーが &lt;i class="gd-CharacterBody3D"&gt;&lt;/i&gt;&lt;code&gt;CharacterBody3D&lt;/code&gt;としてコード化されるため、ここでノードタイプを指定できます。&lt;code&gt;シーンルート&lt;/code&gt;をクリックし、右側のパネルで&lt;strong&gt;ルートの型&lt;/strong&gt;を &lt;i class="gd-CharacterBody3D"&gt;&lt;/i&gt;&lt;code&gt;CharacterBody3D&lt;/code&gt;に設定してください。&lt;/p&gt;
&lt;h3 id="アニメーション機能"&gt;アニメーション機能&lt;/h3&gt;
&lt;p&gt;アニメーション一覧までスクロールしてください。様々な種類がありますが、攻撃モーションのように一度再生すれば足りるものと、「待機中」や「走行中」などループさせたいものがあります。このようなアニメーションについては、名称を選択し、&lt;strong&gt;ループモード&lt;/strong&gt;を「リニア」に設定します。これはすべての「歩行」「走行」「待機」バリエーションについて行います。作業が完了したら、画面下部の&lt;strong&gt;再インポート&lt;/strong&gt;ボタンをクリックしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-97fb9d68bbc2dba78c48c761829ea399" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_loop.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-97fb9d68bbc2dba78c48c761829ea399"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_loop.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&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;code&gt;&amp;quot;-loop&amp;quot;&lt;/code&gt;で終わるように命名してください。その他のインポート関連のヒントについては、&lt;a href="https://docs.godotengine.org/ja/stable/tutorials/assets_pipeline/importing_scenes.html#import-hints" target="_blank"&gt;Godotドキュメント&lt;/a&gt;の「インポートヒント」セクションを参照してください。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ファイルシステム&lt;/strong&gt;内の&lt;code&gt;knight.glb&lt;/code&gt;を右クリックし、&lt;em&gt;新規継承シーン&lt;/em&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;h2 id="ワールドアイテムのインポート"&gt;ワールドアイテムのインポート&lt;/h2&gt;
&lt;p&gt;環境用オブジェクトのインポートも同様の手順で行います。具体例として、ダンジョンの壁ファイルを使いましょう。ダンジョンパックには多数のファイルが含まれているため、ファイル名フィルターに「wall」と入力して目的のファイルを簡単に見つけられるようにします。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-340669f7f9562885209c2e81cb820c99" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_wall.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-340669f7f9562885209c2e81cb820c99"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_wall.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-StaticBody3D"&gt;&lt;/i&gt;幸いなことに、Godotではインポート時に自動的にこれらの処理を行ってくれます。&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;a href="#image-72619cd7b7622033d7e4a09a8e7d02cb" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_physics.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-72619cd7b7622033d7e4a09a8e7d02cb"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3d_import_physics.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;をクリックします。ゲームでこのアセットを使用する際、Godotは自動的に対応する衝突形状を持った&lt;i class="gd-StaticBody3D"&gt;&lt;/i&gt;&lt;code&gt;StaticBody3D&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;上記と同様に、衝突形状についてもインポート時の補助機能が用意されています。Blenderプロジェクトファイルに&lt;code&gt;-col&lt;/code&gt;（またはその他のバリエーション）を追加することで、自動的にこの処理を実行するようインポートツールに指示できます。詳細は&lt;em&gt;インポート補助機能&lt;/em&gt;のリンクを参照してください。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="インポート処理の自動化"&gt;インポート処理の自動化&lt;/h2&gt;
&lt;p&gt;自作アセットを作成する際にはインポートヒントを追加する方法が推奨されますが、今回のように既存のアセットパックをダウンロードする場合には適用できません。&lt;/p&gt;
&lt;p&gt;特定タイプのノードすべてに適用可能な&lt;em&gt;インポートスクリプト&lt;/em&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;@tool&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;extends&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;EditorScenePostImport&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;_post_import&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;scene&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;iterate&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;scene&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; scene
&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;iterate&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;node&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; node &lt;span style="color:#81a1c1"&gt;!=&lt;/span&gt; &lt;span style="color:#81a1c1"&gt;null&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; node &lt;span style="color:#81a1c1;font-weight:bold"&gt;is&lt;/span&gt; &lt;span style="color:#8fbcbb"&gt;MeshInstance3D&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; node&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;create_trimesh_collision&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;for&lt;/span&gt; child &lt;span style="color:#81a1c1;font-weight:bold"&gt;in&lt;/span&gt; node&lt;span style="color:#81a1c1"&gt;.&lt;/span&gt;&lt;span style="color:#88c0d0"&gt;get_children&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;iterate&lt;/span&gt;&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;child&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;strong&gt;インポート&lt;/strong&gt; タブでは、この設定を&lt;strong&gt;インポートスクリプト&lt;/strong&gt;として指定できます。その後、&lt;strong&gt;再インポート&lt;/strong&gt;をクリックすると、衝突が作成されます。&lt;/p&gt;</description></item><item><title>キャラクターアニメーション</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/character_animation/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/character_animation/index.html</guid><description>&lt;h2 id="課題"&gt;課題&lt;/h2&gt;
&lt;p&gt;以下の状況に対応する：ユーザーが作成したかサードパーティからダウンロードした不正なアニメーション付き3DキャラクターをGodotでセットアップしたい。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;このレシピでは、既にキャラクターモデルとアニメーションをインポート済みであることを前提としています。まだの方は、&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/importing_assets/"&gt;アセットのインポート方法&lt;/a&gt;を参照してください。参考までに、&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/"&gt;セクション説明欄&lt;/a&gt;でリンクされているアートパックを使用しています。&lt;/p&gt;
&lt;h3 id="キャラクターの準備"&gt;キャラクターの準備&lt;/h3&gt;
&lt;p&gt;以下の理由でキャラクターには &lt;i class="gd-CharacterBody3D"&gt;&lt;/i&gt;&lt;code&gt;CharacterBody3D&lt;/code&gt; を選択しました。そのため、シーンはこのような外観になるはずです（メッシュリストが非常に長いため、&lt;code&gt;Rig&lt;/code&gt;ノードは折りたたみ状態にしています）：&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-9b6ab613a1df97661a724c53c7044770" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dcharacter_imported_scene.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-9b6ab613a1df97661a724c53c7044770"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dcharacter_imported_scene.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最初に目につくのは、キャラクターが武器と盾でいっぱいになっていることです！ 作者は親切にも、すべての装備品が正しく取り付けられ、適切な向きになるようにしてくれています。リストをスクロールして、表示したくないアイテムを隠すことができます。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-55b56c82f600254523bdf1119fb54fa0" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dcharacter_default_pose.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-55b56c82f600254523bdf1119fb54fa0"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dcharacter_default_pose.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="アニメーションツリーanimationtreeについて"&gt;アニメーションツリー(AnimationTree)について&lt;/h3&gt;
&lt;p&gt;利用可能なアニメーションが多数ある場合、それらをすべてコードで管理するのは急速に複雑化します。プレイヤーが行っている動作に応じて、どのタイミングでどのアニメーションを再生するかを判断するには、どれほど多くの&lt;code&gt;if&lt;/code&gt;文が必要になるか考えてみてください。アニメーションがわずかであれば問題ありませんが、数が増えるとすぐに手に負えなくなり、実用的ではなくなってしまいます。&lt;/p&gt;
&lt;p&gt;また、キャラクターが静止している場合も考慮します。この時は&amp;quot;Idle&amp;quot;アニメーションを再生する必要があります。プレイヤーが「前進」ボタンを押すと、キャラクターは移動を開始し、同時に&amp;quot;Walking&amp;quot;アニメーションに切り替わるべきです。しかしこの急激な切り替えは不自然に見えるため、できれば2つのアニメーションをよりスムーズに移行させる「ブレンド処理」が望まれます。&lt;/p&gt;
&lt;p&gt;これらの複雑なアニメーション問題を解決するには、&lt;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt;ノードを使用が必要です。このノードは&lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt;を制御するために設計されており、アニメーションの遷移やブレンド方法を管理する機能を備えています。&lt;/p&gt;
&lt;p&gt;シーンに &lt;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt; コンポーネントを追加してください。［インスペクター］で［ツリールート］を新規作成された &lt;code&gt;AnimationNodeStateMachine&lt;/code&gt; に設定し、［Anim Player］ではキャラクターの &lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt; を選択します。最後に［有効化］チェックボックスをオンにしてください。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-bfdfd933d84a279aeb8070378e56d500" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/animtree_settings.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-bfdfd933d84a279aeb8070378e56d500"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/animtree_settings.png" 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;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt;　が有効になっていると、 &lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt; &lt;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt; でアニメーションを選択できなくなることにご注意ください。変更を加えたりアニメーションをテストする必要がある場合は、作業する際にツリーの &lt;strong&gt;有効&lt;/strong&gt; プロパティを必ずオフにしてください。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="待機歩行走行サイクルについて"&gt;待機/歩行/走行サイクルについて&lt;/h3&gt;
&lt;p&gt;このモデルには数多くのアニメーションが同封されています。ここでは特に待機→歩行/走行の遷移、ジャンプ、攻撃モーションに焦点を当てます。他のアニメーションも必要に応じて同様の方法で扱えます。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-AnimationPlayer"&gt;&lt;/i&gt;&lt;code&gt;AnimationPlayer&lt;/code&gt;コンポーネントで、&amp;ldquo;Idle&amp;rdquo;（待機）、&amp;ldquo;Running_A&amp;rdquo;（前進ランニング）、&amp;ldquo;Walking_Backwards&amp;rdquo;（後方歩行）、および&amp;quot;Running_Strafe_Left&amp;quot;/&amp;ldquo;Running_Strafe_Right&amp;rdquo;（横移動左右ランニング）のアニメーションを設定してください。すべてループ再生に設定することを確認してください。「Play」ボタンを押してテストできます。(▶)。いずれかがループになっていない場合は、設定した後でキャラクターを再インポートしてください（&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/importing_assets/"&gt;アセットのインポート方法&lt;/a&gt;参照）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AnimationTree&lt;/code&gt;ノードを選択すると、ウィンドウ下部にパネルが開きます。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-1d6b8a99e084d29abb69c35dcfcac6d8" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/animtree_empty.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-1d6b8a99e084d29abb69c35dcfcac6d8"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/animtree_empty.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;例として、空きスペースを右クリックし、「アニメーション追加 → 待機」を選択してから、同様に「1H_Melee_Attack_Chop」アニメーションも追加してください。&lt;/p&gt;
&lt;p&gt;「ノードを接続」ボタンを選択し、&lt;code&gt;開始&lt;/code&gt;から&lt;code&gt;アイドル&lt;/code&gt;までの接続線を引いてください。即座に「アイドル」アニメーションが再生されるはずです。&lt;/p&gt;
&lt;p&gt;しかし、このままではうまくいきません。2つのアニメーション間で急速に点滅を繰り返すだけで、両方が「即時遷移」に設定されているため、スムーズな移行ができないからです。&lt;/p&gt;
&lt;p&gt;遷移条件を変更するには、アイコンを使用して&lt;strong&gt;選択モード&lt;/strong&gt;に切り替えた後、いずれかの接続をクリックしてください。インスペクターウィンドウで接続プロパティを確認できます。アイドル状態からアタック状態への遷移では、&lt;strong&gt;進行/モード&lt;/strong&gt; を「有効」（&amp;ldquo;自動&amp;rdquo; ではなく）に設定したいです。つまり、指示があった場合にのみ実行されるということです。接続ライン上のアイコンの色が変化することに注意してください。&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;p&gt;この設定により、異なるアニメーションの実装方法とそれらの間の遷移方法について理解できたかと思います。ただし、さらに一歩進んだ内容を扱うため、ゴミ箱アイコンを使用して2つのアニメーションを削除し、代わりに「ブレンドスペース」を設定してみます。&lt;/p&gt;
&lt;h3 id="ブレンドスペース"&gt;ブレンドスペース&lt;/h3&gt;
&lt;p&gt;以下の手順で設定を進めてください。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;空欄に右クリックして新規 &lt;code&gt;BlendSpace2D&lt;/code&gt; を作成します&lt;/li&gt;
&lt;li&gt;BlendSpaceの名前をクリックし、&lt;code&gt;IWR&lt;/code&gt;（idle-walk-run）に改名します&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Start&lt;/code&gt;から遷移を追加し、ブレンドスペースが自動的に再生されるようにします&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;鉛筆アイコンをクリックするとブレンドスペースを編集できます。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-d2ae2e271c5a68809ec2365efb33ed89" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/blendspace_empty.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-d2ae2e271c5a68809ec2365efb33ed89"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/blendspace_empty.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>キャラクタコントローラー</title><link>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/character_controller/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/character_controller/index.html</guid><description>&lt;h2 id="課題"&gt;課題&lt;/h2&gt;
&lt;p&gt;Godot環境でリグ設定済みのアニメーション3Dキャラクターをインポートし、&lt;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt;を使ってそのアニメーションを設定したところです。次は移動機能を実装が必要です。キャラクターコントローラーが必要です。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;このレシピでは、既にキャラクターモデルとアニメーションをインポートしており、アニメーションの遷移やブレンド処理用に &lt;i class="gd-AnimationTree"&gt;&lt;/i&gt;&lt;code&gt;AnimationTree&lt;/code&gt; が適切に設定されていることを前提に進めます。まだ準備ができていない場合は、&lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/importing_assets/"&gt;アセットのインポート方法&lt;/a&gt; および &lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/character_animation/"&gt;キャラクターアニメーションについて&lt;/a&gt; を参照してください。参考までに、ここでは &lt;a href="https://kamera25.github.io/godot_recipes/4.x/ja/3d/assets/"&gt;セクション説明&lt;/a&gt; でリンクされているアートパックを使用しています。&lt;/p&gt;
&lt;h3 id="衝突の追加"&gt;衝突の追加&lt;/h3&gt;
&lt;p&gt;インポートしたシーンのルートノードとして &lt;i class="gd-CharacterBody3D"&gt;&lt;/i&gt;&lt;code&gt;CharacterBody3D&lt;/code&gt; を選択しましたが、衝突形状が欠けているとエラーが出ています。まずはこれを修正します。以下の手順に従ってください。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i class="gd-CollisionShape3D"&gt;&lt;/i&gt;&lt;code&gt;CollisionShape3D&lt;/code&gt; 子要素を追加します&lt;/li&gt;
&lt;li&gt;その &lt;strong&gt;[プロパティ]&lt;/strong&gt; で &lt;i class="gd-CapsuleShape3D"&gt;&lt;/i&gt;&lt;code&gt;CapsuleShape3D&lt;/code&gt; を選択します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;カプセルのサイズと位置を調整し、キャラクターの全身を覆うようにします。参考までに、使用した数値は以下の通りです。&lt;/p&gt;
&lt;p&gt;
&lt;a href="#image-f673c2480d1d9ce5bc74edb2d321726e" class="lightbox-link"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dchar_capsule.png" alt="alt" style="height: auto; width: auto;" loading="lazy"&gt;
&lt;/a&gt;
&lt;a href="javascript:history.back();" class="lightbox" id="image-f673c2480d1d9ce5bc74edb2d321726e"&gt;
&lt;img src="https://kamera25.github.io/godot_recipes/4.x/img/3dchar_capsule.png" alt="alt" class="lightbox-image" loading="lazy"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インポートしたリグは、足部分が「地面」に位置するように配置されています（つまり身体の中心座標に合わせた設定です）。この方法は後で便利になります。プレイヤーが中央に立つ場合、空中に浮いた状態ではなく、実際に地面に立っている状態で表示されるようになるからです。&lt;/p&gt;
&lt;p&gt;Godot の 3D 操作に慣れている方なら、キャラクターが画面後方の &lt;strong&gt;+Z&lt;/strong&gt; 方向に向けていることにもお気づきでしょう。&lt;i class="gd-Skeleton3D"&gt;&lt;/i&gt; ノードを選択し、&lt;strong&gt;Y軸回転&lt;/strong&gt;を &lt;code&gt;180&lt;/code&gt; 度に変更して修正してください。&lt;/p&gt;
&lt;h3 id="入力操作"&gt;入力操作&lt;/h3&gt;
&lt;p&gt;以下のキー操作を使用しています。&lt;code&gt;forward&lt;/code&gt;、&lt;code&gt;back&lt;/code&gt;、&lt;code&gt;left&lt;/code&gt;、&lt;code&gt;right&lt;/code&gt;、&lt;code&gt;jump&lt;/code&gt;。お好みで任意のキー/ボタンに割り当ててください。&lt;/p&gt;
&lt;h3 id="カメラ機能"&gt;カメラ機能&lt;/h3&gt;
&lt;p&gt;プレイヤーを追従する3Dカメラの実装方法には様々なものがあります。この例では、カメラ用マウントとして &lt;i class="gd-SpringArm3D"&gt;&lt;/i&gt;&lt;code&gt;SpringArm3D&lt;/code&gt; を採用します。&lt;/p&gt;
&lt;p&gt;&lt;i class="gd-SpringArm3D"&gt;&lt;/i&gt;&lt;code&gt;SpringArm3D&lt;/code&gt;ノードはレイキャストを実行した後、その子オブジェクトを衝突点に移動させることで動作します。これをカメラに応用すると、プレイヤーとカメラの間に障害物が一切入らない状態を実現でき、この長さを調整することでズーム機能を実装することもできます。&lt;/p&gt;
&lt;p&gt;ルートノードの子として追加し、その後に &lt;i class="gd-Camera3D"&gt;&lt;/i&gt;&lt;code&gt;Camera3D&lt;/code&gt; をその子要素として追加してください。&lt;/p&gt;
&lt;p&gt;春季アームのプロパティで、&lt;strong&gt;スプリング長&lt;/strong&gt;を &lt;code&gt;5&lt;/code&gt;、&lt;strong&gt;マージン&lt;/strong&gt;を &lt;code&gt;0.1&lt;/code&gt;、&lt;strong&gt;位置&lt;/strong&gt;を &lt;code&gt;(0, 2.5, 0)&lt;/code&gt; に設定します。&lt;/p&gt;
&lt;p&gt;We don&amp;rsquo;t want the spring arm to collide with the player&amp;rsquo;s capsule shape, so in the root &lt;i class="gd-CharacterBody3D"&gt;&lt;/i&gt;&lt;code&gt;CharacterBody3D&lt;/code&gt; set the collision layer to &lt;code&gt;2&lt;/code&gt;. Since the spring arm is checking collision layer &lt;code&gt;1&lt;/code&gt;, that will prevent the camera hitting the player&amp;rsquo;s head.&lt;/p&gt;</description></item></channel></rss>