【Unity】エディタ拡張を使うと開発を効率化できる【C#】

【Unity】エディタ拡張を使うと開発を効率化できる【C#】

Unityを使っていると、自分のゲームで使うデータを管理していて「もっとこんな感じにできたら便利なのに」なんて思うことがあります。

Unityではエディタの機能を拡張して自分で必要なデータを管理するようなウィンドウを作成することができます。これはエディタ拡張と呼ばれていて、C#で専用のスクリプトを書くことによって機能を追加できるんです。便利。

また、ScriptableObjectを活用してインスペクターウィンドウでの表示をカスタマイズしたり、何かの操作をするボタンを付けたりと、割と柔軟に機能を付け足していくこともできるので、ウィンドウを作るほどじゃないけどちょっとした機能を付けたいなんて場合はこちらを使う手もあります。

このページでは具体的なコードを紹介するというよりは、エディタ拡張おすすめ! というパッションをお伝えしたいと思っています。サンプルについてはこのブログの中でもいくつか紹介しているのでそれをリンクで案内する形にしたいと思います。

 

 

エディタ拡張の例

私が前に作っていたRPGのゲームでは敵キャラ一覧を表示して、主人公が何回攻撃したら倒せるのか一発で確認できたらいいのになーという願望がありました。

主人公のステータスや装備を設定して、通常攻撃だと何回、炎属性の魔法だと何回、といった感じで表示できるとテストが簡単になるなーと思っていたんです。

これはUnityエディタのデフォルト機能だけでは実現できませんが、「エディタ拡張」の機能を使うと自分が欲しい機能を作成することができます。

先ほど触れた敵キャラを一覧で表示する機能もエディタ拡張としてC#のスクリプトを書いて実現しました。下の画像のような感じで作っていて、上半分でパラメータを設定して下半分で敵キャラとの戦闘シミュレーションをしています。何回攻撃すればその敵を倒せるかみたいな感じで表示したかったんです。

一括で敵キャラとの戦闘シミュレーションをしてみる例
一括で敵キャラとの戦闘シミュレーションをしてみる例

 

エディタ拡張もC#で

そう、エディタ拡張もC#で書くことができます。普段使っているC#がそのまま使えるのはありがたい話です。

スクリプトの中では「using UnityEditor;」と追加することでエディタ用の機能を使うことができるので、テキストボックスを表示したり、bool値を設定するトグルを表示したり、これらのパーツを並べたりすることができます。エディタ拡張については公式マニュアルの以下のページもご参照ください。

 

エディタ用に使うスクリプトは「Editor」フォルダに格納しておくことで、ゲームをビルドする際にビルドの対象から外すことができます。というかここに入れておかないとビルド時にエラーになります。「Editor」フォルダの中にサブフォルダを作るのはオッケーなので、ある程度エディタ拡張用スクリプトが増えてきたらフォルダを作って整理しておくとグッド。

C#で記載するので画面を作るのは慣れるまでちょっと大変かもしれませんが、画面を必要としないちょっとした機能、例えばインスペクターウィンドウにボタンを表示してCSVファイルからScriptableObjectを作る機能などはほぼ普通のプログラミングみたいな感覚で作れます。

 

エディタ拡張のサンプル

サンプルとして以前書いた記事を紹介します。

 

ScriptableObjectについて知りたい時には以下の記事がおすすめです。ScriptableObjectは自分で定義したクラスのデータをアセットファイルとして保持しておきたい時に便利なクラスです。

 

上で紹介したScriptableObjectに対して、CSVのテキストファイルを使ってデータを流し込むサンプルは以下の記事に記載しています。ExcelやGoogleスプレッドシートなどで表形式でデータを定義したら、それを一括でゲームで使える形に変換できると便利です。

 

こちらは逆にScriptableObjectのデータをCSVファイルとして出力するサンプルです。ゲーム内のデータが設定書の値と一致しているかの確認に使うことで、ちゃんと意図通りに設定できている点をチェックできます。例えば特定の敵キャラのHPが10倍になっていた、なんてミスに気付くことができます。

 

この記事ではXMLを使ってCSVとの変換を行うサンプルを紹介しています。フォーマットさえ分かっていれば他の形式に変換することもできるので、この辺りは普通のプログラミングのような感覚で作っていけます。……XMLでやりとりする必要があるかについては触れないでください(笑) 実用性を考えるならJSONとの変換ですが、JSONの場合はJSONUttlityという便利なクラスがあるのでこちらを使用すると良いでしょう。

 

エディタ拡張の裏話……という余談

余談ですが、「using UnityEditor;」以下の機能やAPIはいつも使ってるUnityエディタの動きを表現するのにも使われています。

Unityのエディタ部分のスクリプトについてはgithubの以下のリポジトリで公開されており、その中で確認することができます。多少プログラミングの知識は要求されますが一度このリポジトリを覗いてみると「こんな感じでUnityのエディタが作られているんだ!」みたいにニヤリとできます。

 

まとめ

エディタ拡張を使うと便利だよーというお話と、サンプルをいくつか紹介しました。ここで紹介した以外にも便利ツールがいくらでも追加できるので、どんどん試してみると良いでしょう。

ただ、エディタ拡張にハマりすぎてゲーム開発そっちのけになってしまう……なんてこともあるので沼にはお気をつけて。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!