Unityの練習として、ものすごくシンプルなすごろくを作りました。


マス目すら無く、他の駒も無いですが。
「Roll a die」のボタンを押すとサイコロを振り、出た目の歩数ぶん駒が左に移動します。
駒が左の黄色の線を越えればゴールです。ゴールしたら初期位置に戻ります。
↓作ったモノをここに置いておいたので、実際に動かせます。
Sugoroku

以下は、Unityの練習でやったことメモ。



追記 2018年4月4日
日本語フォントが表示されなかった問題を修正したバージョンを以下のリンクから試せます。
Unity WebGLで日本語フォントを表示する

***

Unityのアップデート


新しいUnityを入れ直しました。 Version 2017.2.0f3

ボタンを作る


基本中の基本であるボタンづくり。
以前にTicTacToeを作った頃からだいぶ経ったので忘れていることは多かったですが、TicTacToeの作り方を思い出しながら。
GUI上で、Canvasをつくり、Buttonもつくり、サイズや色を調整したりButtonの子要素であるTextを編集して表示を変えたり。
押された時の処理scriptを作り、GUI上でButtonのインスタンスと関連付けたりで、押すとDebug.Logのテキストがコンソールに表示されるものが完成。

サイコロの目のランダム生成


Unityの場合は、Randomというのが用意されており、Random.Value()やRandom.Range(0,2)とかで乱数がつくれる。
今回はサイコロの1~6の整数の目なので、Random.Range(0,7)でOK。
上記で作ったButtonを押すと、コンソール上に乱数の結果が表示されるようにしました。

サイコロの目の結果表示


コンソール上ではなくゲーム画面に表示させるためのもの。
GUIでPanelをつくり、その中にTextをつくる。
そのTextのインスタンスとButtonのscriptを関連付けて、ボタンを押して出た結果の数字をTextに書き換えるように。

音を出す


数字だけ表示させてもサイコロっぽくないので、ボタンを押したらサイコロを転がす音が鳴るようにしました。
参考にしたサイト
How To play audio on button press unity 5?

GUI上でAudio Sourceを追加し、音声ファイルを指定。Buttonのscriptと関連付け、音を出したいところでrollSound.play();をするだけでOKでした(rollSoundは、AudioSourceのインスタンスに付けた名前)。
ちなみに、音声ファイルは、Unity Assets Storeで無料であった「Casual Game Sounds」をダウンロードしてきて使いました。

ゲームの状態管理


TicTacToeを参考に、ゲームの状態を管理するscriptを新たに作ったり、ボタンを一度押したら押せなくするようにしたり。ココらへんはTicTacToeのチュートリアルを見直すとよい。

駒の移動


Panelで駒をつくり、駒の移動用のscriptを作成して駒のPanelと関連付ける。
参考にしたサイト
【Unity】uGUIのPanelをスライドインさせる方法
下記はちょっと直接は関係ないけれど、Unityのsleepのさせ方を調べていたもの。
コルーチンは上記の移動の参考にしたスクリプトにも使われている。マルチスレッド化するものなので、呼び出した元の関数の処理はsleepできない点は注意が必要。
Unityで一定時間待つ処理の実装方法

AnimationCurveで動き方を変えられるのは便利。

あとは細かい部分を調整


時間がかかったのが、出た目の数だけ複数回移動させるループをどこに書くか。コルーチンが新たなスレッドを立ち上げることを最初は理解しておらず、6回コルーチンを呼び出したら6歩進むのではなく1歩目が並列して6回動作することになったとか失敗がありました。最終的には、移動するコルーチンに歩数(サイコロの出目)を渡して、そのなかで歩数分ループするようにして実現。
あとは、ゴールラインを作ったり、駒を進める時やゴール時に音が出るようにしたり、ゴールの判定と初期値へ戻す処理を作ったり。
そんなこんなで、このシンプル過ぎるすごろくができました。



今回ためしに作ってみたものは、これから作ろうと思っているものからは結構かけ離れたレベルのものです。ただ、これだけシンプルなものを作っていって、実装に必要な機能や作り方などを体得していけば、複雑なプログラムも作りやすくなると思います。
次の段階は、マス目をつけたり、マス目の効果(○マス進む、一回休みなど)、対戦相手の駒も追加してみようかと思います。