思いついたアプローチは2つです。
・スポーンを1つにして、生成場所の候補を複数登録する。
・スポーンを2つにして、さらにスポーンを管理するクラスを作る
#スポーンを1つにして、生成場所の候補を複数登録する。
スポーン位置さえわかれば、そのうちどっちか片方を使えば良いことになります
cs
1public class Ball : MonoBehaviour
2{
3 public GameObject obj;
4 public Transform[] spawnPos; // 生成する位置の候補をインスペクターからアタッチ
5
6 void Update()
7 {
8 if (Input.GetMouseButtonDown(0))
9 {
10 var _obj = Instantiate(obj);
11 var _seed = Random.Range(0, spawnPos.Length); // 配列の数で乱数を作る
12 _obj.transform.position = spawnPos[_seed].position; // 生成したオブジェクトの位置を変更する
13 _obj.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); // 色をランダムに変更する(別にこのやり方じゃなくてもいいです)
14 }
15 }
16}
#スポーンを2つにして、さらにスポーンを管理するクラスを作る
「どちらか一方」という目的を簡単に達成するためには
■ スポーンを管理するクラス
├ Spawn1
└ Spawn2
といった構成にしたほうが楽だと思います。こうすればどちらか一方を判断する処理と、ボールを生成する処理を分けられるので実装が楽になります。
まずスポーンを管理するball
では、メソッドを叩かれたらボールを生成する処理を書きます。
cs
1public class Ball : MonoBehaviour
2{
3 public GameObject obj;
4
5 public void CreateBall(){
6 var _obj = Instantiate(obj);
7 _obj.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); // 色をランダムに変更する(別にこのやり方じゃなくてもいいです)
8 }
9}
次に複数のball
を管理するクラスを作ります。
cs
1public class BallManager : MonoBehaviour
2{
3 public Ball[] balls; // ball をインスペクターからアタッチ
4
5 void Update()
6 {
7 if (Input.GetMouseButtonDown(0))
8 {
9 if(balls.Length <= 0) return; // アタッチされてなかったら戻す
10
11 var _seed = Random.Range(0, balls.Length); // 配列の数で乱数を作る
12 balls[_seed].CreateBall(); // 乱数をもとにどちらかのボール生成メソッドを叩く
13 }
14 }
15}
デバッグしてないので動かないかもですが、ざっくり思いつくのはこういったアプローチでした
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/13 06:34