【Unity】鉛直投射シミュレーション

Unityでボールの鉛直投射シミュレーションを行う方法について入門者向けにまとめました。

鉛直投射シミュレーション

今回は鉛直投射シミュレーションを作成します。

実行結果

完成版プロジェクト:VerticalProjection.zip

ソースコード

サンプルプログラムのソースコードです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class BallShooter : MonoBehaviour {
    float yMax = 0; // DistanceTextオブジェクトへの参照

    // textオブジェクト参照用
    GameObject textObject;

    // Textコンポーネント参照用
    Text scoreText;

    void Start () {
        // 初速
        float INIT_SPEED = 20f;
        
        // Rigidbodyコンポーネントへの参照を取得
        Rigidbody rb = gameObject.GetComponent();

        // 初速を与える
        Vector3 vel = Vector3.zero;
        vel.y = INIT_SPEED;
        rb.velocity = vel;

        // Textオブジェクトの参照
        textObject = GameObject.Find("Text");

        // Textオブジェクトのコンポーネントを参照
        scoreText = textObject.GetComponent();
    }

    void FixedUpdate(){
        // 高さの最大値を更新
        if(gameObject.transform.position.y > yMax){
            yMax = gameObject.transform.position.y;
        }

        // 高さの最大値をTextオブジェクトに表示
        scoreText.text = "Max:" + yMax.ToString();
    }

    void Update () {
        
    }
}

Rigidbodyコンポーネントのvelocityメソッドでボールに初速度を与えています。

今回は初速度「20」を与えて鉛直投射すると最大高さは20.6となりました。
実際に手計算してると

(1) \begin{eqnarray*} h = \frac{v_0^2}{2g}=\frac{20\times 20}{2\times 9.8}=20.4 \end{eqnarray*}

となり、だいたい正しくシミュレーションできていることがわかります。

関連記事
参考 【Unity入門】ゲームプログラミング編【Unity入門】物理シミュレーション編【C#入門】サンプル集
関連記事