mcpField
U
unity-terrain

unity-terrain

github.com/besty0728クリエイティブ・メディア1.9k88 回インストール今日更新
リポジトリ

unity-terrain について

unity-terrainは、Unity Terrainの作成と編集を行うスキルモジュールです。高さ調整、Perlinノイズによる地形生成、平滑化、平坦化、テクスチャレイヤーのペイントに対応し、ワークフローの取り消しとやり直しも利用できます。

主な機能

  1. 01TerrainData付きTerrainの作成
  2. 02Perlinノイズによる高さマップ生成
  3. 03丘の追加と高さ編集
  4. 04地形領域の平滑化・平坦化
  5. 05設定済みテクスチャレイヤーのペイント
  6. 06ワークフローの取り消しとやり直し

活用シーン

  1. 01Unityシーン用の地形作成
  2. 02自然な高低差の生成
  3. 03平坦な場所の用意や斜面の平滑化
  4. 04地形テクスチャレイヤーのペイント

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/besty0728/unity-skills --skill unity-terrain

インストール後、Claude Code で/unity-terrainを入力して読み込まれたか確認します。

詳細

このモジュールのスキルを呼び出す前に: 名前や説明から推測したパラメーターを使ってスキルを呼び出そうとしている場合は、いったん停止し、先にこのファイルを読む(または GET /skills/recommend?includeSchema=true でスキーマを取得する)必要があります。recommend/schema からすでにパラメーター定義を取得している場合は、そのまま dryRun に進めます。

トリガー

  • 地形の作成または編集
  • ハイトマップのスカルプトまたはスムージング
  • 地形テクスチャレイヤーのペイント

Unity Terrain スキル

ガードレール

動作モード(v1.9 の 3 段階):

  • Approval(デフォルト):クエリスキル(terrain_get_info、terrain_get_height)は直接実行します。作成/変更スキル(terrain_create、terrain_set_height、terrain_set_heights_batch、terrain_add_hill、terrain_generate_perlin、terrain_smooth、terrain_flatten、terrain_paint_texture)は FullAuto です。MODE_RESTRICTED の場合は許可プロトコルを実行します。/permission/grant はサーバー側でスキルを実行し、結果を返します。
  • Auto/Bypass:SemiAuto と FullAuto は直接実行します。
  • このモジュールには、Delete/PlayMode/Reload/RiskLevel="high" のスキルはありません。自動的に禁止と判定されるものはありません。地形を削除するには、asset_delete でアセットを削除します(独自の禁止ルールが適用されます)。

注:すべてのスカルプト/ペイント操作には、シーン内に既存の Terrain が必要です。または、terrain_create を使って作成してください。

禁止事項(よくある誤り):

  • terrain_set_texture は存在しません → レイヤーインデックスとブラシパラメーターを指定して terrain_paint_texture を使います
  • terrain_add_tree/terrain_add_grass は存在しません → これらには Unity Terrain ツールまたはカスタムスクリプトが必要です
  • terrain_set_size は存在しません → 地形の寸法は terrain_create による作成時に設定します
  • terrain_import_heightmap/terrain_set_heights は存在しません → 2D 高さ配列([z][x] の値は 0~1)を指定して terrain_set_heights_batch を使います

ルーティング:

  • 地形のマテリアルには、Terrain のマテリアルに対して material モジュールを使います
  • 地形上のオブジェクトには、gameobject モジュールを使ってオブジェクトを作成/配置します

スキルの概要

スキル説明
terrain_createTerrainData を含む新しい Terrain を作成
terrain_get_info地形のサイズ、解像度、レイヤーを取得
terrain_get_heightワールド座標での位置の高さを取得
terrain_set_height正規化座標で高さを設定
terrain_set_heights_batch領域内の高さを一括設定
terrain_add_hill⭐ 半径と減衰を指定して滑らかな丘を追加
terrain_generate_perlin⭐ Perlin ノイズを使って自然な地形を生成
terrain_smooth⭐ 地形をスムージングして鋭いエッジを軽減
terrain_flatten⭐ 地形を目標の高さに平坦化
terrain_paint_texture位置を指定してテクスチャレイヤーをペイント

スキル

terrain_create

TerrainData アセットを含む新しい Terrain GameObject を作成します。

パラメーター型必須デフォルト説明
namestringいいえ"Terrain"Terrain の名前
widthintいいえ500Terrain の幅(X)
lengthintいいえ500Terrain の長さ(Z)
heightintいいえ100Terrain の最大高さ(Y)
heightmapResolutionintいいえ513ハイトマップの解像度(2 のべき乗 + 1)
x、y、zfloatいいえ0位置

戻り値:{success, name, instanceId, terrainDataPath, size, position}

terrain_get_info

地形の情報を取得します。

パラメーター型必須説明
namestringいいえ*Terrain の名前
instanceIdintいいえ*インスタンス ID

*どちらも指定されていない場合は、シーン内の最初の Terrain を使用します

戻り値:{success, name, instanceId, position, size, heightmapResolution, alphamapResolution, detailResolution, terrainLayerCount, layers}

terrain_get_height

ワールド位置の地形の高さを取得します。

パラメーター型必須説明
worldXfloatはいワールドの X 座標
worldZfloatはいワールドの Z 座標
namestringいいえ地形名

戻り値: {success, worldX, worldZ, height, worldY}

terrain_set_height

正規化座標の高さを設定します。

パラメーター型必須説明
normalizedXfloatはいX 位置(0-1)
normalizedZfloatはいZ 位置(0-1)
heightfloatはい高さの値(0-1)
namestringいいえ地形名
instanceIdintいいえ地形のインスタンス ID

戻り値: {success, normalizedX, normalizedZ, height, pixelX, pixelZ}

terrain_set_heights_batch

⚠️ バッチスキル: 長方形領域の高さを設定します。

パラメーター型必須説明
startXintはい開始 X ピクセルインデックス
startZintはい開始 Z ピクセルインデックス
heightsfloat[][]はい値が 0-1 の 2 次元配列 [z][x]
namestringいいえ地形名
instanceIdintいいえ地形のインスタンス ID

戻り値: {success, startX, startZ, modifiedWidth, modifiedLength, totalPointsModified}

# Example: Create a 10x10 hill
heights = [[0.5 - abs(x-5)/10 - abs(z-5)/10 for x in range(10)] for z in range(10)]
call_skill("terrain_set_heights_batch", startX=50, startZ=50, heights=heights)
terrain_add_hill

⭐ 推奨: 地形に滑らかで自然な見た目の丘を追加します。

パラメーター型必須デフォルト説明
normalizedXfloatはい-X 位置(0-1)
normalizedZfloatはい-Z 位置(0-1)
radiusfloatいいえ0.2丘の半径(0-1、地形サイズに対する相対値)
heightfloatいいえ0.5丘の高さ(0-1)
smoothnessfloatいいえ1.0滑らかさ係数(値が大きいほど滑らか)
namestringいいえnull地形名
instanceIdintいいえ0地形のインスタンス ID

戻り値: {success, centerX, centerZ, radius, height, affectedArea}

# Add a large smooth hill at center
call_skill("terrain_add_hill",
    normalizedX=0.5, normalizedZ=0.5,
    radius=0.3, height=0.6, smoothness=2.0)

# Add multiple hills for varied terrain
for i in range(5):
    call_skill("terrain_add_hill",
        normalizedX=random.uniform(0.2, 0.8),
        normalizedZ=random.uniform(0.2, 0.8),
        radius=random.uniform(0.1, 0.25),
        height=random.uniform(0.3, 0.7))
terrain_generate_perlin

⭐ 推奨: Perlin ノイズアルゴリズムを使用して、自然な見た目の地形を生成します。

パラメーター型必須デフォルト説明
scalefloatいいえ20.0ノイズのスケール(値が小さいほど特徴が大きくなります)
heightMultiplierfloatいいえ0.3高さの強度(0-1)
octavesintいいえ4ディテールレイヤー数(多いほど詳細になります)
persistencefloatいいえ0.5オクターブごとの振幅の減少率
lacunarityfloatいいえ2.0オクターブごとの周波数の増加率
seedintいいえ0ランダムシード(0 = ランダム)
namestringいいえnull地形名

戻り値: {success, resolution, scale, heightMultiplier, octaves, persistence, lacunarity, seed}

# Generate rolling hills
call_skill("terrain_generate_perlin",
    scale=25.0, heightMultiplier=0.4, octaves=4)

# Generate mountainous terrain
call_skill("terrain_generate_perlin",
    scale=15.0, heightMultiplier=0.6, octaves=6, persistence=0.6)

# Generate with specific seed for reproducibility
call_skill("terrain_generate_perlin",
    scale=20.0, heightMultiplier=0.5, seed=12345)
terrain_smooth

⭐ 地形の高さを滑らかにして、鋭いエッジを減らし、自然な遷移を作ります。

パラメーター型必須デフォルト説明
normalizedXfloatはい-X 位置(0-1)
normalizedZfloatはい-Z 位置(0-1)
radiusfloatいいえ0.1平滑化半径(0-1)
iterationsintいいえ1平滑化パスの回数
namestringいいえnull地形名
instanceIdintいいえ0地形のインスタンス ID

戻り値: {success, centerX, centerZ, radius, iterations, affectedArea}

# Smooth a specific area
call_skill("terrain_smooth",
    normalizedX=0.5, normalizedZ=0.5,
    radius=0.2, iterations=3)
terrain_flatten

⭐ 地域内の地形を指定した高さに平坦化します。

パラメーター型必須デフォルト説明
normalizedXfloatはい-X 座標(0-1)
normalizedZfloatはい-Z 座標(0-1)
targetHeightfloatいいえ0.5目標の高さ(0-1)
radiusfloatいいえ0.1平坦化する半径(0-1)
strengthfloatいいえ1.0平坦化の強さ(0-1)
namestringいいえnull地形名
instanceIdintいいえ0地形のインスタンス ID

戻り値:{success, centerX, centerZ, targetHeight, radius, strength}

# Create a flat plateau
call_skill("terrain_flatten",
    normalizedX=0.5, normalizedZ=0.5,
    targetHeight=0.6, radius=0.15, strength=1.0)
terrain_paint_texture

地形のテクスチャレイヤーをペイントします。あらかじめ地形レイヤーを設定しておく必要があります。

パラメーター型必須デフォルト説明
normalizedXfloatはい-X 座標(0-1)
normalizedZfloatはい-Z 座標(0-1)
layerIndexintはい-地形レイヤーのインデックス(0 始まり。利用可能なレイヤーを確認するには terrain_get_info を使用してください)。範囲外の値(負の値を含む)は、ペイントを行う前に拒否されます
strengthfloatいいえ1.0ペイントの強さ
brushSizeintいいえ10ピクセル単位のブラシサイズ
namestringいいえnull地形名
instanceIdintいいえ0地形のインスタンス ID

戻り値:{success, layerIndex, layerName, centerX, centerZ, brushSize, strength}


使用例

import unity_skills

# === Method 1: Quick terrain with Perlin noise (RECOMMENDED) ===
# Create terrain
result = unity_skills.call_skill("terrain_create",
    name="MyTerrain", width=200, length=200, height=50)

# Generate natural terrain with Perlin noise
unity_skills.call_skill("terrain_generate_perlin",
    scale=20.0,           # Larger scale = bigger features
    heightMultiplier=0.4, # Height intensity
    octaves=5,            # More octaves = more detail
    persistence=0.5,
    lacunarity=2.0)

# === Method 2: Add individual smooth hills ===
# Create flat terrain
result = unity_skills.call_skill("terrain_create",
    name="HillyTerrain", width=200, length=200, height=50)

# Add multiple smooth hills
import random
for i in range(8):
    unity_skills.call_skill("terrain_add_hill",
        normalizedX=random.uniform(0.2, 0.8),
        normalizedZ=random.uniform(0.2, 0.8),
        radius=random.uniform(0.15, 0.3),
        height=random.uniform(0.3, 0.6),
        smoothness=1.5)  # Higher = smoother

# Smooth the entire terrain for natural transitions
unity_skills.call_skill("terrain_smooth",
    normalizedX=0.5, normalizedZ=0.5,
    radius=0.5, iterations=2)

# === Method 3: Create specific features ===
# Create a mountain
unity_skills.call_skill("terrain_add_hill",
    normalizedX=0.5, normalizedZ=0.5,
    radius=0.25, height=0.8, smoothness=2.0)

# Create a flat plateau on top
unity_skills.call_skill("terrain_flatten",
    normalizedX=0.5, normalizedZ=0.5,
    targetHeight=0.8, radius=0.1, strength=1.0)

# === Method 4: Manual height control (advanced) ===
import math
heights = []
for z in range(64):
    row = []
    for x in range(64):
        # Distance from center
        dx = (x - 32) / 32
        dz = (z - 32) / 32
        dist = math.sqrt(dx*dx + dz*dz)
        # Smooth hill with cosine falloff
        h = max(0, 0.5 * math.cos(dist * math.pi / 2)) if dist < 1 else 0
        row.append(h)
    heights.append(row)

unity_skills.call_skill("terrain_set_heights_batch",
    startX=100, startZ=100, heights=heights)

# Query height at world position
info = unity_skills.call_skill("terrain_get_height", worldX=100, worldZ=100)
print(f"Height at position: {info['height']}")

ワークフローとの統合

すべての地形操作で、ワークフローの元に戻す/やり直す機能を利用できます。

# Start workflow session
unity_skills.call_skill("workflow_session_start", tag="Create Terrain")

# Create and modify terrain
unity_skills.call_skill("terrain_create", name="TestTerrain")
unity_skills.call_skill("terrain_generate_perlin", scale=20, heightMultiplier=0.5)
unity_skills.call_skill("terrain_add_hill", normalizedX=0.3, normalizedZ=0.3, radius=0.2)

# End session
unity_skills.call_skill("workflow_session_end")

# Later: Undo entire terrain creation
sessions = unity_skills.call_skill("workflow_session_list")
unity_skills.call_skill("workflow_session_undo", sessionId=sessions['sessions'][0]['sessionId'])

正確なシグネチャ

正確な名前、パラメーター、デフォルト値、戻り値は、このファイルではなく、GET /skills/schema または unity_skills.get_skill_schema() で定義されています。

コメント