[Unity] 速度表示の方法 [uGUI]

この記事は約5分で読めます。

高校の物理教材をUnityで作りたい!
というときにはやはり

  • グラフを運動と同時に表示したい
  • 位置、速度、加速度などの値を表示したい

と思います。

グラフを表示させる方法については以下の記事にまとめました。

今回は、速度を運動と同時に表示する方法について、勉強したことをまとめます。

uGUIを使ってテキストを表示させる

まず、運動させる物体として、3D Object→Sphereを作成しておきます。

次に、今回の本題であるテキストを表示するために、
Hierarchy → UI → Text を作成します。

この状態で再生すると、もうすでに「New Text」の文字が!!いいぞ。

このテキストをスクリプトから操作するために、Hierarchyから空のオブジェクトを作成し、「VelocityManeger」とリネームしておきます。

Project内のAssetを右クリックし、Create → C#Script を作成。VelocityManagerと名付けました。先程作った空のオブジェクトにアタッチしておきます。

コードです。

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

using UnityEngine.UI; //追加

public class VelocityManager : MonoBehaviour
{
    public GameObject textObject ;


    void Start()
    {
        
    }

   
    void Update()
    {   //Textオブジェクトからコンポーネントを取得する
        Text textObject_text = textObject.GetComponent<Text>();
        //表示する内容を指定する
        textObject_text.text = "こんにちは";
    }
}

using UnityEngine.UI; を入力するのを忘れないように注意してください!

単純に、”こんにちは”を表示するコードです。

編集画面には変化はありませんが、再生すると無事表示されました!

再生時に見やすくしてみた

これは後から好きなように変更可能なので、とばしてもらっても大丈夫です。

テキストが見づらいので、サイズを変えてみようと思って、

FontSizeを変更しようと思ったら、30くらいを超えたあたりから文字が消えてしまう

調べてみたら、ここのサイトに解決方法がのっていました。

Paragraph内の「Horizontal Overflow」と「Vertical Overflow」を「Overflow」に変更することで、サイズを自由に変更できるようになりました。

適当にサイズ、色、フォント、表示位置などを変更してみました。

また、MainCameraオブジェクトのCameraコンポーネントにあるClear Flagsを「Skybox」から「Solid Color」に変更し、色を紺色っぽくしました。

これで再生してみると、こんな感じです。

見やすくなったかどうかは人によりますね笑

Rigidbodyを使って物体を加速させる

SphereのコンポーネントにRigidbodyを追加し、Use Gravityのチェックを外しておきます。

Sphereオブジェクトの「Add Component」から「New Script」を追加。VelocityChangeにリネームしました。以下のコードを入力します。

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

public class VelocityChange : MonoBehaviour
{
    Rigidbody rb;

    void Awake()
    {
        rb = this.GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        Vector3 f = new Vector3(1f, 0f,0f );    // x軸方向に力を定義
        rb.AddForce(f);//力を加える
    }
}

速度変化を表示させる

VelocityManagerスクリプトから、物体の速度情報を取得して、それを表示していきます。以下のようにコードを変更しました。

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

using UnityEngine.UI; //追加

public class VelocityManager : MonoBehaviour
{
    public GameObject textObject ;

    public GameObject sphere;
    Rigidbody rb ;
  
    void Awake()
    {
        rb = sphere.GetComponent<Rigidbody>() ;
    }
 
    void Update()
    {
        //Textオブジェクトからコンポーネントを取得する
        Text textObject_text = textObject.GetComponent<Text>();

        //sphereオブジェクトから速さ(速度の大きさ)を取得する
        float vel = rb.velocity.magnitude;
        //float型を文字列に変更する
        string vel_String = vel.ToString();
        //表示する内容を指定する
        textObject_text.text = "v="+vel_String;
    }
}

VelocityManagerのスクリプトコンポーネント内にSphereオブジェクトをアタッチします。

このように表示されました。

勉強させてもらってます!楽しい!

コメント

タイトルとURLをコピーしました