Mikimemo

個人的な技術・開発メモやポエム

Unity Excel Importerをv1.1にバージョンアップ

ちょっと時間があったので、 去年作ったUnity上でエクセルをインポートするプラグインをアップデートした。

github.com

Release Note

  • SerializeFieldアトリビュートをサポート(非パブリックなフィールドでも利用可能に)
  • 空のセルを基本Default Valueとして扱う
  • Excel Assetのクラス名と実際のエクセルファイル名のひも付きをオプションで変更可能に
  • インポート時にログを出力するオプションを利用可能に
  • NameSpace付きのExcelAssetにも対応
  • インポートエラー時にシート名も表示

このプラグインは、 以下のUnityプログラミングバイブルのマスターデータ構築部分を執筆する際に作成したプラグインで、 結構丁寧に考えながら設計している(つもり)。

Unityゲーム プログラミング・バイブル

Unityゲーム プログラミング・バイブル

導入の仕方は以下 qiita.com

が、しかし、Unity Excel Importerでしらべると、 大御所テラシュールさんのExcel Importer Makerも候補に表示されググラビリティが低い。 Excel Importer Makerの紹介記事は結構でたりして少し寂しい。。。

そもそも、このプラグインを作った背景には、 いくつか自分の思う思想でエクセルのインポートを扱いたいという思いと、 書籍で紹介する上では、それらの機能に責任を持ちたいと思ったからだ。

もうちょい、いろんな人に使ってほしいので紹介する。

Unity Excel Importerの思想とかメリット

以下の三つが主な特徴だとおもう。

1. シンプル&高いポータビリティ

まず、一番重要視したのは、シンプルさ。メインのソースはExcelImporter.csのみ。 一部Editor上から導入をサポートするコードもあるが、そのあたりはなくても動く。 Editor拡張を利用しない場合は、数行のコードを自前で書けばよい。

ほぼEditor拡張を使わないようにしたことで、癖がなくどんな案件でも導入しやすいはず。 Unity Editorのメニューをほとんど汚すこともないし、冗長なコードが増えることもない。

また、Excel内のテーブルのスキーマは利用者がソースコードで定義する(Enityソース)。 これにより、以下二つのメリットがうまれる。

  1. jsonの様なシリアライズ形式にそのまま移行できる
  2. エンジニアはソースをいじるだけでいい(GUIをぽちぽちしなくてよい)

1.に関しては、結構重要。 プロジェクトの開発初期では、とりあえずエクセルでマスターデータを構築しておいて、 開発が進んだあと、サーバーから取得する形に変更するなど、 データのシリアライズ形式をスイッチするとめっちゃスムーズ。 つまり、プラグインのフローや形式になるべく依存せず、 プロジェクト内の都合を極力優先できるということ。

2.に関して、意外とエンジニアはGUIの手続きを操作するのが嫌いだったりする。 手順を間違えたり、既存のソースのコピペができなかったり、独自の自動生成フローが使えないから。

2. 必要スクリプトは自分でマネージできる

テラシュールさんのExcel Importer Makerはその名の通り、 ImporterをMakeするプラグインで、 エクセルごとにツールを使って専用のImporterを、専用の配置場所に自動生成する形になる。

反面、このプラグインは完全に「Excel Importer」でインポートロジックコードの追加生成はしないし、 スキーマを定義するソースの配置等は利用者側に委ねている。 (その代わりリフレクションをバリバリつかっているけど、RunTimeではインポート済みだから問題ない)

そのため、ちょっとしたデータ構造の変更とか、 フィールド名の変更とかも気軽にできるし、削除する際も気兼ねなくできる。

3. 実プロジェクトで培われたユースケースに準拠

実はこのプラグインのもとになったのは 2011年くらいにUnityを会社で使い始めたときに、 レベルデザインを簡単にするために作られたエクセルインポートスクリプトだった。

このスクリプトがめっちゃ便利で、 いろんなプロジェクトで秘伝のタレのように使われたり改修されてきた経緯がある。 つまり、実際のプロジェクトで運用に耐えうる実績を持つフローと言えると思う。

特にコメントアウトとかEnumの利用は結構重要だとおもう。

そして、プラグイン化した今も、 新しいプロジェクトのプロトタイプとかでも利用しているし、 データ層の仮実装として相当な開発速度向上に繋がっている(上記のとおり後でスイッチも可能)。

また、都度新しいユースケースも見つかったりして、 しばらくはちゃんと対応していく予定(今回v1.1)。

まとめ

つまり、実際の利用と運用を考えて頑張って設計したプラグインなので、 是非ともつかってみてほしいということを言いたい。

あと仕様はだいぶ出揃っているから、本当はテスト書きたい。

ちなみに宣伝になっちゃうけど、 このExcel Importerを使ってライトゲーム向けのマスターデータを構築する例を 上記のUnityプログラミングバイブルで紹介しているのでよければ参考にしてみてほしい。