ホーム
ゲーム開発
Unity
UnrealEngine
C++
ゲーム数学
ゲームAI
サウンド
アニメーション
GBDK
制作日記
3DCG
Houdini
Blender
USD
グラフィックス
テクノロジ
生成AI関連
動画制作
ツール開発
フロントエンド関連
サーバサイド関連
ソフトウェア設計
ハードウェア関連
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
その他
ブログについて
都会のエレキベア
ラーメン日記
四コマ漫画
おすすめアイテム
おもしろコラム
お問い合わせ
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • ゲーム数学
    • ゲームAI
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • 3DCG
    • Houdini
    • Blender
    • USD
    • グラフィックス
  • テクノロジ
    • 生成AI関連
    • 動画制作
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • ソフトウェア設計
    • ハードウェア関連
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • その他
JP|EN
  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】Light2DとTimelineを活用した2Dライブシーンの構築
2026-07-20
【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