引数で送られてきた文字列を、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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。