クリックでボールを発射して、消えると次のボールが補充されるしくみを作ってみましょう。
Sphereのプレハブをクリックすると飛んでいき、1秒後に削除。
削除されると、またSphereがセットされます。
Prefabが消えればセットする
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をプロジェクトビューにドラッグ&ドロップして、Prefab化します。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallSpawn : MonoBehaviour { public GameObject ball; public bool isDestroyed; public static BallSpawn instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { Instantiate(ball, this.transform.position,Quaternion.identity); } void Update() { if(isDestroyed) { Instantiate(ball, this.transform.position,Quaternion.identity); } } } |
Ballのフィールドに、Sphereを入れます。
ゲームプレイしてみましょう。
Sphereをクリックすると発射。
1秒後にSphereが消えると、また補充されます。