AgentSkillsCN

unity-terrain

时间轴

SKILL.md
--- frontmatter
name: unity-terrain
description: "Create and modify Unity Terrain. Set heights, paint textures, query elevation."

Unity Terrain Skills

Note: Terrain operations require an existing Terrain in the scene, or use terrain_create to generate one.

Skills Overview

SkillDescription
terrain_createCreate new Terrain with TerrainData
terrain_get_infoGet terrain size, resolution, layers
terrain_get_heightGet height at world position
terrain_set_heightSet height at normalized coords
terrain_set_heights_batchBatch set heights in region
terrain_add_hill⭐ Add smooth hill with radius and falloff
terrain_generate_perlin⭐ Generate natural terrain using Perlin noise
terrain_smooth⭐ Smooth terrain to reduce sharp edges
terrain_flatten⭐ Flatten terrain to target height
terrain_paint_texturePaint texture layer at position

Skills

terrain_create

Create a new Terrain GameObject with TerrainData asset.

ParameterTypeRequiredDefaultDescription
namestringNo"Terrain"Terrain name
widthintNo500Terrain width (X)
lengthintNo500Terrain length (Z)
heightintNo100Max terrain height (Y)
heightmapResolutionintNo513Heightmap resolution (power of 2 + 1)
x, y, zfloatNo0Position

Returns: {success, name, instanceId, terrainDataPath, size, position}

terrain_get_info

Get terrain information.

ParameterTypeRequiredDescription
namestringNo*Terrain name
instanceIdintNo*Instance ID

*If neither provided, uses first terrain in scene

Returns: {success, name, size, heightmapResolution, alphamapResolution, terrainLayerCount, layers}

terrain_get_height

Get terrain height at world position.

ParameterTypeRequiredDescription
worldXfloatYesWorld X coordinate
worldZfloatYesWorld Z coordinate
namestringNoTerrain name

Returns: {success, worldX, worldZ, height, worldY}

terrain_set_height

Set height at normalized coordinates.

ParameterTypeRequiredDescription
normalizedXfloatYesX position (0-1)
normalizedZfloatYesZ position (0-1)
heightfloatYesHeight value (0-1)
namestringNoTerrain name

Returns: {success, normalizedX, normalizedZ, height, pixelX, pixelZ}

terrain_set_heights_batch

⚠️ BATCH SKILL: Set heights in rectangular region.

ParameterTypeRequiredDescription
startXintYesStart X pixel index
startZintYesStart Z pixel index
heightsfloat[][]Yes2D array [z][x] with values 0-1
namestringNoTerrain name

Returns: {success, startX, startZ, modifiedWidth, modifiedLength, totalPointsModified}

python
# 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

RECOMMENDED: Add a smooth, natural-looking hill to the terrain.

ParameterTypeRequiredDefaultDescription
normalizedXfloatYes-X position (0-1)
normalizedZfloatYes-Z position (0-1)
radiusfloatNo0.2Hill radius (0-1, relative to terrain size)
heightfloatNo0.5Hill height (0-1)
smoothnessfloatNo1.0Smoothness factor (higher = smoother)
namestringNonullTerrain name

Returns: {success, centerX, centerZ, radius, height, affectedArea}

python
# 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

RECOMMENDED: Generate natural-looking terrain using Perlin noise algorithm.

ParameterTypeRequiredDefaultDescription
scalefloatNo20.0Noise scale (lower = larger features)
heightMultiplierfloatNo0.3Height intensity (0-1)
octavesintNo4Detail layers (more = more detail)
persistencefloatNo0.5Amplitude decrease per octave
lacunarityfloatNo2.0Frequency increase per octave
seedintNo0Random seed (0 = random)
namestringNonullTerrain name

Returns: {success, resolution, scale, heightMultiplier, octaves, persistence, lacunarity, seed}

python
# 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

⭐ Smooth terrain heights to reduce sharp edges and create natural transitions.

ParameterTypeRequiredDefaultDescription
normalizedXfloatYes-X position (0-1)
normalizedZfloatYes-Z position (0-1)
radiusfloatNo0.1Smoothing radius (0-1)
iterationsintNo1Number of smoothing passes
namestringNonullTerrain name

Returns: {success, centerX, centerZ, radius, iterations, affectedArea}

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

terrain_flatten

⭐ Flatten terrain to a specific height in a region.

ParameterTypeRequiredDefaultDescription
normalizedXfloatYes-X position (0-1)
normalizedZfloatYes-Z position (0-1)
targetHeightfloatNo0.5Target height (0-1)
radiusfloatNo0.1Flatten radius (0-1)
strengthfloatNo1.0Flatten strength (0-1)
namestringNonullTerrain name

Returns: {success, centerX, centerZ, targetHeight, radius, strength}

python
# 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

Paint terrain texture layer. Requires terrain layers already configured.

ParameterTypeRequiredDefaultDescription
normalizedXfloatYes-X position (0-1)
normalizedZfloatYes-Z position (0-1)
layerIndexintYes-Layer index to paint
strengthfloatNo1.0Paint strength
brushSizeintNo10Brush size in pixels
namestringNonullTerrain name

Returns: {success, layerIndex, layerName, centerX, centerZ}


Example Usage

python
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']}")

Workflow Integration

All terrain operations support workflow undo/redo:

python
# 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'])