UnityでExcelのデータを取得する

2022.4.14　今回はUnityでExcelのデータを取得していきます。


## 　目的
ゲーム会社でプロジェクトを見ながらスクリプトを見ていると、データをExcelで管理していることが多く、どうやっているのか疑問に思ったからです。


## 　参考資料
今回参考にしたのは、以下のリンクの記事です。
https://squmarigames.com/2018/12/12/unity-excel-importer-maker/


## 　実践

### 1.Excel Importer　をダウンロードする
以下のリンクをクリックして、GitHubに移動します。
https://github.com/tsubaki/Unity-Excel-Importer-Maker

CodeボタンからDownload ZIPを選択し、ダウンロードしたzipを解凍します。
![bandicam 2022-04-14 14-44-20-521.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/bc81168c-d94c-27e1-0023-f826ba22da6a.jpeg)

解凍してできたファイルの中のAsset内にある「Terasurware」フォルダをUnityのプロジェクト内にドラック＆ドロップします。
![bandicam 2022-04-14 14-53-47-728.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/029d3a15-bfd4-bdf4-db94-d2720550cd9b.jpeg)

### 2.Excelデータを作成する
インポートするExcelを作成していきます。
作成する際は、
・拡張子を「.xls」とする
・複数のシートはフォーマットをそろえる

今回は以下のようなExcelを作成しました↓
![bandicam 2022-04-14 15-48-20-230.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/7aae7740-6832-ce26-97c7-4ab8072b6621.jpeg)

作成したExcelデータはAssetsフォルダ内に入れます。

入れたExcelデータを右クリックして、
「XLS Import Settings...」という項目を選択します。
![bandicam 2022-04-14 15-53-12-842.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/7199537f-dd83-8be6-3103-dd792a9bf938.jpeg)

以下のような画面が出てきます
![bandicam 2022-04-14 15-55-24-049.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/dfbed63b-a83e-a5e9-bc87-989511975319.jpeg)

・class name
Excelをインポートする用のクラスを作成するためのクラス名です。変更しても、そのままでも問題ないそうです。
・Sepalate sheets
Excel内に複数のシートがある場合、シートごとに読み込むかどうかの設定です。
シート内の１行目のアルファベットは全シートで統一する必要があります。
・Parameter settings
Excelシートの変数名は入力されているので、それに対応した型名を右のタブから設定します。

設定が終わったら「Create」ボタンを押します。
すると、Terasurware/Classes内に「Entry_Sheet1.cs」、
Terasurware/Classes/Editor内に「"作成したExcelの名前"_importer.cs」ができています。
※今回は「Unity_Study.xls」という名称で作成しました。
![bandicam 2022-04-14 16-07-06-358.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/95e74c32-a5c1-ad76-c33f-1216627d7f59.jpeg)
![bandicam 2022-04-14 16-07-43-450.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/cad4e7b5-24df-b6b9-381c-88b5e790c3b1.jpeg)

### 3.スクリプトの更新、作成
Terasurware/Classes/Editor内に作成したスクリプト内の以下の部分をExcelが入っている場所とassetが入っている場所に変更します。
```C#:Unity_Study_importer.cs
public class Unity_Study_importer : AssetPostprocessor {
  private static readonly string filePath = "Assets/Unity_Study.xls";
  private static readonly string exportPath = "Assets/Resources/Unity_Study.asset";
```

今回はコンソールにExcelから読み取ったデータを表示したいので、そのコードを書いていきます。
```C#:ImportExcelData.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;

public class ImportExcelData : MonoBehaviour
{
    Entity_Sheet1 es;

    // Start is called before the first frame update
    void Start()
    {
        es = Resources.Load("Unity_Study") as Entity_Sheet1;

        Debug.Log("numberの1行目:" + es.sheets[0].list[0].number);
        Debug.Log("namerの1行目:" + es.sheets[0].list[0].name);
        Debug.Log("numberの2行目:" + es.sheets[0].list[1].number);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
```
以下のコードを追加します。
```C#
using System;
using System.IO;
```

ResourcesフォルダからUnity_Study.assetファイルを読み込みます。
```C#
es = Resources.Load("Unity_Study") as Entity_Sheet1;
```

Sheets[n] でn枚目のシートを指定
list[n]でn行目のデータを選択
numberでnumberの列のデータを取得します。

実行してコンソールに以下のように表示されていたら終了です。
![bandicam 2022-04-14 17-14-08-169.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1940156/320e47f6-a129-b6ef-6f8b-1e8393e954c9.jpeg)

今回はやり方を学べたので、次は応用していきたいです。