タイトル: 地形
SEOタイトル: Unity Terrain (地形) 完全ガイド
| この記事の要点 |
|
Unity Terrain とは
Unity の Terrain はゲーム内の地形 (山・丘・平原・河川) をブラシで描く専用システムです。Hierarchy → 3D Object → Terrain で 1000m 四方の平地が生成され、Inspector のツールバーから「持ち上げる」「平らにする」「テクスチャを塗る」「木を生やす」「草を植える」といった編集が直感的に行えます。

Terrain 作成手順
- Hierarchy 右クリック → 3D Object → Terrain
- シーンビューに大きな白い平面が出現 (初期 1000m × 1000m × 600m)
- Inspector の Terrain コンポーネント → 山型ツールバーから各ブラシ選択
- シーンビューでドラッグして地形を彫る
5 大ツールバー
| ツール | 機能 | 主な用途 |
|---|---|---|
| Raise/Lower Terrain | マウスで持ち上げ/下げ | 山・盆地を彫る |
| Paint Holes | 地形に穴を開ける | 洞窟・崖の入口 |
| Paint Texture | マテリアルを塗る | 草・砂・岩を塗り分け |
| Set Height | 指定高さに揃える | 平坦地・湖底作り |
| Smooth Height | 地形をなめらかに | 急斜面の調整 |
| Stamp Terrain | ハイトマップで「判子」 | 同じ山を量産 |
各ブラシは Brush Size (大きさ) と Opacity (強さ) を調整できます。Brushes パネルから多様な形状を選べ、丸・四角・スプレー型などで微妙な凹凸を作れます。
Paint Texture (テクスチャ塗り)
- ツールバーで Paint Texture を選択
- Terrain Layers → Create Layer → 草テクスチャの Albedo (Diffuse) を割り当て
- 同様に「Sand」「Rock」「Snow」レイヤを作成
- 各レイヤをブラシで塗ると、ブレンドして自然な地表ができる
HDRP / URP で品質が変わります。URP の Terrain Lit シェーダはモバイルでも動くので推奨です。
Tree (木の配置)
Paint Trees ツールで森を描画:
- Edit Trees → Add Tree → SpeedTree や Asset Store の Tree Prefab を割り当て
- Brush Size を大きく、Tree Density を中程度に
- ドラッグで森を描く
- Shift+ドラッグで木を消去
木は Billboard として遠景は 2D 表示になり、軽量化されます。
Detail (草・小石)
Paint Details で草を植えます。Edit Details → Add Grass Texture で芝生テクスチャを登録し、ブラシで塗ります。Wind Settings (風) を有効にすると草が風で揺れます。
Terrain Settings (重要パラメータ)
| 項目 | 初期値 | 意味 |
|---|---|---|
| Terrain Width / Length | 1000 | 地形の縦横 (m) |
| Terrain Height | 600 | 最大の高さ (m) |
| Heightmap Resolution | 513 | 高度マップ解像度 |
| Detail Resolution | 1024 | 草・小石 |
| Base Texture Resolution | 1024 | 遠景テクスチャ |
| Pixel Error | 5 | LOD のしきい値 (大きいほど軽量) |
| Base Map Distance | 1000 | 遠景テクスチャ切替距離 |
Heightmap Resolution を 2049 まで上げると細かな地形が作れますが、メモリと描画負荷が増えます。モバイル/Switch 等は 513 程度が無難です。
軽量化のコツ
- Pixel Error を 5〜10 に → LOD で遠景三角形を減らす
- Draw Instanced をオン → 草や木を GPU Instancing で描画
- Terrain を複数の小さなチャンクに分割 → カリングが効きやすい
- 不要なシーンでは Terrain.activeTerrain.drawTreesAndFoliage = false で草木描画オフ
ハイトマップ (Heightmap) インポート
Photoshop で作った白黒の高度マップ (RAW 16bit) を読み込めます:
- Terrain Settings → Import Raw...
- 解像度 (513 / 1025 / 2049) と Byte Order を指定
- 地形に反映
World Machine や Houdini で作った本格的な地形を Unity に持ってこられます。
Unity 6 の Terrain System
Unity 6 (2024 末リリース) では Terrain System に改善:
- 新 Terrain Tools が標準搭載 (旧 Package 内蔵化)
- GPU 駆動カリングで遠景が高速化
- HDRP の Mask Map によるディスプレイスメント精度向上
- Splatmap (テクスチャブレンド) のレイヤ数増加
スクリプトから Terrain を操作
using UnityEngine;
public class TerrainEdit : MonoBehaviour
{
public Terrain terrain;
void Start()
{
TerrainData data = terrain.terrainData;
int w = data.heightmapResolution;
int h = data.heightmapResolution;
// 高度マップを取得
float[,] heights = data.GetHeights(0, 0, w, h);
// 中央を盛り上げる
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
{
float dx = x - w / 2f;
float dy = y - h / 2f;
float dist = Mathf.Sqrt(dx*dx + dy*dy) / (w * 0.5f);
heights[y, x] = Mathf.Lerp(0.5f, 0f, dist);
}
data.SetHeights(0, 0, heights);
}
}
FAQ
Q: 地形が見えないです
A: Terrain は Y=0 から始まる。カメラが Y < 0 にいると下にいるので見えません。Y を上げてください。
Q: 草が出ない
A: Detail Distance が短すぎる可能性。Terrain Settings → Detail Distance を 150 以上に。
Q: ParticleSystem の雨が Terrain を貫通する
A: Particle に Collision モジュールを追加し、Layer に Default を指定。Terrain も Default レイヤならぶつかります。