発射したPrefabが消えれば、次の種類のPrefabを、順繰りで補充できるしくみを作ってみましょう。
クリックでボールが発射され、1秒後に削除。
削除されれば、次の種類のボールが自動で補充されます。
Sphereのプレハブを用意
Sphereを作成して、リジッドボディを追加。
isKinematicにチェックを入れます。
BallShot.csを作成し、Sphereに追加します。
BallShot.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public float force = 50.0f; public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); BallSpawn.instance.isDestroyed = false; } void OnMouseDown() { rb.isKinematic = false; rb.AddForce(0, 0, force, ForceMode.Impulse); Invoke("BallDestroy",1.0f); } void BallDestroy() { BallSpawn.instance.isDestroyed = true; Destroy(this.gameObject); } } |
Sphereを複製して、全部で3つ用意します。
それぞれオブジェクト名の末尾に、0~2で番号をつけます。
3つのSphereにそれぞれ色をつけます。
Resourcesという名前でフォルダを作成し、この中に3つのSphereを入れます。
Sphereの元データは削除しておきます。
次の種類のボールをセットする
続いて、空のオブジェクトを作成します。
BallSpawn.csを作成し、GameObject(空のオブジェクト)に追加します。
BallSpawn.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 35 36 37 38 39 40 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallSpawn : MonoBehaviour { public GameObject ball; public bool isDestroyed; private int count; public static BallSpawn instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { count = 0; ball = Resources.Load<GameObject>("Sphere" + count.ToString()); Instantiate(ball, this.transform.position,Quaternion.identity); } void Update() { if(isDestroyed) { if(count<2) count++; else count=0; ball = Resources.Load<GameObject>("Sphere" + count.ToString()); Instantiate(ball, this.transform.position,Quaternion.identity); } } } |
ゲームプレイしてみましょう。
クリックでSphereを発射。
1秒後に消えて、次のSphereがセットされます。