Unityでノベルゲームの基礎 テキストデータの読み込み スクリプト解説!
はおっ(0^∀^)ノ
渚です!
最近,月1で1本 ゲーム作れていないことに愕然としています。 ちょっと,イベントがあるやら,修士論文書かなくちゃだわ,仕事は普通にあるだわで 馬鹿みたいに忙しく,落ち着いた後は,燃え尽き症候群的なことになってしまい,何やってたか記憶がない・・・
ですが,ようやく落ち着きました!
ところで?「れお」さんというかたより 「はじめまして、学生でUnityを使ってゲームを製作している者です。 私もゲーム中の要素として、シナリオを実装したいと考えておりました。 いつかスクリプトの中身を解説された記事を投稿していただけることを期待しております。」 という,コメントが120日以上前にあったので(ぉぃ
本気で,気付かなかったんですorz ごめんなさいorz
スクリプトの解説をしたいと思います。
まぁ,今更書いても「れお」さんも自己解決してるだろうなとは思うのですが 気になる方がいらっしゃるなら,全力で答えるのが私のモットー
ちなみに,ちゃんとしたノベルゲー作るなら,以下のサイトはおすすめです!
ということで・・・!これが,テキストデータ読み込み部分のスクリプト!
/// <summary>
/// テキストデータの読み込み。
/// </summary>
/// <remarks>
/// テキストデータを読み込み、読み込んだテキストデータをステージデータに格納し、空白を削除する
/// </remarks>
void ReadTextData()
{
// TextAssetとして、Resourcesフォルダからテキストデータをロードする
stageTextAsset = Resources.Load(filePath) as TextAsset;
// 文字列を代入
char[] kugiri = { '\r', '\n' };
string [] data = stageTextAsset.text.Split(kugiri);
int Number = 1;
foreach(string str in data)
{
if(str != "")
{
if (str.Length > 1 && str.Substring(0, 2) == ">>")
{
List<string> slist = new List<string>();
stageData.Add(Number++, slist);
}
else
{
stageData[Number - 1].Add(str);
}
}
}
stageDataMax = stageData.Count;
//for (int i = 1; i < stageDataMax; i++)
// for (int j = 0; j < stageData[i].Count; j++)
// Debug.Log(i + ":" + j + ":" + stageData[i][j]);
}
たしか,どっかのサイトのスクリプトをお借りして,編集したものだと思うのですが 探したけれど,どこから引用したか,わかんなかったorz
ちなみに,準備したテキストデータは,こちらから
stageTextAssetは,TextAsset型です。 対応しているテキストファイルの拡張子は,以下のものらしい。 .txt .html .htm .xml .bytes .json .csv .yaml .fnt
細かいところは,以下で確認してね。 docs.unity3d.com
Resources.Loadは,Unityのプロジェクトに,Resourcesフォルダを作り,その中に入っているデータなら, 簡単に取得できるよっていう,魔法の呪文。逆に言うと,Resourcesフォルダではない場所にあるデータは, 取得するのが,正直面倒。。;できるんだよ?wwwとか,Systemを使うとか,ほかにも・・・
filePathには,string filePath = "Text/text"; こんな感じで,文字列が入ってます。 この場合だと,Resourcesフォルダの中に,Textフォルダがあって,text.txtファイルが入れてあるという感じです。
string data = stageTextAsset.text.Split(kugiri);は, Resources.Loadで取得した全文章を,string dataという配列に一括で入れます。 あとは,dataが,1行づつの配列になってるので,1行ごとに処理していく感じです。
stageDataは,private Dictionary<int, List
foreachの中の処理は,以下のような感じです。
1.strが空白じゃなければ。(普通はないはずだけれど,一応念のため)
2.str.Length > 1(1行の長さが,1文字以上で) かつ str.Substring(0, 2) == ">>"(1~2文字目が >> と同じ)ならば・・・
3.List
stageDataMaxは,int型で,文章の塊が最大いくつかを保存しておく。(使いどころは,文章の最後まで読み切ったときに把握できるように)
最後のコメントを解除すると,どういう文章が入っていたかわかるようになります。
ということで,まずはテキストデータを読み込むスクリプトを解説しました~。