⚒️

Godot 4 と Blenderでコリジョンを扱う

2024/09/23に公開

3Dモデリングに blender を使うケースが多いと思いますが、Godot と Blender の相性は良く Godot からそのまま .blend ファイルをインポートして MeshInstance を作ったり、GridMap で使うメッシュライブラリを作ることができます。
それらのやり方は結構情報があるため、今回は blender と Collision に関する Tips をご紹介します。

※そもそもの blender と Godot の連携についてはこちらが分かりやすかったです。
Godot4でBlenderファイルからMeshLibraryを作成して、GridMapを使ってみた

Collision 付きでエクスポート

blender で作ったメッシュを Godot で読み込む際に、Collision のエクスポートは皆さんどのようにされていますか?
描画用のオブジェクトと衝突用のオブジェクトを Godot に読み込ませていちいち紐づけする作業すると、オブジェクトに変更があった場合に再度紐づけが必要になってしまいます。そこで blender 側でちょっとした工夫をすることで、インポート時に自動的に紐づけすることができます。

まず描画用のオブジェクトに、Collision にしたいメッシュをの子要素として配置します。
次の例では、描画用の球のオブジェクト GraphicSphere と衝突用の立方体のオブジェクト CollisionCube を想定します。

描画用のオブジェクトを親要素として、子要素に衝突用オブジェクトになるよう親子関係を構築します。blender ではオブジェクトをドラッグ&ドロップ + Shift キーを用いて行うことができます。

更に衝突用オブジェクトの接尾辞に _colonly を付けます。これで blender での作業は終了です。
あとは Godot に .blend ファイルを読み込ませるだけで、オブジェクトに Collision が付いた状態になります。

_colonly の接尾辞についてももう少し詳しく説明しましょう。Collision にしたいオブジェクトに _colonly を付けることで、StaticBody3D と ConcavePolygonShape3D による CollisionShape3D を作成してくれます。そして何もつけなかったオブジェクトはそのまま MeshInstance になり親子関係も保持してくれているわけです。

他にも接尾辞に関係する機能はいくつかあります。興味がある方は公式のドキュメントを見てみましょう!(公式では接尾辞の開始に - ハイフンを利用していますが、_ アンダースコアでも可能でした。)

Discussion