発射したオブジェクトの滞空時間を算出できるように、スクリプトを作ってみましょう。
クリックのたびに、Sphereのプレハブを発射
発射されてからタイムを計測しはじめて、着地した順にタイムを停止して、コンソールに表示します。
関連記事:
発射したボールの飛距離を算出する
ジャンプした距離を表示する
発射から着地までのタイムを測定
Sphereを作成して、リジッドボディを追加します。
FlightTime.csを作成し、Sphereに追加します。
FlightTime.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FlightTime : MonoBehaviour { private float force; private float time; private bool isGround; Rigidbody rb; void Start() { force = 10; time = 0; isGround = false; rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, force, ForceMode.Impulse); } void Update() { if(!isGround) { time += Time.deltaTime; } } void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Plane" ) { isGround = true; Debug.Log(time); } } } |
Sphereをプロジェクトビューにドラッグ&ドロップして、プレハブ化します。
Sphereの元データは削除します。
発射元と床を作成
Plane(平面)を作成し、位置とサイズを変えます。
ゲームビューではこのように見えています。
GameObject(空のオブジェクト)を作成します。
BallShot.csを作成し、GameObjectに追加します。
BallShot.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject ball; private Vector3 mousePosition; void Update() { if (Input.GetMouseButtonDown(0)) { mousePosition = Input.mousePosition; mousePosition.z = 10.0f; Instantiate(ball, Camera.main.ScreenToWorldPoint(mousePosition),Quaternion.identity); } } } |
Ballのフィールドに、Sphereのプレハブを入れます。
ゲームプレイしてみましょう。
クリックしてボール発射。
着地した順に、その滞空時間がコンソールに表示されます。