発射したオブジェクトが削除されなければ、次の発射ができない仕組みをつくってみましょう。
クリックでボールを発射。一定の距離まで行けばボールが消えます。
先に飛ばしたボールが消えない限り、いくらクリックを連打しても撃つことができません。
関連記事:
プレーヤーの向いている方向に発射
定位置からボールを発射させるしくみ
360°全方位に向けて発射
クリックした場所からボールを発射する
全方位に向けてランダム発射
発射の弾数を制限する
発射したPrefabを削除する
一度に複数のオブジェクトを発射
消えれば次のPrefabが発射可能
発射したオブジェクトが消えれば発射可能
空のオブジェクトを作成します。
BallShot.csを作成し、GameObject(空のオブジェクト)にドラッグ&ドロップします。
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 29 30 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { [SerializeField] GameObject ball; public bool notShot; public static BallShot instance; public void Awake() { if(instance == null) { instance = this; } notShot = false; } void Update() { if(Input.GetMouseButtonDown(0) && !notShot) { GameObject obj = GameObject.Instantiate (ball)as GameObject; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 dir = ray.direction; obj.GetComponent<Rigidbody>().AddForce(dir * 1000); } } } |
続いて、Sphereを作成して、リジッドボディを追加します。
BallDelete.csを作成し、Sphereに追加します。
BallDelete.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallDelete : MonoBehaviour { void Start() { BallShot.instance.notShot = true; } void Update() { if (transform.position.z >= 20.0f) { BallShot.instance.notShot = false; Destroy(gameObject); } } } |
Prefabフォルダを作り、この中にSphereオブジェクトを入れてプレハブ化します。
Sphereの元データは削除しておきます。
GameObjectを選択して、Ballのフィールドの中に、Sphereオブジェクトを入れます。
ゲームプレイしましょう。
いくらクリックを連打しても、ボールが消えなければ、次の弾を撃つことはできません。
関連記事:
プレーヤーの向いている方向に発射
定位置からボールを発射させるしくみ
360°全方位に向けて発射
クリックした場所からボールを発射する
全方位に向けてランダム発射
発射の弾数を制限する
発射したPrefabを削除する
一度に複数のオブジェクトを発射
消えれば次のPrefabが発射可能