前提
現在Unityにて2Dノベルアクションゲームを作成中の初学者です。
外部から読み込んだテキストファイルからList<string>型の配列に1行ずつ格納し、行頭に記載したフラグを用いてタップ待ちや画像の切り替え、テキストの表示などを制御したいと思っております。
今回switch文を使ったフラグの判定の際に、1ヵ所だけcaseを通り越してdefaultに向かってしまい、デバッグを遂行することができなかったため、皆さんの知恵をお借りしたいと思い質問させていただきます。
問題の箇所
その他機能実装していますが、問題が起こっている箇所は以下のコードです。
csharp
1using UnityEngine; 2using System.Collections.Generic; 3using System.Linq; 4 5public class TalkBase : MonoBehaviour 6{ 7 // アタッチしているテキストアセットは後述します 8 [SerializeField] private TextAsset textAsset; 9 private List<string> textList; 10 11 private void Start() 12 { 13 textList = LoadText(); 14 15 foreach(string text in textList) 16 { 17 JudgeText(text); 18 } 19 } 20 21 private List<string> LoadText() 22 { 23 List<string> textList = textAsset.text.Split('\n').ToList(); 24 return textList; 25 } 26 27 private void JudgeText(string text) 28 { 29 switch(text.Split('-')[0]) 30 { 31 case "tk": // キャラクターのセリフ 32 // 処理 33 break; 34 35 case "ds": // 説明等平文 36 // 処理 37 break; 38 39 case "bg": // 背景の変更 40 // 処理 41 break; 42 43 case "bd": // キャラクターの身体画像変更 44 // 処理 45 break; 46 47 case "fc": // キャラクターの表情画像変更 48 // 処理 49 break; 50 51 case "se": // SEの挿入 52 // 処理 53 break; 54 55 case "tp": // タップ待ち 56 // 処理 57 break; 58 59 case "end": // メッセージモード終了 60 // 処理 61 break; 62 63 default: 64 Debug.Log(string.Format("記載方法エラー : {0}", text)); 65 break; 66 } 67 } 68}
アタッチしたテキストアセットは以下のものです。
PlaneText
1tk-chara1-hogehoge 2tp 3se-kasakasa 4ds-(カサカサ) 5tp 6bg-shinbunshi 7ds-hugahuga 8ds-hogehuga 9tp 10end
上記の2つを動かすことで、UnityのDebug.Logに以下の出力がされます。
PlaneText
1記載方法エラー : tp 2UnityEngine.Debug:Log(Object) 3TalkBase:JudgeText(String) (at Assets/Scripts/TalkBase.cs:63) 4TalkBase:Start() (at Assets/Scripts/TalkBase.cs:16) 5 6記載方法エラー : tp 7UnityEngine.Debug:Log(Object) 8TalkBase:JudgeText(String) (at Assets/Scripts/TalkBase.cs:63) 9TalkBase:Start() (at Assets/Scripts/TalkBase.cs:16) 10 11記載方法エラー : tp 12UnityEngine.Debug:Log(Object) 13TalkBase:JudgeText(String) (at Assets/Scripts/TalkBase.cs:63) 14TalkBase:Start() (at Assets/Scripts/TalkBase.cs:16)
試したこと
Splitでハイフンを指定しているので、ハイフンが含まれていない「tp」と「end」が正常な処理を行っていないのではないかと思ったのですが、「tp」はダメですが「end」は通るのが不明でした。
Splitの処理の再認識のために以下のコードを実行しております。
csharp
1Debug.Log("tp".Split('-')[0]); 2Debug.Log("end".Split('-')[0]);
こちらは正常にDebug.Logに出力されているので、Splitの挙動は誤っていないです。
また、Switch文の「// 処理」の部分に全て以下のコードを実行しました。
charp
1Debug.Log(text.Split('-')[0]);
こちらを実行したところ、tp以外の全てのケースは出力されたのですが、tpのみdefaultに記載したDebug.Logが実行されてしまうことからswitch文の中身にそもそも通ってないことがわかりました。
アタッチしたテキストアセットに不備があると思いendとtpの後ろにスペースがついていないかなども確認しましたが、スペースなどの問題はなかったです。
自分の考えうるケースが八方塞がりになってしまったため、こちらにて質問させていただきます。
どうかよろしくお願い致します。
環境
- Windows 10 64bit
- Unity 2018.2.11f1 Personal
回答5件
あなたの回答
tips
プレビュー