rai1580
@rai1580

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

UIを置き換えたい

Q&A

Closed

解決したいこと

unity初心者です。UIのTextを置き換えるスクリプトをつくってアタッチしたのですが反映されず困っています。
教本を参考にしています。
初めて質問するので不備があるかもしれませんがよろしくお願いします!

発生している問題・エラー

NullReferenceException: Object reference not set to an instance of an object
GameDirector.Update () (at Assets/GameDirector.cs:24)

スクリーンショット (1).png

スクリーンショット (2).png

該当するソースコード

        this.distance.GetComponent<Text>().text =
            "ゴールまで" + length.ToString("F2") + "m";

自分で試したこと

参照するデータがないみたいですが、なぜなのか見当がつきませんでした。

0

2Answer

Textコンポーネントを取得しようとしていますが、TextMeshProのTextコンポーネントはまた別のクラスだったような気がします。GetComponent< TextMeshProUGUI >でどうでしょうか。またusing TMProが必要になりそうです。ちなみにTextクラスはUnityEngine.UIのクラスですね。

また、GameObject.Findにこだわらないのであれば、[SerializeField] TextMeshProGUI distance;と定義すればGameDirectorがアタッチされたオブジェクトのインスペクタ(画面右側)でオブジェクトをセットできてわざわざGetComponentせずに済むかもしれません。

2Like

Comments

  1. @rai1580

    Questioner

    TextMeshProをTextにしたら解決できましたありがとうございました。
    補足についても調べて試してみようと思います!
    本当に助かりました!
  2. 解決したようで良かったです!

@rai1580
他のソースが読めないので定かではないですが、
16行目に
this.distance = GameObject.Find("Distance");
とありますが、"Distance"ではなく"distance"ではないでしょうか?(頭文字も小文字。14行目や15行目はすべて小文字で"car"、"flag"と記述があるため)
16行目の記述が間違っていることにより、distanceがnullとなり24行目のthis.distance.GetComponent<Text>()がnullに対してGetComponentというメソッドを呼んでNullReferenceExceptionが発生しているかもしれません。

1Like

Comments

  1. @rai1580

    Questioner

    なるほどと思い試してみましたが、大文字の方はUIの名前なのであっていそうです。
    その後updateのthis.flagが抜けていることに気づきましたが結果はかわりませんでした。
  2. 24行目の中でNullReferenceExceptionが起きる可能性がありそうなのが

    - 変数`distance`がnull
    - `this.distance.GetComponent<Text>()`の戻り値がnull
    - 変数`length`がnull

    以上だと思います。
    デバッグしてソースを追ってみるとわかるかもしれません。
  3. @rai1580

    Questioner

    - `this.distance.GetComponent<Text>()`の戻り値がnullだったみたいです。
    考えてくださりありがとうございました。
    助かりました!

Your answer might help someone💌