Godotのリストに戻る

【Godot】Terrains機能でRPGツクール風のオートタイル作成

作成: 2025-06-20更新: 2025-06-20マップブログ記事を読む

概要

GodotのTerrains機能は、タイルの境界を自動判定して適切なタイルを配置する「オートタイル」システムです。RPGツクールのようなスムーズなマップ作成が可能になります。

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

Terrains機能の設定画面

Terrainsの設定手順

1. TileSetリソースの準備

  1. TileMapノードを作成
  2. TileSetリソースを新規作成またはロード
  3. タイルシートをTileSetに追加

2. Terrain(地形タイプ)の定義

TileSetエディタで「Terrains」タブを開き:

  1. 新しいTerrainを追加(草、土、水など)
  2. 各Terrainに色を設定(視覚的な識別用)

3. タイルのペイント

各タイルの辺や角がどのTerrainに接続するかをペイント:

□ = タイル
● = Terrain接続点

草地の中央タイル:
●───●
│草草│
│草草│  
●───●
全ての辺が「草」

草と土の境界タイル:
●───●
│草草│
│土土│
●───●
上辺が「草」、下辺が「土」

実践的な設定例

基本的な地形セット

Terrain 0: Grass(草)
Terrain 1: Dirt(土)
Terrain 2: Water(水)
Terrain 3: Stone(石)

タイルの分類

  • 中央タイル: 全ての辺が同じTerrain
  • 境界タイル: 異なるTerrainが接する
  • 角タイル: 3方向以上の接続パターン

TileMapでの使用方法

ブラシツールの選択

  1. TileMapエディタで「Terrains」描画モードを選択
  2. 使用したいTerrainを選択
  3. マップ上でペイント → 自動的に適切なタイルが配置
Terrainsを使ったペイント

便利な機能

ランダムタイル

# 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種)

効率的な作成フロー

  1. 基本パターンを作成
  2. Terrainsでペイント設定
  3. テストマップで確認
  4. 不足パターンを追加

トラブルシューティング

境界がうまく繋がらない

  • ペイント設定を再確認
  • 全ての必要パターンが存在するか確認
  • 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 TerrainsUnity Rule Tile
設定の容易さ◎ ビジュアル○ ルールベース
柔軟性
標準機能◎ 内蔵△ パッケージ
学習曲線緩やかやや急

ベストプラクティス

  1. 命名規則: Terrainに分かりやすい名前を付ける
  2. 色分け: 各Terrainに識別しやすい色を設定
  3. レイヤー活用: 背景と前景でTerrain設定を分ける
  4. テンプレート化: よく使うパターンは保存して再利用

実装して学んだこと

Terrains機能を使い始めて、マップ作成の速度が格段に上がりました。特に感動したのは、後から地形を修正する時の楽さです。手動で境界タイルを配置していた時は、少し修正するだけで大量のタイルを更新する必要がありましたが、Terrainsでは塗り直すだけで完了します。

タイルのペイント設定は最初は面倒に感じましたが、一度設定してしまえばその後の作業が非常に楽になるので、投資価値は十分にあります。また、ランダムタイル機能を使うことで、同じ草地でも自然なバリエーションが出せるのも素晴らしい点です。