この記事は、GodotのTileMapLayerのガイド https://ziva.sh/blogs/godot-tilemap のうち、コリジョンの節の日本語版です(英語の原文はZiva.shが2026年11月10日に更新)。以下で使うサンプルプロジェクトは、このガイドからダウンロードできます。
TileMapLayerにコリジョンを追加する
TileMapLayerは、TileSetに物理レイヤーがあり、固いタイルにコリジョンポリゴンがあるまではコリジョンを持ちません。公式のTileSetチュートリアルにある手順は次のとおりです。
- TileMapLayerを選択し、インスペクターでTileSetプロパティをクリックして、Physics Layers(物理レイヤー)を展開し、Add Elementを選びます。
- 画面下部のTileSetエディターを開き、固いタイルを選択して、そのPhysics Layer 0セクションを開きます。Fキーを押すとタイル全体を覆う矩形になります。ポリゴンを描いてもかまいません。
- 固いタイルすべてに同じ操作をします。ポリゴンのないタイルは通り抜けられるままになり、水や装飾にはそのほうが適しています。
- レイヤーのインスペクターでCollision Enabledをオンのままにし、プレイヤーのコリジョンマスクに物理レイヤーのコリジョンレイヤーが含まれていることを確認します(どちらも既定ではレイヤー1です)。
ChatGPTや古いチュートリアルは、非推奨のTileMapノードについて説明していることがよくあります。コリジョンを追加しようとしていたフォーラムのユーザーは、「Even ChatGPT cant help me, because he only knows the old TileMap」(ChatGPTでさえ役に立たない。古いTileMapしか知らないから)とはっきり書いています(Godot Forum)。
検証:このサンプルにAIがコリジョンを追加する
Godotエディターの中で動くAIエージェントのZivaに、元のガイドでダウンロードできるサンプルを渡し、次のように依頼しました。Groundレイヤーにコリジョンを追加してプレイヤーが草と石のタイルの上に立てるようにし、水のタイルは固くしないこと。重力と矢印キーでの移動があるCharacterBody2Dのプレイヤーを追加し、すり抜けて落ちずに着地することを確認すること。
実行時のツールのログから、Zivaがしたことを挙げます。
- TileMapLayer用のツールでTileSetを読みました。アトラスのソースが1つあり、タイルは4つで、物理レイヤーはありませんでした。また、
demo.gdが実行時にセルを描くため、保存されたレイヤーにはタイルがないことを見つけました。 - タイルの画像を読んで草、石、水、金を見分け、コリジョンシェイプを有効にしてTileSetのアトラス用ツールを呼び出しました。ツールは物理レイヤーを追加しましたが、タイルがすでに存在していたためシェイプの追加は飛ばし、それでも成功と報告しました。Zivaはシーンファイルを読んでこれに気づき、草と石のタイルだけに16 x 16のコリジョンポリゴンを追加しました。このツールの動作は、バグとして報告済みです。
-
player.gdを書き、Playerノードを追加しました。GodotのGDScriptチェッカーは問題を報告しませんでした。 - 物理のバリデーターを実行し(プレイヤーのマスクはタイルのレイヤーと一致)、続いてシーンを実行しました。プレイヤーが金のマーカーの下のタイルに着地したので、Zivaはスポーン位置を普通の草の上に移し、結果をコードで確認しました。プレイヤーは草の上で止まっていて、草と石にはポリゴンが1つずつ、水と金にはポリゴンがありませんでした。
かかったのは2分、ツールの呼び出しは23回で、既定のモデルZiva SmartでのZivaの使用量は$0.03でした。結果に対して別に実行した独自のチェックスクリプトでも、同じ結果になりました。プレイヤーは草の列の上で止まり、草と石は固く、水と金にはコリジョンがありませんでした。このマップでは水が草の列より下にあるので、この実行でわかるのは水にコリジョンシェイプがないことで、プレイヤーが水に落ちることまでは確かめていません。
ZivaはZiva.shが開発しており、このテストもZiva.shが作成しました。
テストは2026年11月10日に、Linux上のGodot 4.7.2とZivaの開発ビルドで実行しました。1つのプロジェクトで1回だけ実行した結果なので、ベンチマークではなく1つの例として見てください。
プロシージャルなマップでは、同じエージェントがset_cell(coords, source_id, atlas_coords)のループを書けます。どのセルもGDScriptから操作できます。ここまでやってもプレイヤーがすり抜けて落ちる場合は、コリジョンのチェックリスト(英語)を参照してください。
TileSetに使うアートについてはピクセルアートのガイド(英語)またはGodotの中でAIを使ってタイルを生成する方法(英語)を参照してください。
よくある質問
Godot 4でTileMapLayerにコリジョンを追加するには?
TileMapLayerを選択し、インスペクターでTileSetを編集して、Physics Layersを展開し、Add Elementを選びます。次にTileSetエディターを開き、固いタイルを1つずつ選択してコリジョンポリゴンを描きます(Fキーでタイル全体を覆う矩形になります)。レイヤーのコリジョンは有効のままにし、プレイヤーのコリジョンマスクに物理レイヤーのコリジョンレイヤーが含まれていることを確認してください。
AIでGodotのTileMapLayerにコリジョンを追加できますか?
Godotエディターの中で動くAIエージェントのZivaを、元のガイドのサンプルプロジェクトでテストしました。草と石のタイルを固くしてプレイヤーを追加するよう依頼すると、Zivaは物理レイヤーを追加し、その2つのタイルだけにタイル全体を覆うコリジョンポリゴンを追加しました。さらにプレイヤーのスクリプトを書き、物理のバリデーターでレイヤーを確認して、シーンを実行しました。プレイヤーは草の上に着地しました。かかったのは2分で、既定のモデルでのZivaの使用量は$0.03でした。TileSet用のツールの1つがコリジョンシェイプを黙って飛ばしましたが、Zivaはシーンファイルを読んでそれに気づきました。
この記事の原文(英語):https://ziva.sh/blogs/godot-tilemap
