動画でもやりましたが、GodotEngineを使った3Dゲームの作り方メモです
今回はGodotEngineで3Dキャラを追加して
ワールドに配置・動かすところまでをやっていきましょう
3Dモデルはいろんな素材がありますが
用意するのも大変なのでBlockbenchで簡単に作った
ロジラボ君を使って解説します

動画ではSophiaちゃんというかわいいモデルを使ってます
https://youtu.be/r6raVUBwlDc?feature=shared
プロジェクトを保存するフォルダを作っておきます。

フォルダを作ったときに フォルダのパスをコピーしておきましょう。
つぎにGodotEngineを起動します。
Godotはインストール不要でいきなり使うことができるので
ダウンロードして解凍したフォルダにある
「Godot_v4.1.1-stable_win64.exe」みたいなファイルを起動しましょう。
「新規プロジェクト」をクリックします

プロジェクト名や保存先をえらびます。
ここでさっきコピーしておいたパスを貼り付けると
プロジェクト名も勝手につけてくれます。

プロジェクト名は好きに変更してOK
「作成して編集」をクリックします。
「その他のノード」をクリックします。

ノードを選択して追加するウィンドウが開きます。
一番上の「Node」をクリックします。

Unityでいうところの、「空のオブジェクト」ってカンジで
いろんなノードをまとめるためにつかいます。
ここでは「Main」という名前にしました。
左上の「+」をクリックするか
Mainノードを選択した状態で「Ctrl+A」を押すと
子ノードが追加できます。

ノードはたくさんあるので
ジャンル別に探すか、検索を使います。
検索窓に「static」と入力し、「StaticBody3D」をえらびます。

StaticBody3Dはその名の通り、Static(静的)なモノ
動かない物を作る時に使います。
つぎに地面の見た目を作りましょう。
StaticBody3Dを選択した状態で「+」アイコンをクリックします。

検索窓に「mesh」と入力し「MeshInstance3D」を選択します

メッシュは3Dの見た目のことですね
追加しても何も出てきません。メッシュの形を設定しましょう。
「MeshInstance3D」をえらび
右側のインスペクターから「Mesh<空>」をクリックします。
リストの中から「新規BoxMesh」をえらびましょう。

ステージにキューブがでてきました!
キューブの大きさを変えたいので、Mesh欄にある箱をクリックしましょう。

Meshをクリックすると設定が開きます。
Sizeを「x50:y1:z50」にしました。(値は自由に変更してOK)

なにかテクスチャをはっておきましょう。
今回はこれをつかいました→
プロジェクトを保存してあるフォルダに
「texture」フォルダを作り、草のテクスチャを入れておきます。

Meshの詳細にある
「Material<空>」をクリックし
新規StandardMaterial3Dをえらびます。

これでメッシュにマテリアルがつきました。
もういちどMaterialのまるいところをクリックします。

Materialの設定を開いたら
「Albedo」の項目を開き、Textureに
さっき保存しておいた画像をドラッグします。

このままだと全体が緑色で、テクスチャがよくわからないので
Materialの下の方にある「UV1」の項目を開き
「Triplanar」をオンにします。
「Scale」の値を変更すると、テクスチャの細かさが変えられます。

キャラが地面をつきぬけて落ちてしまうので
コライダー(当たり判定用のわく)をつけましょう
「StaticBody3D」を選択し「+」をクリックします。

検索窓に「collision」と入力し「CollisionShape3D」をえらびましょう。

CollisionShape3Dは当たり判定の大きさをきめるためのノードです。
CollisionShape3Dをえらんで、「Shape<空>」をクリックし
新規BoxShape3Dをクリックします。

当たり判定は地面と同じ大きさにしましょう。
ここではSize「x50,y1,z50」にしました

※Collisionのサイズを変えるときは「Shape」のサイズを変えましょう。
Transformでサイズを変えるとうまくいかないことがあるらしいです。
StaticBody3Dだと分かりづらいので、F2キーで分かりやすい名前にしておきます。
さいごに「Ctrl+S」で保存しておきましょう。

今作ったシーンを保存します。名前はなんでもOKです。

3Dモデルはなんでもいいですが
今回はキューブを組み合わせてキャラを作れる
Blockbenchを使いました。
頭・胴・手・足の6つのキューブで完成!
File → Export → Export glTF Model をえらんでエクスポートします。

エクスポートのオプションはこんな感じにしました。
「ExportAnimations」にチェックを入れておけば
Blockbenchでつけたアニメーションも一緒にGodotEngineにもっていけます
ExportGroups…のチェックは外したままのほうがいいかもです
(外しておいたほうがあとでGodot側でアニメーションの編集ができる)

できたファイルは、プロジェクトフォルダに保存しましょう。
今回は「model」フォルダを作り、その中に保存しました。

フォルダにいれると自動でインポートしてくれます
いきなりメインシーンにgltfファイルをドラッグすれば配置できますが
キャラを動かしたりアニメーションさせたりしたいので
プレイヤー用のシーンを作りましょう。
ロジラボ君.gltfファイルを右クリックして
「新しい継承シーン」をえらびましょう。

logiclab-kunだと長いので「Player」という名前にしました。
「Ctrl+S」でシーンを保存します

ちなみにBlockbenchでモデルを作る時
当たり判定がほしい部分パーツの
名前の後ろに「-col」をつけておくと、インポートするときに
自動でCollisionShape3Dをつけてくれます。
(キャラクターにはいらないかもですが)

ファイルの中から「player.tscn」を選び、ステージにドラッグしましょう。

これでプレイヤーをメインシーンに追加することができました。
ドラッグする以外にも
「シーン」タブの「+」アイコンの横にある「🔗」みたいなアイコンを
クリックすることでもシーンを追加することができます。
再生ボタンを押して実行してみましょう。
現在のシーンをメインシーン(はじめに再生したいシーン)にしておきます。

再生すると、灰色の画面になってしまいました。
2Dゲームと違って、3Dの場合はカメラが必要です。
ゲームを終了して、カメラを追加しましょう。
Mainノードを選択し「+」ボタンをクリックします。
cameraと検索し、「Camera3D」を選びます。

メインシーンにカメラが追加されました。
Camera3Dを選択すると、カメラを移動するためのギズモが出るので
矢印やわっかを動かして、カメラの位置を調節します。
また、インスペクターからTransformの値を直接変更してもOKです

カメラを選択している間は、「プレビュー」アイコンが表示されます。
プレビューにチェックを入れると、カメラからみた映像をチェックできます。

これは明かりがないからです。 3Dゲームを作るときには、
カメラの他にライティングも必要になります。

再生しているゲームを閉じて、
シーンビューの上にある「…」のアイコンをクリックしましょう
太陽の方向や色・空の色・地面の色などが設定できるウィンドウがひらきます。

ここから「太陽をシーンに追加」と「環境をシーンに追加」
のボタンをクリックしましょう。
シーンに現在の設定の太陽と環境が追加されました。

いちおうここまでで
Blockbenchからキャラクターを持ってくるのと
メインシーンを作って、キャラクターを配置する
ところまでができましたね

次回はこのキャラクターを歩かせたり
キャラクターにカメラがついてくるようにプログラムしていきましょう
今回はGodotEngineで3Dキャラを追加して
ワールドに配置・動かすところまでをやっていきましょう
3Dモデルはいろんな素材がありますが
用意するのも大変なのでBlockbenchで簡単に作った
ロジラボ君を使って解説します

動画ではSophiaちゃんというかわいいモデルを使ってます
https://youtu.be/r6raVUBwlDc?feature=shared
プロジェクトを作ろう
プロジェクトを作る前にプロジェクトを保存するフォルダを作っておきます。

フォルダを作ったときに フォルダのパスをコピーしておきましょう。
つぎにGodotEngineを起動します。
Godotはインストール不要でいきなり使うことができるので
ダウンロードして解凍したフォルダにある
「Godot_v4.1.1-stable_win64.exe」みたいなファイルを起動しましょう。
「新規プロジェクト」をクリックします

プロジェクト名や保存先をえらびます。
ここでさっきコピーしておいたパスを貼り付けると
プロジェクト名も勝手につけてくれます。

プロジェクト名は好きに変更してOK
「作成して編集」をクリックします。
メインシーンを作ろう
まずは地面などを作って、キャラを置けるようにしましょう。「その他のノード」をクリックします。

ノードを選択して追加するウィンドウが開きます。
一番上の「Node」をクリックします。

Unityでいうところの、「空のオブジェクト」ってカンジで
いろんなノードをまとめるためにつかいます。
地面を追加しよう
追加した「Node」はF2キーで名前の変更ができます。ここでは「Main」という名前にしました。
左上の「+」をクリックするか
Mainノードを選択した状態で「Ctrl+A」を押すと
子ノードが追加できます。

ノードはたくさんあるので
ジャンル別に探すか、検索を使います。
検索窓に「static」と入力し、「StaticBody3D」をえらびます。

StaticBody3Dはその名の通り、Static(静的)なモノ
動かない物を作る時に使います。
つぎに地面の見た目を作りましょう。
StaticBody3Dを選択した状態で「+」アイコンをクリックします。

検索窓に「mesh」と入力し「MeshInstance3D」を選択します

メッシュは3Dの見た目のことですね
追加しても何も出てきません。メッシュの形を設定しましょう。
「MeshInstance3D」をえらび
右側のインスペクターから「Mesh<空>」をクリックします。
リストの中から「新規BoxMesh」をえらびましょう。

ステージにキューブがでてきました!
キューブの大きさを変えたいので、Mesh欄にある箱をクリックしましょう。

Meshをクリックすると設定が開きます。
Sizeを「x50:y1:z50」にしました。(値は自由に変更してOK)

地面にテクスチャをはろう
地面が単色だと、キャラの動きが分かりづらいのでなにかテクスチャをはっておきましょう。
今回はこれをつかいました→

プロジェクトを保存してあるフォルダに
「texture」フォルダを作り、草のテクスチャを入れておきます。

Meshの詳細にある
「Material<空>」をクリックし
新規StandardMaterial3Dをえらびます。

これでメッシュにマテリアルがつきました。
もういちどMaterialのまるいところをクリックします。

Materialの設定を開いたら
「Albedo」の項目を開き、Textureに
さっき保存しておいた画像をドラッグします。

このままだと全体が緑色で、テクスチャがよくわからないので
Materialの下の方にある「UV1」の項目を開き
「Triplanar」をオンにします。
「Scale」の値を変更すると、テクスチャの細かさが変えられます。

地面にコライダーをつけよう
このままだと、キャラクターをおいた時にキャラが地面をつきぬけて落ちてしまうので
コライダー(当たり判定用のわく)をつけましょう
「StaticBody3D」を選択し「+」をクリックします。

検索窓に「collision」と入力し「CollisionShape3D」をえらびましょう。

CollisionShape3Dは当たり判定の大きさをきめるためのノードです。
CollisionShape3Dをえらんで、「Shape<空>」をクリックし
新規BoxShape3Dをクリックします。

当たり判定は地面と同じ大きさにしましょう。
ここではSize「x50,y1,z50」にしました

※Collisionのサイズを変えるときは「Shape」のサイズを変えましょう。
Transformでサイズを変えるとうまくいかないことがあるらしいです。
StaticBody3Dだと分かりづらいので、F2キーで分かりやすい名前にしておきます。
さいごに「Ctrl+S」で保存しておきましょう。

今作ったシーンを保存します。名前はなんでもOKです。

Blockbenchからもってくる
次にキャラクターを用意しましょう。3Dモデルはなんでもいいですが
今回はキューブを組み合わせてキャラを作れる
Blockbenchを使いました。
頭・胴・手・足の6つのキューブで完成!
File → Export → Export glTF Model をえらんでエクスポートします。

エクスポートのオプションはこんな感じにしました。
「ExportAnimations」にチェックを入れておけば
Blockbenchでつけたアニメーションも一緒にGodotEngineにもっていけます
ExportGroups…のチェックは外したままのほうがいいかもです
(外しておいたほうがあとでGodot側でアニメーションの編集ができる)

できたファイルは、プロジェクトフォルダに保存しましょう。
今回は「model」フォルダを作り、その中に保存しました。

フォルダにいれると自動でインポートしてくれます
キャラを動かせるようにしよう
木や家など動かないものなら、継承シーンを作らずにいきなりメインシーンにgltfファイルをドラッグすれば配置できますが
キャラを動かしたりアニメーションさせたりしたいので
プレイヤー用のシーンを作りましょう。
ロジラボ君.gltfファイルを右クリックして
「新しい継承シーン」をえらびましょう。

logiclab-kunだと長いので「Player」という名前にしました。
「Ctrl+S」でシーンを保存します

ちなみにBlockbenchでモデルを作る時
当たり判定がほしい部分パーツの
名前の後ろに「-col」をつけておくと、インポートするときに
自動でCollisionShape3Dをつけてくれます。
(キャラクターにはいらないかもですが)

メインシーンにプレイヤーを配置しよう
タブから「main」をクリックしてメインシーンに戻ります。ファイルの中から「player.tscn」を選び、ステージにドラッグしましょう。

これでプレイヤーをメインシーンに追加することができました。
ドラッグする以外にも
「シーン」タブの「+」アイコンの横にある「🔗」みたいなアイコンを
クリックすることでもシーンを追加することができます。
再生ボタンを押して実行してみましょう。
現在のシーンをメインシーン(はじめに再生したいシーン)にしておきます。

再生すると、灰色の画面になってしまいました。
2Dゲームと違って、3Dの場合はカメラが必要です。
ゲームを終了して、カメラを追加しましょう。
Mainノードを選択し「+」ボタンをクリックします。
cameraと検索し、「Camera3D」を選びます。

メインシーンにカメラが追加されました。
Camera3Dを選択すると、カメラを移動するためのギズモが出るので
矢印やわっかを動かして、カメラの位置を調節します。
また、インスペクターからTransformの値を直接変更してもOKです

カメラを選択している間は、「プレビュー」アイコンが表示されます。
プレビューにチェックを入れると、カメラからみた映像をチェックできます。

ライティングを設定しよう
再生してみると、画面がまっくらになっています。これは明かりがないからです。 3Dゲームを作るときには、
カメラの他にライティングも必要になります。

再生しているゲームを閉じて、
シーンビューの上にある「…」のアイコンをクリックしましょう
太陽の方向や色・空の色・地面の色などが設定できるウィンドウがひらきます。

ここから「太陽をシーンに追加」と「環境をシーンに追加」
のボタンをクリックしましょう。
シーンに現在の設定の太陽と環境が追加されました。

いちおうここまでで
Blockbenchからキャラクターを持ってくるのと
メインシーンを作って、キャラクターを配置する
ところまでができましたね

次回はこのキャラクターを歩かせたり
キャラクターにカメラがついてくるようにプログラムしていきましょう
コメント