-UnityでRPGを作りたい...!!
そんな管理人の備忘録
前回【ゲーム開発】外部テキストを表示してみる【unity】にて外部テキストを表示してみました。
今回は、外部テキストの構文解析をしてみましょう。
例として、ワンピースのワンシーンの会話を表示してみましょう。世界最強の男"白ひげ"が率いる白ひげ海賊団。その二番隊長エースが、敵対する海軍大将"赤犬"と対峙するシーンです。白ひげを嘲笑する赤犬の挑発に乗ること無く、エースが白ひげの最期の命令を全うします。
テキストは「人物:台詞;」の構成になっています。このテキストを人物と台詞に分けることを目標としましょう。
今回行う処理
・テキストの格納
・「;」でテキストを区切る(人物:台詞のセットをつくる)
・「:」でテキストを区切る(人物と台詞を分ける)
・台詞を表示してみよう
C#ではstring[]の宣言時に配列の長さを決定する必要があります。そのため、どれだけ人物や台詞の数があるか分からない場合、配列の長さを決定できず困ります。そこで、ArrayListを利用します。このとき注意することは、ArrayListにはstring型ではなくobject型として格納されるので、GUITextに代入するときはstring型にキャストする必要があるということです。
それではスクリプト(抜粋)を見てみましょう!
1.テキストの格納
TextAsset txt = Resources .Load("test") as TextAsset;
これは前回もやりましたね、test.txtからテキストを読み込んでいます。
2.「;」でテキストを区切る(人物:台詞のセットをつくる)
private string[] txtArray;
txtArray = txt.text.Replace (";\n", ";").Split (";" [0]);
読み込んだテキストには改行が入っているため、「;改行」のセットを「;」に変更してから「;」で区切ります。上の例のテキストでは、txtArrayに13個の要素が含まれます。
3.「:」でテキストを区切る(人物と台詞を分ける)
private ArrayList message = new ArrayList();
private ArrayList character = new ArrayList();
string[] txtCharaMessage = new string[2];
for(int i = 0; i < txtArray.Length; i++){
txtCharaMessage = txtArray[i].Split(":"[0]);
character.Add(txtCharaMessage[0]);
message.Add(txtCharaMessage[1]);
}
txtArrayの一つの要素には「人物:台詞」が格納されています。この要素を「人物」と「台詞」に分けて一度txtCharaMessage[2]に格納して、人物を格納するArrayList characterと、台詞を格納するArrayList messageに振り分けます。
4.台詞を表示してみよう
private void ArrayText(ArrayList array){
guiText.text = (string)array[messageNum];
messageNum++;
if(messageNum >= array.Count)
messageNum = 0;
}
台詞を表示する関数ArrayTextを作成しました。引数にArrayListをとり、ArrayText関数が呼び出される度にguiTextのtextを変更しています。これで引数にmessageをとれば上でmessageにいれた台詞が呼び出されます。
できた!
今回は「人物」と「台詞」の二種類を分けましたが、応用して「アクション」とか「フラグ」とか分ければゲームイベントが作れそうですね!
次はメッセージに対応してキャラクターを表示させたいな(ヽ'ん`)
------------------------------------------------
個人ブログもよろしく!
動物園てくの
喫茶店てくの
漫画喫茶てくの