ゲーム開発
Unity
UnrealEngine
C++
ゲーム数学
ゲームAI
サウンド
アニメーション
GBDK
制作日記
3DCG
Houdini
Blender
USD
グラフィックス
テクノロジ
ツール開発
フロントエンド関連
サーバサイド関連
ソフトウェア設計
ハードウェア関連
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
その他
都会のエレキベア
ラーメン日記
四コマ漫画
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • ゲーム数学
    • ゲームAI
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • 3DCG
    • Houdini
    • Blender
    • USD
    • グラフィックス
  • テクノロジ
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • ソフトウェア設計
    • ハードウェア関連
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • その他
    • 都会のエレキベア
    • ラーメン日記
    • 四コマ漫画
    • おすすめアイテム
    • おもしろコラム
  1. ホーム
  2. 20220825_01

【Unity】「Unity Excel Importer Maker」を使ってExcelからScriptableObjectに変換する

UnityScriptableObject
2022-08-25

マイケル
マイケル
みなさんこんにちは!
マイケルです!
エレキベア
エレキベア
こんにちクマ〜〜〜
マイケル
マイケル
今回は ExcelからScriptableObjectに変換するツール、
「Unity Excel Importer Maker」の使い方について紹介するよ!

tsubaki / Unity-Excel-Importer-Maker – GitHub

エレキベア
エレキベア
むむ、それは便利そうクマね〜〜〜
でも何でわざわざExcelファイルから作るクマ??
マイケル
マイケル
Unityでデータ管理して使う分にはScriptableObjectが相性がいいんだけど、
大量データの入力には向かないという欠点もあるんだ。
そこでExcel入力にして変換することでその欠点を軽減できるというわけさ!
エレキベア
エレキベア
なるほどクマ〜〜〜
Excel入力 x ScriptableObjectが強いわけクマね
マイケル
マイケル
ちなみにマスタデータを待たせるにあたって、どの形式に持たせた方がよいかについては
下記記事がすごく分かりやすいです!

【Unity】ScriptableObjectにマスタデータを持たせるメリットについて

マイケル
マイケル
また、ScriptableObjectの基本的な使い方については
下記記事で一度紹介していますので、こちらもよければご参照ください!
エレキベア
エレキベア
便利だから知っておいて損はないクマね〜〜〜

Unity Excel Importer の使い方

マイケル
マイケル
というわけで早速使ってみよう!

基本的な使い方

unity packageのインポート
マイケル
マイケル
まずはGitHubに格納されているunitypackageをダウンロードして
Unityにインポートしましょう!

tsubaki / Unity-Excel-Importer-Maker – GitHub

エレキベア
エレキベア
同じみクマね
Excelでマスタデータを定義する
マイケル
マイケル
まずはExcelでマスタデータを定義しましょう!
今回は下記のようなモンスターのデータを定義してみます。
↑マスタデータの定義
マイケル
マイケル
当初はxls形式のみ対応していたようですが、現在はxlsx形式にも対応しているようです。
なのでどちらかの形式で保存しておきましょう!
エレキベア
エレキベア
ExcelならDBレコードみたいに定義できるクマね
Unityにインポートして設定ファイルを作成する
マイケル
マイケル
そして次はUnityにExcelファイルをインポート後、
ファイルを右クリック -> XLS import Settings を選択します。
↑XLS import Settingsを選択
マイケル
マイケル
すると下記のような設定画面が表示されるため、
取り込む項目と属性を確認してCreateを押下しましょう!
なお、この時のデフォルトのclass名は「Entity_Sheet名」となるようです。
↑取り込む項目、属性を確認してCreate
エレキベア
エレキベア
ここで作成するScriptableObjectの設定を行うクマね
マイケル
マイケル
作成するとExcelファイルと同じ階層にScriptableObjectが作成されます。
確認してみると値も正常にインポートされていることが確認できました。
↑同階層に作成される
↑データも設定されている
マイケル
マイケル
作成されない場合は、Excelファイル右クリック -> Reimport
することで作成されると思います。
↑Reimportすることで作成される
マイケル
マイケル
なお、ScriptableObjectのスクリプトは Assets/Terasurware/Classes フォルダ配下に作成されます。
↑作成されたスクリプト
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Entity_Monsters : ScriptableObject
{	
	public List<Sheet> sheets = new List<Sheet> ();

	[System.SerializableAttribute]
	public class Sheet
	{
		public string name = string.Empty;
		public List<Param> list = new List<Param>();
	}

	[System.SerializableAttribute]
	public class Param
	{
		
		public double id;
		public string name_ja;
		public string name_en;
		public double hp;
		public double ap;
		public double dp;
		public double sp;
		public string png_name;
	}
}
マイケル
マイケル
構造はこのように、Sheetのリストの中に定義したパラメータのリストが格納される状態になるようです。
エレキベア
エレキベア
複数シートにまたいでデータを定義することもできるクマね
Scriptから操作する
マイケル
マイケル
スクリプトからは下記のように操作することができます。
データの持ち方さえ確認しておけば、普通のScriptableObjectの扱いと変わりありません。
    [SerializeField] private Entity_Monsters monsters;

・・・略・・・

    for (var i = 0; i < monsters.sheets.Count; i++)
    {
        for (var j = 0; j <  monsters.sheets[i].list.Count; j++)
        {
            var param = monsters.sheets[i].list[j];
            Debug.Log($"sheets: {i} param {j} id: {param.id} name: {param.name_ja}");
        }
    }
↑データを出力してみた
エレキベア
エレキベア
気を付けるのはシートが挟まっていることくらいクマね

Repositoryクラスでの管理

マイケル
マイケル
また、下記のように別途Repositoryクラスを作って切り離して置くことで
参照が散らばることなく管理がしやすくなるためおすすめです。
using UnityEngine;
public class MonsterRepository : MonoBehaviour
{
    [SerializeField] private Entity_Monsters monsters;
    /// <summary>
    /// 指定IDのMonsterParamを返却
    /// </summary>
    public Entity_Monsters.Param GetMonsterParam(double id)
    {
        var param = monsters.sheets[0].list.Find(monster => monster.id == id);
        if (param == null) Debug.LogError("not found monster!! id: " + id);
        return param;
    }
}
↑Repositoryクラスで管理する
エレキベア
エレキベア
データの持ち方が変わった時にも備えて
アクセス用のクラスは分けておきたいところクマね

おわりに

マイケル
マイケル
というわけで今回作ったデータを使って作ったものがこちら!!
↑データを読み込んでバトルさせてみた
エレキベア
エレキベア
なんだこれクマ・・・
マイケル
マイケル
これは適当につくったやつだけど、
一度マスタデータ主体でゲームを作ってみるのも面白いかなと思っているよ!
マイケル
マイケル
それでは今日はこの辺で!!
アデューー!!!
エレキベア
エレキベア
クマ〜〜〜〜

【Unity】「Unity Excel Importer Maker」を使ってExcelからScriptableObjectに変換する 〜完〜


UnityScriptableObject
2022-08-25
記事をSNSで共有する
X
Facebook
LINE
はてなブックマーク
Pocket
LinkedIn
Reddit

著者の各種アカウント
フォローいただけると大変励みになります!

関連記事
【Unity】Timeline × Excelでスライドショーを効率よく制作する
2024-10-31
【Unity】Boidsアルゴリズムを用いて魚の群集シミュレーションを実装する
2024-05-28
【Unity】GoでのランキングAPI実装とVPSへのデプロイ方法についてまとめる【Go言語】
2024-04-14
【Unity】第二回 Wwiseを使用したサウンド制御 〜インタラクティブミュージック編〜
2024-03-30
【Unity】第一回 Wwiseを使用したサウンド制御 〜基本動作編〜
2024-03-30
【Unity】第二回 CRI ADXを使用したサウンド制御 〜インタラクティブミュージック編〜
2024-03-28
【Unity】第一回 CRI ADXを使用したサウンド制御 〜基本動作、周波数解析編〜
2024-03-28
【Unity】サウンドミドルウェアに依存しない設計を考える【CRI ADX・Wwise】
2024-03-27