はじめに
ローグライクなゲームを作ってみよう!ということで、実際に制作しながら手順を書かせていただきました。
ゲーム制作を行う学生や初心者向けになればいいなと思います。
使用するもの
- Unity
- バージョンは5.5.2f1です
- ※後ほどプラグインとして「MiniJSON」を使用します
- 使用する言語はC#
- Excel
ポイント
-
マスタデータ(パラメータ)をエクセル管理
-
バランス調整を容易に
-
ソースコードに直書きはNG!
-
ダンジョンを自動生成
-
所謂、不思議のダンジョンっぽくしてみます
-
なるべくお手軽に作る
-
モチベーション大事!
ダンジョンの仕様
ざっくり下記のように作ります。
- 1つのダンジョンには各階層となるフロアが存在する
- 各フロアにはいくつもの部屋が存在する
- 各部屋は通路で繋がっている
- これらはマスタデータとしてエクセルで管理
- 部屋は四角形で固定(余力があればパターン化できるとGOOD)
はじめに
今回パート1ということで、まずはマスタデータの準備から。
ダンジョンの生成や、アイテムのデータはエクセルで管理することにします。
エクセルで作成したデータはJSON形式のデータにコンバートし、Unityで扱うことにします。
マスタデータ用ファイル(エクセル)の準備
ひとまず必要そうなデータとしては、、、
- ダンジョンのデータ
- ダンジョンの階層データ
このあたりでしょうか。
1では「最初のダンジョン」「封印されたダンジョン」など、ダンジョンごとのデータを管理します。
2では各ダンジョンの階層データを管理します。1Fは部屋数が5つあって…などです。
上記を、Dungeon.xlsm と DungeonFloor.xlsm として作成しました。
(xlsmで作成し、あとで出力をマクロ化します)
カラムの用意
ワークシートを作成したら、カラムの準備を行います。
フロアはmin~maxまでのランダムな値で生成します。
小さな部屋もあれば、大きな部屋もあるといった感じですね。
Dungeon.xlsm
id:
固有な数値として扱います。
1ダンジョンに1つのIDが存在します。
name:
ダンジョン名です。
「最初のダンジョン」など。適当につけましょう。
DungeonFloor.xlsm
後で使う想定で色々用意しておきます。
id:
固有な数値として扱います。
1フロアに1つのIDが存在します。
dungeon_id:
このフロアを関連付けるダンジョンのIDです。
3層構成のダンジョンの例は下記のような感じです。
>Dungeon.xlsm
id: 1000, name: 最初のダンジョン
>DungeonFloor.xlsm
id 1, dungeon_id : 1000
id 2, dungeon_id : 1000
id 3, dungeon_id : 1000
name:
フロア名です。「~1層」など。
room_width_min / room_width_max:
1部屋あたりの幅です。X軸方向の壁になります。
room_height_min / room_height_max:
1部屋あたりの高さ(奥行き)です。
room_count_min / room_count_max:
1フロア中に存在する部屋の個数です。
room_distance_min / room_distance_max:
部屋と部屋との距離です。
この距離が大きいと通路が長くなる可能性があります。
とりあえずこのような感じで用意しました。
変換マクロを作成
エクセルのマクロでJSONのフォーマットに変換します。
(ツールを使って直接変換したり、CSV形式から変換したりでも問題ないと思います)
記事の一番最後にVBAでサクっと作ったものを記載しておきます。
作成したデータはこんな感じです。
完成
データの準備が整いました。
次回パート2の記事にてデータの読み込み部分を作成していきます(予定)。
お疲れ様でした!
サンプルコード
VBAで作成した、JSONフォーマットへの変換マクロです。
:Example
'
' ConvJSON Macro
' JSON形式に変換します。
'
'
Sub ConvJSON()
Dim outStream As ADODB.Stream
Set outStream = New ADODB.Stream
'UTF8形式.
With outStream
.Type = adTypeText
.Charset = "UTF-8"
.LineSeparator = adLF
.Open
End With
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim datFile As String
'保存する名前(パス)を決定します.
'このワークブックと同じディレクトリにワークブック名で書き込みます(拡張子はjson).
datFile = ActiveWorkbook.Path & "\" & Replace(ThisWorkbook.Name, ".xlsm", ".json")
'はじめのカッコを書きます.
outStream.WriteText "[", adWriteLine
Dim i As Long
Dim result As String
'上の行はカラム名などの不要なデータなのでとばします.
Dim n As Long
n = 2
'順番にデータを書き込んでいきます.
Do While ws.Cells(n, 1).Value <> ""
'最初のカラムを参照するので初期化.
i = 1
result = " { "
'カラム名 : データの値 で1つずつ処理.
Do While ws.Cells(2, i).Value <> ""
result = result + """"
result = result + ws.Cells(1, i).Value
result = result + """"
result = result + " : "
result = result + """"
result = result + Format(ws.Cells(n, i).Value, "@")
result = result + """"
result = result + ", "
i = i + 1
Loop
result = result + "},"
'1行分書き込んで、次のデータへ.
outStream.WriteText result, adWriteLine
n = n + 1
Loop
'終わりのカッコを書きます.
outStream.WriteText "];", adWriteLine
'ファイルを保存いたします.
outStream.SaveToFile datFile, adSaveCreateOverWrite
outStream.Close
'保存場所のダイアログを出して終わります.
MsgBox datFile & "に書き出しました"
End Sub