0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Godot 4.0】スマホ3Dゲームを作るための勉強 その31 複数のMeshで壁を作ってつなぎが見えないようにテクスチャを貼る

Posted at

 ゲームエンジンGodot4.0で3Dスマホゲームを作りたいと思いますが、その前にお勉強しています。
 2023/3/1にstable版がリリースされました。
 Godot_v4.0-stable_win64.exe.zipを使用しています。

目的

 地面の両側に壁を作ります。またステージに壁からでっぱりも作ります。
 その際にテクスチャにつなぎ目が見えないように貼ります。

ベースプロジェクト

 下記で作成したプロジェクトをベースに機能追加をします。
 【Godot 4.0】スマホ3Dゲームを作るための勉強 その30 敵の砦を倒した時のアニメーション
 https://qiita.com/FootInGlow/items/9c13022f39eb7101eaac
 
 github(Godotのプロジェクトマネージャーからインポートして利用できます)
 https://github.com/footinglow/Godot4/tree/main/02_study/S30EnemyDefeatedAnimation
 ※別途ダウンロードが必要です。
   res://assets/texture/godot-material-dpa-1.0.1/Readme.txt及び
   res://assets/texture/AllSkyFree1.0/Readme.txtを参照

左側の壁を作る

 地面ステージアイテムの左右に壁を作ります。
 res://StageItems/ground.tscnを開きます。

 ルートノードのGroundを右クリックして、子ノードを追加からStaticBody3Dを追加します。
 「WallLeft」に名称変更します。
 WallLeftを右クリックして、子ノードを追加からMeshInstance3DとCollisionShape3Dを追加します。
スクリーンショット (451).png

 MeshInstance3D、CollisionShape3DとWallLeftをそれぞれ下記の表のように設定します。

MeshInstance3Dのインスペクタ

項目名 設定値
MeshInstance3D/Mesh 新規BoxMesh3D
MeshInstance3D/Mesh/Size/x 0.5m
MeshInstance3D/Mesh/Size/y 1.5m
MeshInstance3D/Mesh/Size/z 15m

CollisionShape3Dのインスペクタ

項目名 設定値
CollisionShape3D/Shape 新規BoxShape3D
CollisionShape3D/Shape/Size/x 0.5m
CollisionShape3D/Shape/Size/y 3m※
CollisionShape3D/Shape/Size/z 15m

 ※間違って乗り越えないような高さを設定します。

WallLeftのインスペクタ

項目名 設定値
Node3D/Transform/Position/x -2.75m
Node3D/Transform/Position/y 0.25m
Node3D/Transform/Position/z 0m

スクリーンショット (452).png

テクスチャを設定する

 テクスチャを設定します。

テクスチャをダウンロードする

 「3D TEXTURES」のCC0ライセンスのテクスチャを利用させていただいています。
 Googleで「3d textures wall stone 022」を検索します。
 下の方にスクロールして、「DOWNLOAD ALL THE MAPS」ボタンを押下するとGoogle Driveに飛んでダウンロードできます。
 「Wall_Stone_022_basecolor.jpg」というファイル名です。

Godotプロジェクトに配置する

 ファイルシステムのassets/textureを右クリックして「ファイルマネージャーで開く」を実行します。
 スクリーンショット (454).png
 Windowsエクスプローラが開くので「Wall_Stone_022_basecolor.jpg」を配置します。
スクリーンショット (455).png
 Godotのウィンドウに切り替えると自動でインポートされます。
スクリーンショット (456).png

壁にテクスチャを設定する

 res://StageItems/ground.tscnに戻って、WallLeft/MeshInstance3Dを選択します。
 インスペクタのMeshInstance3D/Meshの右のアイコンをクリックして詳細設定を開きます。
 Materialの右の<空>をクリックして新規StandardMaterial3Dを選択します。
 Materialの右の球をクリックしてMaterialの詳細設定を開き、下記の表のように設定します。

Materialの詳細設定

設定項目 設定値
Albedo/Texture res://assets/texture/Wall_Stone_022_basecolor.jpg
Metallic/Metallic 0.65
UV1/Scale/x 0.5
UV1/Scale/y 0.5
UV1/Scale/z 0.5
UV1/Triplanar オン
UV1/World Triplanar オン※

 ※複数のMeshを組み合わせたときにテクスチャの継ぎ目を見えなくする効果があります

スクリーンショット (457).png

 テクスチャを保存します。
 Materialの右の球の右の「v」をクリックして「保存」を実行します。
スクリーンショット (458).png

 「Design」フォルダを選択して、「Wall.tres」という名称で保存します。
スクリーンショット (459).png

右側の壁を作る

 左側の壁をコピーして右側の壁を作ります。
 
 WallLeftをコピーしてルートノードのGroundを右クリックして、貼り付けます。
 名称を「WallRight」に変更します。

 WallRightを選択して、インスペクタのNode3D/Transform/Positionのxを2.75に変更します。

スクリーンショット (460).png

ステージ1に壁の障害物を追加する

 ステージ1に壁の障害物を追加します。
 障害物を三角柱にします。MeshInstance3DにはPrismMesh3Dを使用して三角柱を作成できますが、CollisionShape3Dには三角柱がないので、CollisionPolygon3Dを使用します。

 res://Stages/stage001.tscnを開きます。
 ルートノードのStageを右クリックして、子ノードを追加からStaticBody3Dを追加します。
 名称を「WallLeftMiddle」に変更します。
 WallLeftMiddleを右クリックして子ノードを追加からMeshInstance3DとCollisionPolygon3Dを追加します。
スクリーンショット (477).png

 MeshInstance3Dを下記の表のように設定します。

MeshInstance3Dのインスペクタ

項目名 設定値
MeshInstance3D/Mesh 新規PrismMesh3D
MeshInstance3D/Mesh/Size/x 2m
MeshInstance3D/Mesh/Size/y 1.5m
MeshInstance3D/Mesh/Size/z 1.5m
MeshInstance3D/Mesh/Material res://Design/Wall.tres

 MeshInstance3Dの形を見ながらCollisionPolygon3Dを設定したいので、いったんWallLeftMiddleを横の方に移動します。

WallLeftMiddleのインスペクタ

項目名 設定値
Node3D/Transform/Position/x 10m
Node3D/Transform/Position/y 0m
Node3D/Transform/Position/z 0m

 シーンのWallLeftMiddleを選択した状態で、下図の赤枠(ビューの左上のあたり)をクリックして、「選択対象にフォーカス」を実行します。
スクリーンショット (478).png
スクリーンショット (466).png
同じところをクリックして「後面図」を実行します。
スクリーンショット (467).png

 次に、CollisionPolygon3Dを選択して、インスペクタのCollisionPolygon3D/Polygonの右の「PackedVector2Array(サイズ0)をクリックして詳細設定を開きます。
スクリーンショット (468).png

 サイズの右の上矢印をクリックして3にします。
 下図のようにx,yを3組入力します。
 またDepthを1.5mにします。
スクリーンショット (471).png

 確認します。MeshInstance3Dを表示した場合。
スクリーンショット (473).png
 MeshInstance3Dを非表示にした場合。大丈夫そうです。
スクリーンショット (474).png

 WallLeftMiddleを正しい位置に配置します。
 WallLeftMiddleのインスペクタ

項目名 設定値
Node3D/Transform/Position/x -2m
Node3D/Transform/Position/y -0.25m
Node3D/Transform/Position/z -5m
Node3D/Transform/Rotation/x -90°
Node3D/Transform/Rotation/y -90°
Node3D/Transform/Rotation/z -0°

スクリーンショット (479).png

実行

 実行して継ぎ目を確認します。
 UV1/World Triplanarをオンにしたので継ぎ目がなくなりました。

スクリーンショット (480).png
スクリーンショット (480).png

 以上。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?