えんぴつのブログ -2ページ目

えんぴつのブログ

プログラミングを書いたり、ゲームをしたり
夢は安定した老後

 -UnityでRPGを作りたい...!!

 そんな管理人の備忘録


 前回【ゲーム開発】外部テキストを表示してみる【unity】にて外部テキストを表示してみました。

 今回は、外部テキストの構文解析をしてみましょう。

text3
 例として、ワンピースのワンシーンの会話を表示してみましょう。世界最強の男"白ひげ"が率いる白ひげ海賊団。その二番隊長エースが、敵対する海軍大将"赤犬"と対峙するシーンです。白ひげを嘲笑する赤犬の挑発に乗ること無く、エースが白ひげの最期の命令を全うします。

text4
 テキストは「人物:台詞;」の構成になっています。このテキストを人物と台詞に分けることを目標としましょう。

 今回行う処理
 ・テキストの格納
 ・「;」でテキストを区切る(人物:台詞のセットをつくる)
 ・「:」でテキストを区切る(人物と台詞を分ける)
 ・台詞を表示してみよう

 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にいれた台詞が呼び出されます。

text5
 できた!

 今回は「人物」と「台詞」の二種類を分けましたが、応用して「アクション」とか「フラグ」とか分ければゲームイベントが作れそうですね!

 次はメッセージに対応してキャラクターを表示させたいな(ヽ'ん`)

 ------------------------------------------------
個人ブログもよろしく!
 動物園てくの
 喫茶店てくの
 漫画喫茶てくの