こちらに向かって飛んでくるオブジェクトを、クリックで弾き返せるように、スクリプトを作成してみましょう。
今回の例では、1秒おきに飛んでくるボールをクリックすれば、前方に跳ね返すしくみを作ります。
クリックではね返す
Sphereを作成し、リジッドボディを追加。
Ballという名前でタグをつけます。
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 49 |
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Random = UnityEngine.Random; public class BallShot : MonoBehaviour { [SerializeField] GameObject prefab; [SerializeField] GameObject target; private float time; private int xPos; private int yPos; void Start() { time = 1.0f; } void Update() { time -= Time.deltaTime; if (time < 0) { xPos = Random.Range(-5, 6); yPos = Random.Range(5, 9); GameObject ball = GameObject.Instantiate(prefab,new Vector3(xPos, yPos, 20),Quaternion.identity)as GameObject; ball.GetComponent<Rigidbody>().AddForce(transform.forward * -1000); time = 1.0f; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out hit)) { if(hit.collider.gameObject.tag == "Ball") { target = hit.collider.gameObject; target.GetComponent<Rigidbody>().velocity = Vector3.zero; target.GetComponent<Rigidbody>().AddForce(transform.forward * 1000); } } } } } |
プレハブのフィールドに、Sphereを入れます。
ゲームプレイしましょう。
1秒おきにボールが飛んできて、これをクリックすると、前に弾き返すことができます。