5.

Unity Terrain ツリー・草の配置完全ガイド

編集
この記事の要点
  • Unity Terrain にツリー(樹木)と草・小物を配置する 2 系統のツール: Paint TreesPaint Details
  • Paint Trees: Prefab を Tree として登録 → ブラシで配置。LOD 対応、Wind Zone 連携可
  • Paint Details: 草テクスチャや小型 Mesh をビルボード / メッシュとして大量配置。Detail Database で密度制御
  • Mass Place Trees で広範囲一括ランダム配置。テスト用に便利
  • 草の 風揺れには Wind Zone コンポーネントを追加(Hierarchy → 3D Object → Wind Zone)
  • パフォーマンス: Detail Distance(草描画距離)と Tree Distance(樹木描画距離)を短くする

Terrain に小物を配置する

Unity Terrain では、地形の上にツリー(樹木)・草・岩などの小物をブラシで配置できます。Mesh をシーンに 1 つずつ置くよりも遥かに効率的で、数万本の樹木や草を高速に描画する仕組みを内蔵しています。

ツール対象描画方式
Paint Trees樹木(中〜大型 Prefab)LOD 付き Mesh / Billboard 自動切替
Paint Details草・小石・落葉等Billboard(板)または Mesh(草プレハブ)

Paint Trees: 樹木を配置

1. 樹木 Prefab を追加

  1. Terrain を選択 → Inspector のツールバー Paint Trees(樹のアイコン)
  2. Trees セクション → Edit Trees → Add Tree
  3. Tree Prefab に Prefab をドラッグ(標準アセットの SpeedTree、または .fbx を Prefab 化したもの)
  4. Bend Factor(風で曲がる強さ)を設定 → Add

2. ブラシで配置

パラメータ意味
Brush Sizeブラシ半径
Tree Density1 ストロークで配置する本数
Tree Height (Min/Max)ランダム高さ範囲(Lock チェックで縦横比固定)
Tree Width幅のランダム範囲
Color Variation個体ごとの色のばらつき
Random Rotationランダム回転(チェック推奨で並んだ感を消す)

Terrain 上でクリック / ドラッグして配置。Shift + クリックで削除、Ctrl + クリックで同種のみ削除。

Mass Place Trees

広範囲を一括でランダム配置するには:

  1. Paint Trees パネル右上の Mass Place Trees ボタン
  2. Number of Trees を入力(例 5000)
  3. Keep Existing Trees: 既存を維持するか
  4. OK で全体に配置

Paint Details: 草・小物を配置

1. Detail を追加

  1. Terrain Inspector → Paint Details(花のアイコン)
  2. Edit Details → Add Grass Texture(草テクスチャ) または Add Detail Mesh(小物 Mesh)
項目意味
Detail Texture草テクスチャ(PNG, 透明背景推奨)
Min/Max Width / Heightサイズのランダム範囲
Noise Spread密度のムラ(高いほどパッチ状に)
Healthy Color / Dry Color2 色の間でランダム配色
Render ModeBillboard(常に正面) / Grass(斜め向き)

2. 配置

Detail を選択 → Terrain をドラッグで塗る感覚で配置。Brush Size と Target Strength で密度を制御します。

Wind Zone との連携

樹木と草を揺らすには Wind Zone を追加します:

  1. Hierarchy → 右クリック → 3D Object → Wind Zone
  2. Inspector で Mode を Directional(全体に同方向) または Spherical(点源風)
  3. Main / Turbulence / Pulse Magnitude / Pulse Frequency を調整
// スクリプトで風を制御する例
using UnityEngine;

public class WindController : MonoBehaviour
{
    public WindZone wind;
    public float maxStrength = 2f;

    void Update()
    {
        // 時間に応じて風を周期変化
        wind.windMain = Mathf.PingPong(Time.time * 0.1f, maxStrength);
        wind.windPulseFrequency = 0.5f;
    }
}

パフォーマンス最適化

設定場所効果
Detail DistanceTerrain Settings草が描かれる距離。短いほど高速(推奨 30-80m)
Detail DensityTerrain Settings草の密度倍率。0.5 にすると半減(モバイル向け)
Tree DistanceTerrain Settings樹木の最大描画距離(推奨 500-1500m)
Billboard StartTerrain Settingsこの距離以遠は樹木を 2D ビルボードに(必須)
Fade LengthTerrain Settings3D ↔ Billboard 切替のフェード距離
Max Mesh TreesTerrain Settings同時に Mesh で描く最大本数(残りは Billboard)

LOD(Level of Detail)対応

SpeedTree や LOD Group 付き Prefab を Tree として登録すると、距離に応じて自動で LOD が切り替わります:

  1. Prefab に LOD Group コンポーネントを追加
  2. LOD 0(高品質) / LOD 1(中) / LOD 2(低) / Billboard を登録
  3. 遷移距離パーセントを調整

スクリプトで小物を一括配置

using UnityEngine;

public class AutoTreePlacer : MonoBehaviour
{
    public Terrain terrain;
    public int count = 1000;

    void Start()
    {
        TerrainData data = terrain.terrainData;
        var trees = new TreeInstance[count];

        for (int i = 0; i < count; i++)
        {
            var inst = new TreeInstance();
            inst.position = new Vector3(Random.value, 0, Random.value);
            inst.prototypeIndex = Random.Range(0, data.treePrototypes.Length);
            inst.widthScale = Random.Range(0.8f, 1.2f);
            inst.heightScale = inst.widthScale;
            inst.rotation = Random.Range(0, 360);
            inst.color = Color.white;
            inst.lightmapColor = Color.white;
            trees[i] = inst;
        }
        data.treeInstances = trees;
        terrain.Flush();
    }
}

よくあるトラブル

Q: 草の色がピンク(マゼンタ)になる
A: URP / HDRP プロジェクトで Built-in シェーダの草を使っている。URP は Universal Render Pipeline/Nature/Terrain Lit、HDRP も同様に対応シェーダへ。

Q: 樹木が地中に沈む / 浮く
A: Prefab の原点が根元に来ているか確認。FBX 取込時に Pivot 位置がずれている場合、Empty 親に入れて原点調整。

Q: 草が描画されない / Detail Distance 内なのに見えない
A: Terrain Settings の Draw Instanced 設定とシェーダ互換性。URP では URP Asset → Terrain → Detail Distance も影響。

FAQ

Q: 巨大なフィールドで全部草で埋めたい
A: Detail Density 1.0 + Detail Distance 100m+ は重い。GPU Instancing 対応の URP Terrain Lit + Draw Instanced を必ず ON。

Q: 動かない岩や柵は Paint Trees で配置していい?
A: 可能だが、当たり判定が要る場合は別。Tree は Capsule Collider を自動生成しない(コライダー付きの場合のみ)。岩には Mesh Collider 付き Prefab を Tree として登録。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 地形の作成
  2. 地形をペイントする
  3. 地形に高低をつける
  4. 木を植える
  5. 小物を配置する