クロの制作日記

Unityでテキストファイルからステージを生成する

はじめに

マリオパーティのような双六ゲームを作りたいということで、前回はサイコロを回すというシステム(?)を作りました。
今回は、双六ゲームのステージの生成を半自動でできるシステムを作りました。

実際に作ったのがこれです。

f:id:kurora-shumpei:20180211204540g:plain


こんな感じに
①テキストファイルにステージマップを”#”で入力
②それをスクリプトで読み込んで
③UnityのInspector上でステージの生成と消去を行う。

というのをやりたかったのです。

こうすれば、一々UnityでCubeを作って、座標を入力して、微調整して、といったことをしなくてよくなるわけですね。
では手順を説明していきます。




ファイルの読み取り

まずは上の②のファイルの読み込みをスクリプトで実行してみましょう。

リポジトリにスター付けてくれたら大層喜びます。
github.com

c#のStreamReaderという機能を使えばファイルのパスを引数で渡せばそのファイルの中身を返してくれます。

これを使ってstring型の変数readDataにファイルの中の文字列を代入すればファイルの中身(ステージマップ)を文字列として扱うことができます。

ステージの生成

次は先ほど読み取ったステージマップをUnityの方でステージにしていこうと思います。
CreateStageクラス
github.com

さきほどのReadWriteクラスでファイルの中身を読み込むメソッドを作ったので、それを使用してステージを生成しています。

これでインスペクター上でxyzのサイズが1のCubeを登録してあげることで、そのCubeが作成したステージマップ通りに作成・配置されます。

しかし、このままだとゲーム再生ボタンを押すとステージが生成されますが、停止するとステージも消えてしまいます。

これはちょっと面倒だと思ったので、インスペクター上でステージ作成と消去ができるようにしたいと思います。

インスペクター上でステージ作成・消去

リポジトリにスター付けてくれたら大層喜びます(2回目)。
CreateStageEditorクラス
github.com

CustomEditorという機能を使えば指定したクラスのメソッドなどをInspector上でボタンとして実行することができるらしいです。




最後に

ということで、今回はステージの半自動作成を作りました。

もともとエディタ拡張のAssetとかを見ているとInspector上にボタンがあって、どうやってるのかな~と疑問に思っていたので今回のでそれが解決してスッキリしました。

あと、完全なステージ自動生成もちょい前にやっていたのでそれもおまけとして貼り付けときます。
f:id:kurora-shumpei:20180211225424g:plain
また機会があればこの紹介もしたいと思います。