オブジェクトのクリックした位置によって、飛んでいく方向を変えてみましょう。
Rayによってクリック位置を特定し、そこに向かって力を加えます。
クリックの場所しだいで、弾け飛ぶ方向は変わります。
関連記事:
クリックした場所からボールを発射する
空間の中でクリックした位置へ行く
静止中のオブジェクトをクリックで飛ばす
触れている相手に一定間隔で力を加える
ボールとターゲットの作成
平面とSphereを作成します。
Sphereをボールとして弾き飛ばします。
Sphereの位置を変え、リジッドボディを付けます。
物理マテリアルを作成しましょう。
プロジェクトビューから、物理マテリアルを選択。
New Physic Materialの数値を変更します。
New Physic Materialを、Sphereに追加します。
続いて、もう一つSphereを作成して、名前をTargetに変更。
位置とサイズを変更し、判別しやすいように赤色をつけます。
ゲームビューではこのように配置されています。
弾き飛ばすオブジェクト
次に、ボールを弾くためのオブジェクトを作成します。
Cubeを作成し、位置とサイズを変更。
リジッドボディを追加し、質量を10に。
Cubeには、Raycastを無効にするため、レイヤーをIgnore Raycastに変更します。
Plane(平面)にもRaycastが当たらないように、レイヤーをIgnore Raycastにしましょう。
Cubeを透明にします。
マテリアルを作成して、名前をToumeiに変更。
Rendering ModeをFadeに変更し、Aの値を0にします。
ToumeiマテリアルをCubeに追加します。
ゲームビューではこのように見えています。
弾き飛ばすスクリプト
力を加えるために、Cubeを弾き出すスクリプトを作成します。
BaseShot.csを作成し、Cubeに追加しましょう。
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 BaseShot : MonoBehaviour { private float power; public Rigidbody rb; public GameObject target; public Vector3 targetPos; private Vector3 pos; void Start() { power = 30; } public void KickStart() { transform.LookAt(target.transform); rb = GetComponent<Rigidbody>(); rb.velocity = transform.forward.normalized * power; } } |
ターゲットのフィールドに、Targetオブジェクトを入れます。
クリックで標的を動かすスクリプト
Cubeを発射するための狙いとして、Targetを動かすスクリプトを作成します。
PutTarget.csを作成し、Targetに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PutTarget : MonoBehaviour { public GameObject cube; void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)) { transform.position = new Vector3 (hit.point.x, hit.point.y, hit.point.z); cube.GetComponent<BaseShot>().KickStart(); } } } } |
Targetを選択し、キューブのフィールドの中に、Cubeオブジェクトを入れます。
ゲームプレイしてみましょう。
クリックでTargetが置かれ、そこに向かってCubeが弾き飛ばします。
最後に、Targetを透明にしましょう。
もう一度プレイしてみましょう。
クリックした場所によって、飛んでいく方向が変わりました。
Raycastによる標的と、そこに向けた力の加え方によって、ボールの飛んでいく方向が決まります。
サッカーのPK合戦のようなゲームで使えそうな仕組みですね。
関連記事:
クリックした場所からボールを発射する
空間の中でクリックした位置へ行く
静止中のオブジェクトをクリックで飛ばす
触れている相手に一定間隔で力を加える