mayonage-koboの日記

我ら真夜中ゲーム工房の進捗と、ゲーム開発のメモを残しておくブログ

Grow 会話ウィンドウを作る(2014/11/12)

hisojiです。サークルに真夜中という文字が入るくらいなんで、良い子は寝てる真夜中に更新しようと思います。ごめんなさい遅れただけです。

いつも通りにGrowを制作していきます。
今日はアクション部分の制作と会話部分の制作で分業しました。他方では岩をぶん投げたりして楽しそうですが、今回は自分がやった会話の方を。以前の記事で作ったやつに色々足します。

やった事

テキストファイルのロード

テキストファイル毎にロードして表示する機能を付けました。といっても、Resource.LoadでTextAssetとして再代入するだけです。
テキストファイルは今の所Assets/Resources/Text内に全て置いてあります。

TextAsset tasset;
...
public void loadText(string path){
...
tasset = (TextAsset)Resources.Load(path);
if(tasset == null){
	Debug.LogError("cannot load text!");
}
...
}
改行の追加

文章内で改行を入れるための機能を付けます。
改行なんでテキストファイルに'\n'を入れてみたのですが、これだとそのまま表示されてしまうみたいです。
なので、プログラム内で、テキストファイル内のある文字列を'\n'へと置き換える事にします。
テキストファイルをこのようにします。

こうやって<br>改行すれば<br>便利な時がある。

というわけで、"<br>"を"\n"へと置き換えるようにします。
幸い、C#のstring.Replaceという文字列を置き換える関数がそのまま使えます。

string s = texts[textOffset].Replace("<br>","\n");

こうすることで、改行されて表示されるようになりました。
f:id:mayonage-kobo:20141113005405p:plain
たぶん。

改行じゃなくて他の機能を入れる際も使えそうですね。

イベントフラグ追加

キャラが特定のオブジェクトに近づいたら会話ウィンドウが出るようにします。
いつもながらのCollider2D、Trigger2Dを使います。オブジェクトのタグがMessageFlagであれば、ゲームオブジェクトの名前のテキストをロードします。

void OnTriggerEnter2D(Collider2D other){
	if(other.tag == "MessageFlag"){
		...
		talk.loadText("Text/" + other.name);
	}
}

Rigidbody2Dコンポーネントを入れないとCollider2Dの判定をしてくれません。ちゃんと入れましょうね。こんな事に30分もかけないようにね。自分とかね。
f:id:mayonage-kobo:20141113003116p:plain
とりあえず葉っぱを置いてテストしました。
まあまあそれっぽい?

次回やる事

会話ウィンドウということで文章を表示させるだけを行ったけど、これをイベント等にも応用させたい所です。
あるイベントが発生したら、あるキャラが喋って、右に動いて、カメラが動いて、もう1つのキャラが喋る...みたいな。
文章だけじゃなくて、ちょっとした言語を作んないといけないですね。
例えばこんな感じ?

talk,ここは危ない所だよ。
moveCamera,20,80
talk,そう?

カンマで区切ってるだけならなんかSplitすればそれっぽく出来そう。
作ってる途中なのでまた今度に。