Unityには、目に見えない光(レーザービーム)を飛ばして、シーン上の位置方向の情報を取得できるRayが用意されています。
Rayを使って、一定の位置からボールを発射できるしくみを、作ってみましょう。
関連記事:
360°全方位に向けて発射
クリックした位置にオブジェクトを生成(Ray)
キャラクターコントローラーに発射機能
ドラッグした方向へ飛ばす
弾が消えなければ次を撃てなくする
Rayの方向情報
Rayの方向情報を、DebugLogで表示してみましょう。
空のオブジェクトを作成します。
GameObject(空のオブジェクト)に、BallShot.csを作成して追加します。
BallShot.csを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { void Update() { if(Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 dir = ray.direction; Debug.Log(dir); } } } |
プレイして、ゲームビューをクリックしてみましょう。
DebugLogで方向情報の数値が表示されます。
ボール発射のスクリプト
ScreenPointToRayを使って、ボールを発射してみます。
Sphereオブジェクトを作成して、マテリアルカラーを付けます。
Sphereの位置を決めます。この位置がボールの発射位置に影響します。
Sphereをプレハブ化しましょう。
Sphereの元データは削除しておきます。
Sphereのプレハブデータに、リジッドボディを追加します。
BallShot.csをもう一度、編集しましょう。
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 BallShot : MonoBehaviour { public GameObject prefab; void Update() { if(Input.GetMouseButtonDown(0)) { GameObject ball = GameObject.Instantiate (prefab)as GameObject; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 dir = ray.direction; ball.GetComponent<Rigidbody>().AddForce(dir * 2000); } } } |
GameObjectのインスペクターを確認します。
プレハブのフィールドが出来ているので、ここにSphereのプレハブデータを入れます。
ゲームプレイして、動きを確認しましょう。
関連記事:
360°全方位に向けて発射
クリックした位置にオブジェクトを生成(Ray)
キャラクターコントローラーに発射機能
ドラッグした方向へ飛ばす
弾が消えなければ次を撃てなくする