🎲
UnityでTerrain上にランダムな位置情報を生成する方法
使用OS
Mac
本記事で使用しているUnityバージョン
Version 2020.3.18f1
やりたいこと
- 敵をランダムな位置にスポーンさせるため、位置情報を自動で生成したい
- 位置情報を生成する際に使う上限値(地面部分のサイズ)は自動で取得したい
方法
- X軸とZ軸の最大値を格納する変数を宣言(ここではmaxXとmaxZ)
- Startメソッドの中で、TerrainのXとZを取得(Terrainはこの上で取得しておくか、もしくはインスペクター上から指定できるようにしておく)
maxX = (int)terrain.terrainData.size.x;
maxZ = (int)terrain.terrainData.size.z;
- 下記のメソッドを呼び出すたびに、毎回ランダムな位置情報を取得できる
Vector3 SetVector3()
{
// 0〜maxXの間で乱数を生成
var x = Random.Range(0, maxX);
// 0〜maxZの間で乱数を生成
var z = Random.Range(0, maxZ);
// 生成した数字を使って、Vector3を生成
return new Vector3(x, 0, z);
}
- 使用イメージは下記の通り。
GameObject instance = (GameObject)Instantiate(zombie);
zombieTransform = SetVector3();
instance.transform.position = zombieTransform;
補足
- こんな感じで、SetVector3()が呼ばれるたびに、XとZが自動で生成されました。(ここではXもZも最大値は500です)
- Yは0固定にしたかったので、ランダム生成していません。もしY軸にも入れたい場合は、XやYと同じ容量で乱数生成したらいいかと思います。
- 自分用のメモです。各自適当にカスタムして、お好きなように使ってください。
Discussion