概要
GodotのTerrains機能は、タイルの境界を自動判定して適切なタイルを配置する「オートタイル」システムです。RPGツクールのようなス ムーズなマップ作成が可能になります。
マップ作成の効率が劇的に向上した機能です。以前は境界タイルを一つずつ手動で配置していましたが、Terrainsを使えば「草地を塗る」だけで自動的に適切な境界タイルが配置されます。RPGツクールでマップを作った経験がある方なら、その便利さがすぐに理解できるでしょう。

Terrainsの設定手順
1. TileSetリソースの準備
- TileMapノードを作成
- TileSetリソースを新規作成またはロード
- タイルシートをTileSetに追加
2. Terrain(地形タイプ)の定義
TileSetエディタで「Terrains」タブを開き:
- 新しいTerrainを追加(草、土、水など)
- 各Terrainに色を設定(視覚的な識別用)
3. タイルのペイント
各タイルの辺や角がどのTerrainに接続するかをペイント:
□ = タイル
● = Terrain接続点
草地の中央タイル:
●───●
│草草│
│草草│
●───●
全ての辺が「草」
草と土の境界タイル:
●───●
│草草│
│土土│
●───●
上辺が「草」、下辺が「土」
実践的な設定例
基本的な地形セット
Terrain 0: Grass(草)
Terrain 1: Dirt(土)
Terrain 2: Water(水)
Terrain 3: Stone(石)
タイルの分類
- 中央タイル: 全ての辺が同じTerrain
- 境界タイル: 異なるTerrainが接する
- 角タイル: 3方向以上の接続パターン
TileMapでの使用方法
ブラシツールの選択
- TileMapエディタで「Terrains」描画モードを選択
- 使用したいTerrainを選択
- マップ上でペイント → 自動的に適切なタイルが配置

便利な機能
ランダムタイル
# TileSetでの設定
# 同じTerrainパターンを持つ複数タイルを登録
# → ダイスアイコンでランダム配置が有効に
確率制御
- 各タイルに「Probability」を設定
- 高い値 = より頻繁に選択される
- 地形のバリエーション表現に活用
Physics一括設定
- 「F」キーで全タイルに衝突判定を一括適用
- 壁や障害物の設定が効率的に
高度な活用例
複雑な地形の表現
# 崖の表現(高さの概念)
Terrain 0: 低地
Terrain 1: 高地
Terrain 2: 崖(遷移用)
# 水辺の表現
Terrain 0: 陸地
Terrain 1: 浅瀬
Terrain 2: 深い水
スクリプトからの制御
extends TileMap
# Terrainを使用したタイル配置
func place_terrain_tile(coords: Vector2i, terrain_id: int):
# Terrain接続を考慮した配置
set_cells_terrain_connect(
0, # レイヤー
[coords], # 座標配列
0, # Terrainセット
terrain_id # Terrain ID
)
# エリア全体をTerrainで塗りつぶし
func fill_area_with_terrain(start: Vector2i, end: Vector2i, terrain_id: int):
var cells = []
for x in range(start.x, end.x + 1):
for y in range(start.y, end.y + 1):
cells.append(Vector2i(x, y))
set_cells_terrain_connect(0, cells, 0, terrain_id)
タイルセット作成のコツ
必要なタイルパターン
基本的な2地形の接続には最低16パターンが必要:
- 中央(1種)
- 直線境界(4種)
- 外角(4種)
- 内角(4種)
- 特殊パターン(3種)
効率的な作成フロー
- 基本パターンを作成
- Terrainsでペイント設定
- テストマップで確認
- 不足パターンを追加
トラブルシューティング
境界がうまく繋がらない
- ペイント設定を再確認
- 全ての必要パターンが存在するか確認
- Terrain IDが正しいか確認
パフォーマンスの問題
# 大量のタイル更新は一括で
func update_large_area():
# 悪い例:個別に更新
for coord in coordinates:
set_cell(0, coord, ...)
# 良い例:一括更新
set_cells_terrain_connect(0, coordinates, 0, terrain_id)
Unityとの比較
機能 | Godot Terrains | Unity Rule Tile |
---|---|---|
設定の容易さ | ◎ ビジュアル | ○ ルールベース |
柔軟性 | ○ | ◎ |
標準機能 | ◎ 内蔵 | △ パッケージ |
学習曲線 | 緩やか | やや急 |
ベストプラクティス
- 命名規則: Terrainに分かりやすい名前を付ける
- 色分け: 各Terrainに識別しやすい色を設定
- レイヤー活用: 背景と前景でTerrain設定を分ける
- テンプレート化: よく使うパターンは保存して再利用
実装して学んだこと
Terrains機能を使い始めて、マップ作成の速度が格段に上がりました。特に感動したのは、後から地形を修正する時の楽さです。手動で境界タイルを配置していた時は、少し修正するだけで大量のタイルを更新する必要がありましたが、Terrainsでは塗り直すだけで完了します。
タイルのペイント設定は最初は面倒に感じましたが、一度設定してしまえばその後の作業が非常に楽になるので、投資価値は十分にあります。また、ランダムタイル機能を使うことで、同じ草地でも自然なバリエーションが出せるのも素晴らしい点です。