アセットのインポート
課題
以下の3Dアセットセットをダウンロード(または作成)しました。リギング済みでアニメーション化されたキャラクターを含むファイル群で、これをGodotにインポートしたいです。
解決策
本例では、セクションの説明 に記載されているアートパックをダウンロードして解凍済みであることを前提とします。
プロジェクトにファイルをコピーする前に、以下の点に注意してください。アセットにはOBJ、FBX、GLTFといった複数の異なるファイル形式があります。また、変更を希望する場合に備えてサンプルや個別テクスチャなどの追加ファイルも用意されています。これらすべては不要であり、GodotではGLTF形式が最も推奨されるインポートフォーマットです。したがって、必ずgltfフォルダまたは.gltfファイル(もしくは同等のバイナリ形式である.glb)のみをプロジェクトディレクトリにドラッグ&ドロップしてください。
ここで、「ダンジョン」パックからgltfフォルダと、「冒険者」パックからcharactersフォルダを取り出して、プロジェクトにドラッグしました。
ダンジョンパックには多くのファイルが含まれています。Godotがすべてを読み込むまで少し時間がかかるかもしれません!
キャラクターのインポート方法
ファイルシステムタブでknight.glbファイルを選択し、左上のインポートタブをクリックしてください。
こちらには基本的なインポート設定が表示されますが、より詳細なオプションも利用できます。詳細設定ボタンをクリックすると、新しいウィンドウが開きます。
左側に表示されるのは、GLTFシーンに含まれる全てのデータです - テクスチャやアニメーションも含まれます。キャラクターに付属する各種武器オプションや、豊富なアニメーションリストに注目してください。
中央に選択した文字のプレビューが表示され、右側には選択した項目の設定を調整できるオプションメニューがあります。
プレイヤーが CharacterBody3Dとしてコード化されるため、ここでノードタイプを指定できます。シーンルートをクリックし、右側のパネルでルートの型を CharacterBody3Dに設定してください。
アニメーション機能
アニメーション一覧までスクロールしてください。様々な種類がありますが、攻撃モーションのように一度再生すれば足りるものと、「待機中」や「走行中」などループさせたいものがあります。このようなアニメーションについては、名称を選択し、ループモードを「リニア」に設定します。これはすべての「歩行」「走行」「待機」バリエーションについて行います。作業が完了したら、画面下部の再インポートボタンをクリックしてください。
自作キャラクターを作成する場合、このステップは省略できます。ただし、アニメーション名がすべて"-loop"で終わるように命名してください。その他のインポート関連のヒントについては、Godotドキュメントの「インポートヒント」セクションを参照してください。
ファイルシステム内のknight.glbを右クリックし、新規継承シーンを選択してください。
このシーンではすべてのモデルとAnimationPlayer が表示され、ここではアニメーションを実際にテストできます。
ワールドアイテムのインポート
環境用オブジェクトのインポートも同様の手順で行います。具体例として、ダンジョンの壁ファイルを使いましょう。ダンジョンパックには多数のファイルが含まれているため、ファイル名フィルターに「wall」と入力して目的のファイルを簡単に見つけられるようにします。
幸いなことに、Godotではインポート時に自動的にこれらの処理を行ってくれます。
インポートウィンドウで、メッシュオブジェクトを選択します。右側の設定で「物理演算」ボックスをチェックし、「形状タイプ」を「単純な凸形」に設定してください(他のオプションも自由に確認してみてください)。
をクリックします。ゲームでこのアセットを使用する際、Godotは自動的に対応する衝突形状を持ったStaticBody3Dを作成します。
上記と同様に、衝突形状についてもインポート時の補助機能が用意されています。Blenderプロジェクトファイルに-col(またはその他のバリエーション)を追加することで、自動的にこの処理を実行するようインポートツールに指示できます。詳細はインポート補助機能のリンクを参照してください。
インポート処理の自動化
自作アセットを作成する際にはインポートヒントを追加する方法が推奨されますが、今回のように既存のアセットパックをダウンロードする場合には適用できません。
特定タイプのノードすべてに適用可能なインポートスクリプトを作成できます。例えば、前述した静的衝突判定オブジェクトの自動生成を自動化できます。
以下のスクリプト例では、インポートされたオブジェクトのすべてのノードをループ処理し、各メッシュに対して静的衝突判定を作成します。
@tool
extends EditorScenePostImport
func _post_import(scene):
iterate(scene)
return scene
func iterate(node):
if node != null:
if node is MeshInstance3D:
node.create_trimesh_collision()
for child in node.get_children():
iterate(child)
インポート タブでは、この設定をインポートスクリプトとして指定できます。その後、再インポートをクリックすると、衝突が作成されます。
まとめ
以上で、Godotへの3Dアセットインポートに関する概要説明を終了します。
以下のセクションを参照してください。セクション説明、インポートした3Dアセットを扱う際の具体例が記載されています。