2つのオブジェクトをランダムで生成するとき、座標が重ならないようにできる仕組みを作ってみましょう。
クリックすればCubeとSphereが横方向(X軸)にランダム出現しますが、X座標が重複することはありません。
座標が重複せずにランダム生成
SphereとCubeを作成し、それぞれリジッドボディを追加。
SphereとCubeをプロジェクトビューにドラッグ&ドロップし、プレハブ化します。
SphereとCubeの元データは、削除します。
空のオブジェクトを作成します。
RandomScript.csを作成し、GameObject(空のオブジェクト)に追加します。
RandomScript.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RandomScript : MonoBehaviour { [SerializeField] GameObject sphere; [SerializeField] GameObject cube; int spherePos; int cubePos; void Update() { if(Input.GetMouseButtonDown(0)) { spherePos = Random.Range(-3, 4); Instantiate(sphere, new Vector3(spherePos, 3, 0), Quaternion.identity); CubeClone(); } } void CubeClone() { int cubePos = Random.Range(-3, 4); if(cubePos == spherePos) { CubeClone(); } else { Instantiate(cube, new Vector3(cubePos, 3, 0), Quaternion.identity); } } } |
キューブとスフィア、それぞれのフィールドに、プレハブを入れます。
ゲームプレイして、画面をクリックしましょう。
横位置はランダムで生成されますが、2つのオブジェクトが重なることはありません。
Sphereが出現する位置を、spherePosとし、-3から3の範囲でランダム生成。
その後、CubeClone()を実行。
Cubeが出現する位置をcubePosとしてランダムにしますが、spherePosと同じ数字が出た場合は、再度CubeClone()を実行させます。
これにより、2つの座標が重複することはありません。