[Unity] UIのButtonを使ってTextのオン/オフを制御したい

実現したいこと

前提

Unityを使ってオブジェクトの頭上に名前を出しています。その名前をボタンを使ってオン/オフして制御したいと考えています。名前のスクリプトはPrefabで用意してあります。
しかし、実行するとAsset内にあるPrefabしか制御できずシーン内(ヒエラルキー)にあるPrefabはぴくりとも動きません。
エラーメッセージが出ないため、どこが不具合を起こしているのか全くわからない状態です。
構成はこのようになっています。

本体オブジェクト(OverHeadMsgCreater.cs):名前を頭上につけるためのオブジェクト↓

C#

1using UnityEngine;2using UnityEngine.UI;3 4public class OverHeadMsgCreater : MonoBehaviour 5{6 [SerializeField]7 RectTransform canvasRect;8 9 [SerializeField]10 OverHeadMsg overHeadMsgPrefab;11 12 OverHeadMsg overHeadMsg;13 14 bool isNameVisible = true; // 名前の表示状態を保持するフラグ15 16 void Start()17 {18 overHeadMsg = Instantiate(overHeadMsgPrefab, canvasRect);19 overHeadMsg.targetTran = transform;20 21 // ボタンのOnClickイベントにメソッドを追加22 Button toggleButton = FindObjectOfType<Button>(); // Buttonのインスタンスを見つける23 if (toggleButton != null)24 {25 toggleButton.onClick.AddListener(ToggleNameVisibility);26 }27 }28 29 // 名前の表示状態を切り替えるメソッド30 public void ToggleNameVisibility()31 {32 isNameVisible = !isNameVisible; // 表示状態を反転させる33 overHeadMsg.ShowName(isNameVisible); // OverHeadMsgのShowNameメソッドを呼び出して、表示状態を変更する34 }35 36 void Update()37 {38 39 }40}

Text UI(Legacy)(OverHeadMsg.cs):頭上に名前を表示するためのUI↓

C#

1using System;2using UnityEngine;3using UnityEngine.UI;4 5public class OverHeadMsg : MonoBehaviour 6{7 public Transform targetTran;8 public Vector3 offset; // テキストの表示位置を調整するためのオフセット9 10 void Update()11 {12 // ワールド座標からスクリーン座標に変換13 Vector3 screenPos = RectTransformUtility.WorldToScreenPoint(Camera.main, targetTran.position + Vector3.up + offset);14 15 // テキストの座標を更新16 transform.position = screenPos;17 }18 19 // 名前を表示するメソッド20 public void ShowName(bool show)21 {22 GetComponent<Text>().enabled = show;23 }24 25 internal void ShowMsg(string v)26 {27 throw new NotImplementedException();28 }29}

オン/オフ制御用のボタン(Button)(NameButton.cs):名前を出したり消したりするボタン↓

C#

1using UnityEngine;2using UnityEngine.UI;3 4public class NameButton : MonoBehaviour 5{6 public OverHeadMsg[] animals; // OverHeadMsgスクリプトへの参照を配列として管理7 8 // ButtonのOnClickイベントで呼び出す関数9 public void ToggleNameVisibility()10 {11 foreach (OverHeadMsg animal in animals)12 {13 animal.ShowName(!animal.GetComponent<Text>().enabled); // 各動物の名前表示をトグルする14 }15 }16}

試したこと

OverHeadMsgCreater.csにて、直接ボタンを探して名前の表示切り替えをしようとして挑戦したのですが上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

頭上に名前をつけるコードはこちらのサイトのコードを参考に書きました。
【Unity】オブジェクトの頭上に情報を表示する(応用)

コメントを投稿

0 コメント