https://www.urablog.xyz/entry/2017/04/25/195351
↑こちらのサイトを参考にして、ゲーム画面にMessageLogを出力しようとしています。
サイトをそのまま真似すると、上手くMessageLogをゲーム画面に出せるようになりました。
そのあと、ゲーム内でシーン遷移したあとでもこの機能が使えるようにしたいのですが、この部分でつまづいてしまいました。
ゲーム画面にログを出力するコードは、以下のコードを使っています。
using UnityEngine; using UnityEngine.UI; public class LogMenu : MonoBehaviour { private Text m_textUI; private void Start() { //ここでTextUiのObjを取得したい m_textUI = GetComponent<Text>(); } private void Awake() { //ログメッセージが出力された時に呼ばれる関数のデリゲート Application.logMessageReceived += OnLogMessage; } private void OnDestroy() { Application.logMessageReceived += OnLogMessage; } private void OnLogMessage(string i_logText, string i_stackTrace, LogType i_type) { if (string.IsNullOrEmpty(i_logText)) { return; } m_textUI.text += i_logText + System.Environment.NewLine; } private void Update() { if(m_textUI != null) { m_textUI = GetComponent<Text>(); } } } // class LogMenu
上手く行かない事を具体的にいうと、ゲーム内でシーン遷移すると、
「MissingReferenceException. Text」型のオブジェクトは破棄されましたが、まだアクセスしようとしています。
スクリプトは、オブジェクトがNULLかどうかをチェックするか、オブジェクトを破棄しないようにしなければなりません。」
というエラーが出てしまい、シーン遷移後はログがゲーム画面に表示されません。
最初のシーンと遷移後のシーンのどちらにも、ログを出力するための同じUIがあります。
Start関数内にTextを取得する処理を書けば上手くいくかなと思ったのですが、変わらず同じエラーが出てうまくいきませんでした。
どのような処理を行えば、シーン遷移後にもログを出力できるようになるか教えて下さい。
回答1件
あなたの回答
tips
プレビュー