ボールを発射して、飛んだ距離を測定できるプログラムを作ってみましょう。
発射にはRaycastを使用し、クリックのタイミングと、ボールの落下位置(Y座標0)との距離を算出。
コンソールに飛距離を表示します。
関連記事:
ジャンプした距離を表示する
一定の距離に達したところで削除する
X軸だけの移動量をfloat型で取得
飛距離を測定するスクリプト
空のオブジェクトを作成します。
Sphereを作成し、リジッドボディを追加します。
BallDistance.csを作成し、Sphereに追加します。
BallDistance.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallDistance : MonoBehaviour { private float startPos; private float endPos; private float distance; public void StartSet() { startPos = this.transform.position.z; } void Update() { if (transform.position.y <= 0.0f) { Destroy(gameObject); endPos = this.transform.position.z; distance = endPos - startPos; Debug.Log(distance); } } } |
Sphereをプロジェクトビューにドラッグ&ドロップして、Prefabデータにします。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject ball; void Update() { if(Input.GetMouseButtonDown(0)) { GameObject obj = GameObject.Instantiate (ball)as GameObject; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 dir = ray.direction; obj.GetComponent<Rigidbody>().AddForce(dir * 1000); ball.GetComponent<BallDistance>().StartSet(); } } } |
GameObjectを選択しすると、プレハブのフィールドが出来ています。
ここに、Sphereのプレハブを入れます。
ゲームプレイしてみましょう。
上の方にむかって、マウスクリックして発射。
Y座標0のところでボールが消え、左下のコンソールに飛距離が表示されます。