【Unity】ExcelのxlsxファイルをScriptable Objectとして読み込む神パッケージ

 ゲームを開発していると、定義しなければならないデータが増えていきます。エネミーリスト、武器リスト、アイテムリスト、スキルリスト、経験値テーブルetc。

 それら全部をスクリプトの中に記述したり、Inspectorから一つ一つ設定したりするのも間違いではないと思うのですが、どうせならお馴染みのエクセルで管理したいですよね。なんだかんだで便利ですし。

 今回紹介する『Unity-Excel-Importer-Maker』は下記の特徴があります。
  • Excelの保存形式「.xlsx」がそのまま使える
  • Scriptable Object化してくれる
ゲームのマスタデータを取り込むのに便利だと思います。
早速使ってみましょう。

①インストールする

GitHubから『Unity-Excel-Importer-Maker』をダウンロード。
(ページ右側の ↓Code▼ > Download ZIP からダウンロードできる)
メニュー > Assets > Import Package > Custom Package... からダウンロードしたパッケージをインポート。

②Excelファイルをインポートする

まず、インポートするExcelデータを用意します。
サンプルに適さないのですが、こんなデータを用意したとします。

戦国ユニット.PNG
どう見ても「戦国ランス」っぽいんですが・・・

A列を id ではなく name にした理由は後ほど説明します。


(1) xlsxファイルを取り込みます。
このxlsxファイルを Projectウィンドウの Assets > Terasurware > ExcelData フォルダにドラッグ&ドロップ。
フォルダが無いときは作成して下さい。

(2) ExcelDataフォルダにコピーしたxlsxファイルを右クリックし、XLS Import Settings... を選択。

(3) ExcelImportMakerのウィンドウが開いたら、上の create をクリック。
※ウィンドウが開かない場合は、Excelファイルに問題がある場合が多いです。
 例えばシステムで予約された単語(classとか)があったり、空欄のセルがあったりするとダメです。


ScriptableObject.PNG

すると、このような Scriptable Objectが生成されます。
このようにA列の内容が一覧されるため、先ほどxlsx側のA列に name を設定したのでした。
IDがずらっと並ぶよりは、この方がエディタ上での視認性が向上すると思います。

今回は「unit」というシートしか存在しないxlsxファイルを使用しました。
xlsxファイルの中に複数のシートがある場合、そのシート分のデータとクラスができあがります。
詳しい使い方は『Unity-Excel-Importer-Maker』のページを参照して下さい。

③実装する

肝心の ScriptableObject の使い方ですが、
とりあえず
public Entity_unit m_unit;
こうして定義して、今生成したScriptableObjectをアタッチして
for (var i = 0; i < m_unit.sheets[0].list.Count; i++)
{
Debug.Log(m_unit.sheets[0].list[i].name);
}
こうすると、全件にアクセスすることができます。
xlsxファイル内のシートは、sheet[] という配列に入ります。一番左のシートが sheet[0] になります。

ScriptableObject はまだ習得中の段階なのでもっとスマートな方法があるとは思います。
詳しい解説は別の方がされていると思うので、そちらも参照して下さい。


📖このページを見ている方におすすめの書籍📖