質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1167閲覧

【Unity】ログをゲーム画面にも出力したいのですが、シーン遷移するとログが出力できず困っています

kosho206

総合スコア41

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/08/01 02:10

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を取得する処理を書けば上手くいくかなと思ったのですが、変わらず同じエラーが出てうまくいきませんでした。
どのような処理を行えば、シーン遷移後にもログを出力できるようになるか教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2020/08/01 03:16

エラーメッセージにある通りです。 シーン遷移すると普通のGameObjectは削除される為、m_textUIが存在しないのでエラーになります。 「unity nullチェック」または「unity シーン遷移 オブジェクトを破壊しない」などで調べてください。
kosho206

2020/08/01 09:05

ありがとうございます。 DontDestroyOnLoadを使って、オブジェクトが破棄されないようにしたら解決できました。
guest

回答1

0

自己解決

DontDestroyOnLoad(gameObject)
を使ってシーン遷移時に対象のObjが破棄されないようにすることで解決しました。
今回破棄されないようにしたObjはUIなので、Canvasも同時に破棄されないようにする必要がありましたが、そのUI専用のCanvasを新たに作成することで対応することができました。

投稿2020/08/01 09:08

kosho206

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問