【Unity Terrain C#】Script で地形(ハイトマップ)を作成する

今回は、UnityのTerrainの地形( ハイトマップ )をC# Scriptで作成する方法について書きます。

開発環境
  • Windows10 Home 64bit
  • Unity Version 2020.3.17f1 Personal
  • Visual Studio Community 2019  16.11.2

ScriptでTerrain作成のまとめは↓のリンクから。

あわせて読みたい
【Unity Terrain C#】Script でTerrainを作成する Unity のTerrain をScript で作成する方法について書きます。 ネットで検索すると、GUIを使ってTerrainを作成する記事は多々見つかります。しかし、Script でTerrainを...
目次

やりたいこと

やりたいことは、下の図のように、Terrain の左下側にゲレンデのような地形をスクリプトで作ることです。

Terrainを上から見た図は↓のようになります。

Scriptで地形の設定

Terrain で地形を作成するScriptは以下のようになります。

public class ScriptTerrain : MonoBehaviour
{
    private void Start()
    {
        // テレインコンポーネント
        Terrain terrain = GetComponent<Terrain>();

        // テレインサイズを設定する
        terrain.terrainData.size = new Vector3(200, 10, 150);

        // 1. ハイトマップ解像度の設定
        int heithmapResolution = 513;
        terrain.terrainData.heightmapResolution = heithmapResolution;

        // 2. ハイトマップを取得
        float[,] heightMap = terrain.terrainData.GetHeights(0, 0, heithmapResolution, heithmapResolution);

        // 3. 高さの設定
        for (int y = 20; y < 100; y++)
        {
            for (int x = 10; x < 100; x++)
            {
                heightMap[y, x] = (float)(x-10) / 100;
            }
        }

        // 4. ハイトマップの設定
        terrain.terrainData.SetHeights(0, 0, heightMap);
    }
}

ハイトマップの解像度の設定

ハイトマップの解像度は、terrainData.heightmapResolution を設定することでできます。

あわせて読みたい

テレインの高さは、ハイトマップ解像度×ハイトマップ解像度の数だけ設定できます。ハイトマップ解像度を大きくすれば、より多くの点の高さを設定できます。

点と点の間の距離は以下の計算をすることで導き出せます。

  • x方向 : Terrain Width / ( HeightmapResolution – 1 )
  • z方向 : Terrain Height / ( HeightmapResolution – 1 )

今回は、ハイトマップ解像度を513 に設定しました。つまり、513×513 点の高さを設定できます。

また、点と点の距離は、

  • x方向の点と点の距離 : 200 / ( 513-1 ) = 0.390625
  • z方向の点と点の距離 : 150 / ( 513 -1) = 0.29296875

となります。

ハイトマップの取得

terrainData.GetHeights メソッドでTerrain のハイトマップを取得します。

あわせて読みたい
terrainData.GetHeightsメソッドの引数
  • 第1引数 : ハイトマップのxインデックス : 0
  • 第2引数 : ハイトマップのzインデックス : 0
  • 第3引数 : ハイトマップのx方向の数 : 513
  • 第4引数 : ハイトマップのz方向の数 : 513

すなわち、今回のコードは、最大サイズのハイトマップを取得しています。

高さの設定

ハイトマップは、0~1の値を設定します。ハイトマップが1のときは、TerrainHeight の値の高さとなります。

今回は10と設定しています。ハイトマップ値1のときは、高さが10となります。

今回のコードは、xの値が大きくなるにつれ、徐々に高くなるようにハイトマップの値を設定しています。

ハイトマップの設定

地形の設定は、Terrain のterrainData.SetHeights メソッドによって行います。このメソッドを呼び出すことで、ハイトマップが設定されます。

あわせて読みたい
terrainData.SetHeights メソッドの引数
  • 第1引数 : ハイトマップのxインデックス : 0
  • 第2引数 : ハイトマップのzインデックス : 0
  • 第3引数 : ハイトマップ : 先ほど作成したfloat型の2次元配列

Play画面に遷移する

Play画面に遷移することで、ゲレンデのような地形を作成できました。

まとめ

今回は、Terrainの地形をScriptで変更する方法について記載しました。

この方法を応用すれば、いろいろな地形をScriptで作成できます。

ScriptでTerrain作成のまとめは↓のリンクから。

あわせて読みたい
【Unity Terrain C#】Script でTerrainを作成する Unity のTerrain をScript で作成する方法について書きます。 ネットで検索すると、GUIを使ってTerrainを作成する記事は多々見つかります。しかし、Script でTerrainを...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次