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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

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

Q&A

解決済

2回答

1644閲覧

UnityでDebug.Logでの表示が途中から消える

silver_night

総合スコア34

Unity

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

0グッド

0クリップ

投稿2021/06/01 05:37

引数で送られてきた文字列を、Debug.Logでコンソールに表示したい

Unityで、ゲーム内のメッセージ枠にメッセージを表示する関数を作っています。
メッセージを記号でいくつかにわけ、1つめのメッセージを表示する関数と、2つめ以降のメッセージを表示する関数(Display_secondMessage)にわけて送るようにしてあります。

さらに、一定条件を満たすとメッセージの後'.'をコンソールに表示する関数(DisplayPeriod_ifAnderBarisNextHead)を別に作り、2つめ以降のメッセージを表示する関数内で呼び出すようにしました。(本当はメッセージの後に点滅表示させたいのですが、まだそこまでいっていません。)
この別関数DisplayPeriod_ifAnderBarisNextHeadの中で問題が発生しました。

ゲームを再生しても'.'がコンソールに表示されないので、引数で送られてきたメッセージを確認しようとDebug.Logしたところ、何も表示されません。関数が呼ばれていないのかと思い、同じ場所に別のメソッド「メッセージ枠を消す」を書いたところ実行されたので、動いていないわけではないようです。

Debug.Log自体が表示されないようになっているのかと思い、今度は呼び出し側の関数でDebug.Log("called")と書いてみたところ、関数の途中まではコンソールに"called"と表示されるのですが、ある場所(ソースコードをご覧ください)から表示がおかしく(コンソールに"called"と表示されるが、ログに残らなく)なり、それ以降の場所ではコンソールに全く表示されなくなります。

同日の夕方まではきちんと表示されていたと思うのですが、夜にコードをいじった後表示がおかしくなりました。何が起きているのか把握が出来ず、困っております。
お力添えください。

発生している問題・エラーメッセージ

なし。

該当のソースコード

c#

1 //2つめ以降のメッセージを表示する関数(for "SplitMessage") ←←←←←←←SplitMessageという別の関数があり、そこで呼び出されています。 2 IEnumerator Display_secondMessage(int messageQuantity, string[] message_split, string message, string[] splitByFunc, int funcQuantity) 3 { 4 //messageQuantity == message_split[]の要素数3 5 //message_split == "SM" + "僕は秋川まさし。" + "SM" + "探偵だ。" 6 //message == "[SM]僕は秋川まさし。[SM]_探偵だ。" 7 //splitByFunc == "SM" + "僕は秋川まさし。" + "SM" + "_探偵だ。" 8 //funcQuantity == エフェクト関数を呼び出す文字"SM"の数2 9 10 string message_old = ""; 11 string message_linked = ""; 12 13 for (int i = 1; i < messageQuantity; i++) 14 { 15 //表示の途中でタップされていたら終了 16 if (flag_allMessageDisplay == true) yield break; 17 18 //初めの文字列を取得 19 if (i == 1) message_old = message_split[0]; 20 else message_old = message_linked; 21 22 //message_oldからエフェクト関数文字を抜く 23 message_old = message_old.Replace("SM",""); 24 25 //初めと次の文字列を連結 26 message_linked = message_old + message_split[i]; 27 28 29 //message_splitがエフェクト関数文字だったら 30 if (message_split[i] == "SM") 31 { 32 Debug.Log("called"); //←←←←←←←←テスト。コンソールに"called"と出るが、履歴(ログ)に残らない。 33 34 //エフェクト関数呼び出し(別スクリプト「Efect」のShakeMessage関数を呼び出し) 35 yield return StartCoroutine(efect.ShakeMessage()); 36 37 Debug.Log("called"); //←←←←←←←←テスト。コンソールに何も表示されない。 38 39 //'_'の前だったら'.'を表示 40 DisplayPeriod_ifAnderBarisNextHead(message, i); 41 42 continue; //以下を抜かして次のmessage_splitへ。 43 } 44 45 46 //フラグflag_tappedがtrueをfalseに 47 flag_tapped = false; 48 49 //初めの文字列をあらかじめ表示 50 text_message.GetComponent<Text>().text = message_old; 51 52 //次の文字列を表示(メッセージ枠に文字を一文字ずつ表示する関数を呼び出し) 53 yield return StartCoroutine(DisplayMessage_oneCharacter(message_old.Length, message_linked.Length, message_linked, message, splitByFunc, funcQuantity)); 54 } 55 } 56

c#

1 //次の文字列の初めが'_'だったら'.'を表示する関数(for "Display_secondMessage") 2 private void DisplayPeriod_ifAnderBarisNextHead(string message_all ,int indexOfSM_0) 3 { 4 //先頭が"[SM]"なら削除 5 if (message_all.IndexOf("SM") == 1) 6 message_all.Remove(0, 4); 7 8 //'['と']'で分割 9 string[] message_split = message_all.Split('[',']'); 10 11 //'_'を含む文字列を調べる 12 for(int i = 0; i< message_split.Length; i++) 13 { 14 Debug.Log(message_split[i]); //←←←←←←←←←←←←←←←"ある場所"ここです。これを表示したい。 15 16 //文字列中に'_'が含まれなければ次の文字列を調べる 17 if (message_split[i].Contains("_") == false) continue; 18 19 //文字列中の'_'のインデックスを取得 20 int index = message_split[i].IndexOf('_'); 21 //先頭でなければ次の文字列を調べる 22 if (index != 0) continue; 23 24 //'_'が先頭の文字列の直前の"SM"のインデックスを取得 25 int indexOfSM_1 = i -1; 26 27 //Display_secondMessage関数の"SM"と合致すれば,'.'を表示 28 //以下、どちらも表示されない。 29 if (indexOfSM_0 == indexOfSM_1) Debug.Log("."); 30 else 31 { 32 Debug.Log("indexOfSM_funcSecond = " + indexOfSM_0); 33 Debug.Log("indexOfSM_thisFunc = " + indexOfSM_1); 34 } 35 } 36 } 37

試したこと

Googleで検索してみたのですが、似たような症状はありませんでした。

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

Unity.2018.3.1f1
VisualStudio 2017 community

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しました。
DisplayPeriod_ifAnderBarisNextHead関数の中のDebug.Log(message_split[i]);が原因でした。

message_split[]の中に空欄の文字列""が入っていて、それを表示しようとしていたのがまずかったようです。""を削除したところ、全てが正常に表示され、ログも残りました。

文字列""をDebug.Logで表示しようとするとバグが発生するんですね。
基本的なことを知らず、失礼しました。

投稿2021/06/02 05:43

silver_night

総合スコア34

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

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

0

急にログが出なくなったということでまず思い浮かんだのは、同じログがまとめられたということです。
もしCollpaseをONにしている場合、OFFにしてみてください。
"unity ログ まとめる" などで検索すると見つかると思います。

投稿2021/06/01 10:04

flow_man

総合スコア19

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

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

silver_night

2021/06/01 10:42

回答ありがとうございます。 見てみたのですが、ログの横に数字ボタンは出ておらず、まとめられてはいないようです。 同じログも、ひとつずつきちんと表示されています。 ログが表示されない場所では、全くひとつも表示されないため、「unityの下の方をクリックしてログを表示する」こともできない状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問