プレーヤーが一定範囲に侵入すれば、弾が飛んでくるように、スクリプトを作成してみましょう。
今回の例では、キー操作でCubeを動かし、ある範囲に入ると、ボールが飛んでくるようにします。
特定の範囲に侵入すればボールが飛んでくる
ボールが飛んでくる位置を作ります。
空のオブジェクトを作成して、Zを10に設定。
Sphereコライダーを作成し、トリガーにするにチェック。
半径を8にします。
シーンビューではこのように見えています。
ボールを作成します。
Sphereを作成して、リジッドボディを追加。
Sphereをプレハブにします。
Sphereの元データは削除しておきます。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { [SerializeField] GameObject player; [SerializeField] GameObject ball; private float ballSpeed = 30.0f; private float time = 1.0f; public bool invaded; void OnTriggerStay(Collider other) { if (other.gameObject.name == "Cube" ) { invaded = true; } } void OnTriggerExit(Collider other) { if (other.gameObject.name == "Cube" ) { invaded = false; } } void Update() { transform.LookAt(player.transform); time -= Time.deltaTime; if(invaded) { if(time <= 0 ) { ShotStart(); time = 1.0f; } } } void ShotStart() { GameObject shotObj = Instantiate(ball, transform.position, Quaternion.identity); shotObj.GetComponent<Rigidbody>().velocity = transform.forward * ballSpeed; } } |
プレーヤーとして、Cubeを作成しましょう。
リジッドボディを追加して、isKinematicにチェックを入れます。
GameObjectを選択し、PlayerのフィールドにCubeを入れ、BallのフィールドにSphereを入れます。
プレーヤー操作のプログラムを作成しましょう。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { float speed = 3.0f; void Update() { if (Input.GetKey (KeyCode.UpArrow)) { transform.position += transform.forward * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.DownArrow)) { transform.position -= transform.forward * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.RightArrow)) { transform.position += transform.right * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.LeftArrow)) { transform.position -= transform.right * speed * Time.deltaTime; } } } |
ゲームプレイして、十字キーでCubeを動かしてみましょう。
Sphereコライダーの範囲に入れば、ボールが飛んできます。
範囲から出れば、ボール発射は停まります。