yumeの日記: Unity制作 メデューサ・ゲーム #11 2
●テキスト描写(会話)シーンの続き
昨日の続き。流れを改めて。
・会話が開始する
・読み上げるテキストをTextWindowに渡す
・TextWindowは毎フレーム時間を計り、0.06秒に1文字ずつ表示していく
・ただし、「読み上げキー」を押した場合は、テキストをすべて表示する
・テキストがすべて表示されたら、入力を待機する。
・読み上げキーが入力されたら、次のテキストを受け取る。
肝心の受け取るテキストを用意しよう。CSVファイルを準備して、それをUnityに読み込ませる。
「Resources」という名前のフォルダをAssets内に用意すれば、それは特別にUnityが読み込むフォルダになるそうだ。
note @macgyverthinkのサンプルスクリプトを参考に書いていくが、
StirngReaderなるモノが登場した。これはUnityではなくSystem.IOのクラスのようだ。
公式を参照しよう。
そんで、仕組みとしては、大雑把に言えば
・csvファイルを読み込む
・csvの各行(改行コードまで)を一連のstringにする
・そのstringをさらに区切り文字(,)で区切り、stirng Arrayに変える。
ここで最終的に細切れになったString配列から、必要な要素(ここでは本文テキスト)を取り出し、テキストを表示するメソッドに渡せばよい。
csvは現在のところ:
ID,Text
0,調子どう?
1,まぁまぁかな。
0,そう。
という具合だ。IDは話者の名前、あるいは話者の顔画像ファイルを指定するような感じになるかな。
あるいはもっと列を増やして、
Name,Emotion,Text
メデューサ,laugh,どわっはっは
姉さま,none,何がおかしいの
という具合でもいいかも。
後は、表示するべきテキストラインをすべて表示したら、最終的にテキストボックスを非アクティブにする、という具合でうまく動いてくれた。
あと行内改行をどうするかが少し困る。簡単に調べた感じこのあたりが使えそう。もう遅いので明日やろう。
CSV (スコア:0)
カンマを使わないからいいかと思ってカンマを区切り文字にしていてもそのうち使いたくなる。
タブとかパイプ|とか文章としては使わない文字の方がいいし、
色指定や文字サイズ変更などの制御も入れたくなることを考えると区切り文字はきちんと検討した方が良い。
Re: (スコア:0)
カンマは英文メッセージを出そうとした瞬間死ねる。
HasFieldsEnclosedInQuotes=trueで改行もカンマも使えるけど"で囲うの面倒になるしね。
オススメしないけど、NULL区切りなんてのも。
今のテキストだと、IDの数字が誰か記憶しないといけないので、メンテで破綻するかと。
別のツールで生成するなら困らないけど。
新規登場人物とか、黒幕とかで名前の演出(???)するとか、顔をシルエットにするとかなら後者の方が便利そう。
気になったのが、顔画像のファイル名決定に一列目の名前を使う気なら止めた方がよさそう。
名無しは一人とは限らないし、ファイル名に使えない?が混入するリスクがあるし、多言語化時に訳者がファイル名が識別できないというトラブルを避けれる。