オブジェクトが指定の位置に存在すれば、次のオブジェクトをセットできなくする仕組みを作りましょう。
今回の例では、スペースキーを押せばボールを補充。クリックすれば発射。
すでにボールが存在すれば、次のボールはセットできません。
ボールの用意
Sphereを作成し、Ballタグを追加。
リジッドボディを追加し、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 |
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>(); } void OnMouseDown() { rb.isKinematic = false; rb.AddForce(0, 0, force, ForceMode.Impulse); } } |
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallSpawn : MonoBehaviour { public GameObject prefab; private Vector3 mousePosition; public bool ballCheck; void Update() { if (Input.GetKeyDown(KeyCode.Space) && !ballCheck) { Instantiate(prefab, this.transform.position, Quaternion.identity); } } void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Ball") { ballCheck = true; } } void OnTriggerExit(Collider other) { if (other.gameObject.tag == "Ball") { ballCheck = false; } } } |
プレハブのフィールドに、Sphereを入れます。
ゲームプレイしましょう。
スペースキーを押せばボールセット。
ボールをクリックすると発射します。
すでにボールがセットされている場合は、それ以上ボールを補充することはできません。