🎲

UnityでTerrain上にランダムな位置情報を生成する方法

2022/03/13に公開

使用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