LoginSignup
45

More than 5 years have passed since last update.

Unityでローグライクなゲームを作ってみる(1) マスタデータの準備編

Last updated at Posted at 2017-04-26

はじめに

ローグライクなゲームを作ってみよう!ということで、実際に制作しながら手順を書かせていただきました。
ゲーム制作を行う学生や初心者向けになればいいなと思います。

使用するもの

  • Unity
    • バージョンは5.5.2f1です
    • ※後ほどプラグインとして「MiniJSON」を使用します
  • 使用する言語はC#
  • Excel

ポイント

  • マスタデータ(パラメータ)をエクセル管理

    • バランス調整を容易に
    • ソースコードに直書きはNG!
  • ダンジョンを自動生成

    • 所謂、不思議のダンジョンっぽくしてみます
  • なるべくお手軽に作る

    • モチベーション大事!

ダンジョンの仕様

ざっくり下記のように作ります。

  1. 1つのダンジョンには各階層となるフロアが存在する
  2. 各フロアにはいくつもの部屋が存在する
  3. 各部屋は通路で繋がっている
  4. これらはマスタデータとしてエクセルで管理
  5. 部屋は四角形で固定(余力があればパターン化できるとGOOD)

_floor.png
後ほど部屋の大きさや通路の長さを調整できるようにします。

はじめに

今回パート1ということで、まずはマスタデータの準備から。
ダンジョンの生成や、アイテムのデータはエクセルで管理することにします。
エクセルで作成したデータはJSON形式のデータにコンバートし、Unityで扱うことにします。

マスタデータ用ファイル(エクセル)の準備

ひとまず必要そうなデータとしては、、、

  1. ダンジョンのデータ
  2. ダンジョンの階層データ

このあたりでしょうか。
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:
部屋と部屋との距離です。
この距離が大きいと通路が長くなる可能性があります。

とりあえずこのような感じで用意しました。

rogue_excel_sample.png

変換マクロを作成

エクセルのマクロでJSONのフォーマットに変換します。
(ツールを使って直接変換したり、CSV形式から変換したりでも問題ないと思います)
記事の一番最後にVBAでサクっと作ったものを記載しておきます。

作成したデータはこんな感じです。

json_memopad.png

完成

データの準備が整いました。
次回パート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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45