3Dオブジェクトのインポート
最終パートでは、3Dプロジェクトを開始し、3D空間のナビゲーション方法とオブジェクト作成について学びました。このセクションでは、自分で作成したまたはダウンロードした既存の3Dオブジェクトのインポート方法と、Godotのより高度な3Dノード機能の使い方をマスターしましょう。
3Dオブジェクトのインポート方法
Blenderなどの3Dモデリングソフトに慣れている方なら、ゲーム用のモデルを作成することもできます。そうでない場合でも、特定のゲームタイプ向けに作られたオブジェクトや、複数のオブジェクトがセットになったコレクションをダウンロードできるリソースは数多くあります。個人的にオススメするフリーゲームアートの制作者の一つにKenney.nlがあります。
チュートリアルで使用するのはKenneyの「プラットフォーマーキット」です。こちらからダウンロードできます。https://kenney.nl/assets/platformer-kit
このキットには、Godotの3Dスキルを習得するために使用できる豊富なオブジェクトが揃っています。以下にキットの外観サンプルをご紹介します。
ダウンロードしたキットを開くと、内部にはさまざまな形式のオブジェクトが含まれています。Godotは複数のフォーマットを使用できますが、このパックではGLTFが利用可能であるため、他の形式よりも推奨されます。GLTF formatフォルダをそのままGodotプロジェクトフォルダにコピーし、ファイル名を「platformer_kit」にリネームしてください。
自分でモデルを作成する場合も、外部でダウンロードしたデータを使用する場合も、それがGodot環境で正しく読み込める形式で保存されている必要があります。Godotは以下の主要な3Dファイル形式をサポートしています。
- glTF -
.gltf(テキスト形式)と.glb(バイナリ形式)の両方に対応 - DAE (Collada) - 古いフォーマットながら現在もサポート継続中
- OBJ (Wavefront) - こちらも旧式フォーマットですが、現代の他のフォーマットに比べると使える機能に制限があります
- FBX - 商用フォーマットであり、限定的な互換性しか備えていません
Godotウィンドウに戻ると、フォルダのスキャンとオブジェクトのインポート処理中に進捗バーが表示されます。その中の一つをクリックして中身を確認してみます。ファイルシステムタブで、crate.glbをダブルクリックしてください。
ここでオブジェクトがシーンとしてインポートされ、ルートのが Node3D に設定され、「Scene Root」という名前になっていることを確認できます。これらを変更してください。ルートの型を RigidBody3D に、ルート名を「Crate」に設定したら、「再インポート」ボタンをクリックしてください。
次に「crate.glb」を右クリックし、新しい継承シーンを選択します。ここでクラシックなゲームオブジェクトである箱が登場します。シーンのルートノードは、求めていた通り「Crate」という名前のRigidBody3Dとなっています。
最後に、ボディに衝突形状を追加する必要があります。通常は 2D ゲームで行うように CollionShape3Dを追加することも可能ですが、より効率的な方法があります。
メッシュ crate2 を選択すると、ビューポート上部に Mesh メニューが表示されます。クリックして「コリジョンシェイプを作成」から「Collision Shape Placement」で兄弟 を選択してください。Godotは自動的にメッシュに対応した衝突形状の CollionShape3D を追加してください。
これでオブジェクトの設定は完了です。Crateシーンを保存して、実際にどのように使用できるか見てみてください。
3Dシーンの構築
Node3Dをルートとして新規シーンを作成します。最初に追加する子オブジェクトは、木箱を積み上げるための「地面」機能を提供するものです。“Ground"という名前の StaticBody3Dを作成し、それに MeshInstance3Dを追加してください。メッシュ プロパティから 新規で「BoxMesh」 を選択し、クリックしてそのプロパティを開きます。サイズ を (10, 0.1, 10) に設定することで、広々とした表面を確保できます。ただし、白色一色では見た目がやや単調になるため、もう少し工夫を加えます。
メッシュのプロパティには、さらにマテリアル設定があります。マテリアルとは、オブジェクトの外観を定義するための要素です。まず「New StandardMaterial3D」を選択し、クリックすると詳細なプロパティ一覧が表示されます。メッシュの色を設定するにはアルベド/カラープロパティを指定が必要です。茶色や濃緑色など、お好みの色を選択してください。
クレートを追加すると、メッシュを貫通して落ちてしまうため、衝突形状も設定する必要があります。Groundに CollisionShape3Dを追加し、Shapeから新規で BoxShape3D を選択します。衝突ボックスのサイズは、メッシュと同じ大きさに設定してください。
次に、シーンに木箱を配置し、大まかな山積み状に並べます。Cameraを追加して、木箱がよく見える位置に設置してください。シーンを実行して、木箱が転がり落ちる様子を観察します!
シーンが暗く表示される理由は、ライティングが全く設定されていないからです。デフォルトでは、Godotはエディターのビューポートと同様に、シーンに任意のライティングや環境設定を追加しません。これは独自のライティングをカスタマイズしたい場合には便利ですが、このような簡易サンプルシーンの場合は、ショートカットが使えます。
ライティング
3D環境には多種多様なライティング効果を作成可能なライトノードが複数用意されています。まずはDirectionalLight3Dから解説を始めてください。ただし手動で追加するのではなく、エディターウィンドウで使用されているのと同じライトを使用する方法を紹介します。ビューポート上部には、プレビューライティングとプレビュー環境を制御する2つのアイコンがあります。これらの横にある三点リーダーをクリックすると、その設定内容を確認できます。
「太陽をシーンに追加」ボタンをクリックしてください。Godotはシーンに DirectionalLight3D ノードを追加してください。次に「環境をシーンに追加」をクリックすると、プレビュー用の空に対しても同様に処理が行われ、WorldEnvironment ノードが追加されます。
シーンをもう一度実行すると、箱が落下する様子を確認できるようになります。
カメラの回転操作
シーン内でカメラをゆっくりと回転させながら周回させることで、よりダイナミックな動きを演出します。ルートノードを選択し、Node3Dコンポーネントを追加してください。このコンポーネントは座標 (0, 0, 0) に配置され、「CameraHub」と命名してください。シーンツリーでカメラをドラッグし、この新しいノードの子オブジェクトとして設定します。これで、CameraHubが y 軸を中心に回転すると、それに連動してカメラも一緒に移動するように動作します。
ルートノードにスクリプトを追加し、以下の内容を追加してください。
extends Node3D
func _process(delta):
$CameraHub.rotate_y(0.6 * delta)
シーンを実行して結果を確認してください。
まとめ
このチュートリアルでは、外部ソースから3Dオブジェクトをインポートする方法と、それらを統合してシンプルなシーンを構築する方法を学びました。さらに、ライティングと移動カメラの設定についても詳しく確認しました。
次のパートでは、より複雑なシーンを構築する方法と、プレイヤーが操作するキャラクターを組み込む方法についてご紹介します。