パラメータの管理をエクセルでやっているけど、このエクセルの内容をUnityに一発で反映させたい!
本記事の内容
・ScriptablObjectとは?
・ExcelからScriptablObjectに変換するアセット、「Unity-QuickSheet」の使い方
ScriptableObjectとは?
ScriptableObjectはパラメータなどの設定値をまとめて管理できるデータベース
ゲーム内でアイテムや武器などの複数のバリエーションを持つオブジェクトを管理するには、ScriptablObjectを使用するのがオススメです。
ScriptableObjectの作り方については以下の記事で解説しています。
ScriptableObjectを使うことで、ゲーム内で使用するオブジェクトの設定値を管理することができます。
メモリ使用量も少なく、パフォーマンスも良好です。
ですが、正攻法でScriptablObjectを作るにはUnityのインスペクタからちまちま1個づつ設定をしないといけないため、設定したいものが多いと結構な時間も掛かるし、一覧で数値が確認出来ないので、結構面倒です。
そこで、Excelなどのスプレッドシートなどを使ってパラメータを編集し、その内容がそのままUnityに取り込まれたらラクですよね?
このようなExcelをScriptablObjectに変換するアセット、「Unity-QuickSheet」というアセットの使い方を紹介します。
(※参考)似たようなことができるアセットに、「Unity-Excel-Importer-Maker」というものがありますが、こちらは私の環境(Office2021、Unity2022.xx)だと正しく動作しませんでした...。
Unity-QuickSheetの使い方
Excelから取り込む方法
アセットのインストール
まずは下準備です。
アセット自体は以下のGitHubにあります。このページには導入方法が書いていないです。
上記のリンクを開き、Code > DownloadZipを選択。
ダウンロードが完了したら解凍し、Assets > QuickSheet のフォルダをUnityにインポートします。
これでインストールは完了です。
エクセルファイルの準備と取り込み
次に、ScriptablObjectに設定したExcelファイル準備します。
今回はサンプルとして以下のようなエクセルを用意しました。
まずは、このExcelをUnityに放り込みます。
次に、いま取り込んだExcelをインポートする設定を行っていきます。
プロジェクトウィンドウで右クリックを押して
Create > QuickSheet > Tool > Excel
と進みます。
すると、「New Import Setting」というファイルが生成されます。これが、Excelのインポート設定です。
Fileから対象のUnityに取り込んだExcelファイルを選択し、WorkSheetを選択します。
Runtime、Editorの欄には、QuickSheetが自動で生成するスクリプトが格納されるパスを指定します。
今回は、Data/Runtime
と Data/Editor
というパスを選択しました。
この状態で、Importボタン を押します。すると、以下のようにExcelで設定したヘッダが表示されます。
Typeから型を選択します。
今回、UseItemTypeにはEnumを設定したいので、対応するEnumを以下のように作成しました。
public enum UseItemType
{
Heal,
Attack,
Important,
}
そして、Typeを以下の画像のように、適切な値でセットします。UseItemTypeにEnumを使っています。
これで準備は完了です!
ScriptablObjectを自動生成する
ScriptablObjectを生成するにはここからまた一癖あるので解説。
ここまでの準備が出来たら、Generateボタンを押します。
すると、Runtime、Editor欄に指定したパスに新規にフォルダとScriptablObjectの元となっているスクリプトファイルが生成されています。
Generateボタンを押しただけだと、スクリプトファイルは出来ますが、ScriptablObjectは作成されていません。最初私は引っかかりました。
ですが、Excelファイル側の値を何かしら更新+保存を行うと、自動でScriptablObjectがExcelと同じフォルダに生成されます。やったね。
ScriptablObjectの中身を見てみると、以下のようにエクセルと同じものが反映されています。Enumもバッチリ反映されています、スゴイ!
もちろん、Excel側を更新すると、自動でScriptablObjectも更新されます。
Excel側に数式を埋め込んだセルから取得することも出来ます。
また、ScriptablObject自体にメソッドを組み込みたい場合などは、Runtimeで指定したフォルダパスにあるスクリプトファイルを追記することで実装出来ます。
おまけ
「Unity-QuickSheet」を使うことで、Google Driveのスプレッドシートから取り込むことも可能みたいなのですが、認証がうまく通らず成功しませんでした...。ライブラリはここ4年ほど更新されていないので、API認証方法が変わっててうまくいっていないのとか...ちょっと調べきれず。
もしうまくいった方がいれば、コメント欄で教えてください...。
まとめ
以上、ExcelのデータをUnityのScriptablObjectに変換する「Unity-QuickSheet」の紹介でした。
以前、エクセル大好きな会社に所属していたこともあり、エクセルから一発で変換できるアセットがあるのは個人的には結構ありがたかったです。
それでは素敵なゲーム制作ライフを!
コメント