クリックでオブジェクトを置き、そのオブジェクトをクリックで飛ばせるように、スクリプトを作成しましょう。
今回の例では、Sphereをクリックでセット。
セットしたSphereをクリックで弾き飛ばせるようにします。
ボールの用意
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() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.tag == "Ball") { ballCheck = true; } } else { ballCheck = false; } if (Input.GetMouseButtonDown(0) && !ballCheck) { mousePosition = Input.mousePosition; mousePosition.z = 10.0f; Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition),Quaternion.identity); } } } |
プレハブのフィールドに、Sphereを入れます。
ゲームプレイしましょう。
クリックした位置に、ボールをセット。
セットしたボールをクリックすれば、発射できるようになります。