unity-terrain について
unity-terrainは、Unity Terrainの作成と編集を行うスキルモジュールです。高さ調整、Perlinノイズによる地形生成、平滑化、平坦化、テクスチャレイヤーのペイントに対応し、ワークフローの取り消しとやり直しも利用できます。
主な機能
- 01TerrainData付きTerrainの作成
- 02Perlinノイズによる高さマップ生成
- 03丘の追加と高さ編集
- 04地形領域の平滑化・平坦化
- 05設定済みテクスチャレイヤーのペイント
- 06ワークフローの取り消しとやり直し
活用シーン
- 01Unityシーン用の地形作成
- 02自然な高低差の生成
- 03平坦な場所の用意や斜面の平滑化
- 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_create | TerrainData を含む新しい 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 を作成します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
name | string | いいえ | "Terrain" | Terrain の名前 |
width | int | いいえ | 500 | Terrain の幅(X) |
length | int | いいえ | 500 | Terrain の長さ(Z) |
height | int | いいえ | 100 | Terrain の最大高さ(Y) |
heightmapResolution | int | いいえ | 513 | ハイトマップの解像度(2 のべき乗 + 1) |
x、y、z | float | いいえ | 0 | 位置 |
戻り値:{success, name, instanceId, terrainDataPath, size, position}
terrain_get_info
地形の情報を取得します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | いいえ* | Terrain の名前 |
instanceId | int | いいえ* | インスタンス ID |
*どちらも指定されていない場合は、シーン内の最初の Terrain を使用します
戻り値:{success, name, instanceId, position, size, heightmapResolution, alphamapResolution, detailResolution, terrainLayerCount, layers}
terrain_get_height
ワールド位置の地形の高さを取得します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
worldX | float | はい | ワールドの X 座標 |
worldZ | float | はい | ワールドの Z 座標 |
name | string | いいえ | 地形名 |
戻り値: {success, worldX, worldZ, height, worldY}
terrain_set_height
正規化座標の高さを設定します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
normalizedX | float | はい | X 位置(0-1) |
normalizedZ | float | はい | Z 位置(0-1) |
height | float | はい | 高さの値(0-1) |
name | string | いいえ | 地形名 |
instanceId | int | いいえ | 地形のインスタンス ID |
戻り値: {success, normalizedX, normalizedZ, height, pixelX, pixelZ}
terrain_set_heights_batch
⚠️ バッチスキル: 長方形領域の高さを設定します。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
startX | int | はい | 開始 X ピクセルインデックス |
startZ | int | はい | 開始 Z ピクセルインデックス |
heights | float[][] | はい | 値が 0-1 の 2 次元配列 [z][x] |
name | string | いいえ | 地形名 |
instanceId | int | いいえ | 地形のインスタンス 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
⭐ 推奨: 地形に滑らかで自然な見た目の丘を追加します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
normalizedX | float | はい | - | X 位置(0-1) |
normalizedZ | float | はい | - | Z 位置(0-1) |
radius | float | いいえ | 0.2 | 丘の半径(0-1、地形サイズに対する相対値) |
height | float | いいえ | 0.5 | 丘の高さ(0-1) |
smoothness | float | いいえ | 1.0 | 滑らかさ係数(値が大きいほど滑らか) |
name | string | いいえ | null | 地形名 |
instanceId | int | いいえ | 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 ノイズアルゴリズムを使用して、自然な見た目の地形を生成します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
scale | float | いいえ | 20.0 | ノイズのスケール(値が小さいほど特徴が大きくなります) |
heightMultiplier | float | いいえ | 0.3 | 高さの強度(0-1) |
octaves | int | いいえ | 4 | ディテールレイヤー数(多いほど詳細になります) |
persistence | float | いいえ | 0.5 | オクターブごとの振幅の減少率 |
lacunarity | float | いいえ | 2.0 | オクターブごとの周波数の増加率 |
seed | int | いいえ | 0 | ランダムシード(0 = ランダム) |
name | string | いいえ | 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
⭐ 地形の高さを滑らかにして、鋭いエッジを減らし、自然な遷移を作ります。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
normalizedX | float | はい | - | X 位置(0-1) |
normalizedZ | float | はい | - | Z 位置(0-1) |
radius | float | いいえ | 0.1 | 平滑化半径(0-1) |
iterations | int | いいえ | 1 | 平滑化パスの回数 |
name | string | いいえ | null | 地形名 |
instanceId | int | いいえ | 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
⭐ 地域内の地形を指定した高さに平坦化します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
normalizedX | float | はい | - | X 座標(0-1) |
normalizedZ | float | はい | - | Z 座標(0-1) |
targetHeight | float | いいえ | 0.5 | 目標の高さ(0-1) |
radius | float | いいえ | 0.1 | 平坦化する半径(0-1) |
strength | float | いいえ | 1.0 | 平坦化の強さ(0-1) |
name | string | いいえ | null | 地形名 |
instanceId | int | いいえ | 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
地形のテクスチャレイヤーをペイントします。あらかじめ地形レイヤーを設定しておく必要があります。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
normalizedX | float | はい | - | X 座標(0-1) |
normalizedZ | float | はい | - | Z 座標(0-1) |
layerIndex | int | はい | - | 地形レイヤーのインデックス(0 始まり。利用可能なレイヤーを確認するには terrain_get_info を使用してください)。範囲外の値(負の値を含む)は、ペイントを行う前に拒否されます |
strength | float | いいえ | 1.0 | ペイントの強さ |
brushSize | int | いいえ | 10 | ピクセル単位のブラシサイズ |
name | string | いいえ | null | 地形名 |
instanceId | int | いいえ | 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() で定義されています。