見出し画像

Chapter20 画面をタップすると会話が進むプログラム

今日も、ゲームエンジン『unity』を使った『ADV(アドベンチャー)ゲーム』制作の続きをやっていこうと思う。

『ADVゲーム』に限らず、ゲームでキャラクターと会話する際、プレイヤーがボタンを押したり画面をタップすると会話の内容が進むという仕様になっていることが多いと思う。

今回は、ゲーム画面をタップすると文章が更新されるというようなプログラムを組んでみようと思う。

それでは『unity』を開こう。

以前、画面をタップしたらテキストが表示されるスクリプトを作っているので、今回はそのスクリプトに手を加えていくことにする。

ちなみに、その時の記事がこちら↓


画像1

以前作った『Touch』という名前のスクリプトをダブルクリックで開く。


画像2

前回作ったスクリプトでは、『text1』という名前のフィールドを作り、

『text1= GetComponentInChildren<Text>();』で『text1』にテキスト機能を付与し、

もし『画面がタッチされる』という条件が満たされた場合、テキスト機能を使って"ご飯にします?お風呂にします?それとも・・・"という文が表示されるという記述をした。

ただこのプログラムでは、最初に決めた一文しか表示させられず、文章を変えるにはいちいちスクリプトの内容を書き直さなくてはならない。

それは面倒くさい。

ということで、今回は[SerializeField]という機能を使ってみようと思う。


画像11

『private』という修飾子を付けることで、外部から勝手に値を変えられないようにすることが出来る。

ただし『Unity』画面上からの操作はできた方が便利なので、冒頭に[SerializeField]を宣言することで『Unity』からの変更のみ限定的に許可するということが出来る。

ここでは『string(文字列)型』の変数を5つ用意し、それぞれの値を空の状態にしている。

続いて『string[] texts=new string[5]』で、『string型』の配列を5列分用意した。『Unity』側から入力した『text0』~『text4』の値はこの配列に渡して使うことになる。

『int nowNumber』はこの後使うただの変数である。

では、『Unity』の画面を見てみよう

画像4

『inspector』view上、『Touch』スクリプトの項目に、先ほど[SerializeField]を付けてフィールドが追加された。

この空欄に文章を入れると、スクリプト上でもその文字が使えるようになるので、上から順に表示したい文を入れていく。

『Text0』と『Text4』には何も入れていないので、この二つを呼び出した場合は何も表示されない。

では一度スクリプト画面に戻って、やってほしい動作を書き加えようと思う。

画像5

『Start関数』の中には、実行ボタンが押された際に一度だけ行って欲しい動作を書く。

ここでは『string(文字列)型』の『texts』配列0〜4番それぞれに『unity』側から入力された『text0』~『text4』までの値を代入させている。


画像11

『Update関数』内ではまず、『Text』型の『nowText』を宣言したあと、『=GetOmponentInChildren<Text>()』で『nowText』に『Textコンポネント』付与する。

その後の処理としては、

『もし、画面のどこかが押されたら「nowNumber」の値を1増やす』

『Textコンポネント』が付与されている『nowText』の『text』という『テキストの内容』にあたる場所に『tests[nowNumber]』に格納された文章を代入する。

『Start関数』内で、『nowNumber』の値は0にされているが、画面がタップされるたびに値が1ずつ増えるので、表示される文章はタップされるたびに変わるという仕組みだ。


画像7

『nowNumber==0』のとき


画像8

『nowNumber==1』の時


画像9

『nowNumber==2』の時


画像10

『nowNumber==3』の時


画像11

『nowNumber==4』の時


このように画面をタップすると会話が進むプログラムが出来た。


ご閲覧ありがとうございました

この記事が気に入ったらサポートをしてみませんか?