1. HOME
  2. ブログ
  3. IT技術
  4. EditorWindowでunityを便利にしてみた

EditorWindowでunityを便利にしてみた

EditorWindow で unity を便利に

EditorWindow(エディターウィンドウ) とは、Unity(ユニティ)を、もっと便利にするための機能の1つです。

Unity開発において、「非エンジニアが、システムを操作する際に、触りやすいようにしたい」という事が業務で出てくると思います。

例えばですが

「Assets 配下の .animファイルから、StatemachineBehaviour がアタッチされている、State を含むファイルを探すシステムを作ってほしい」

「翻訳ファイルの中から、未翻訳の項目を見つけたい」

といった要望や、それに近い問題に直面したした際、インターフェースに EditorWindow を活用できる可能性があります。

そこで、今回は「EditorWindow」の、便利な使い方をまとめてみたいと思います!

EditorWindow はどんな時に必要?

早速ですが、EditorWindow を使うと、Unity 上に、こんなウィンドウを作ることができます。

製作物に直接関わる機能ではないですが、主に大規模な開発の時に役立ちます。

どんな場面で役立つのか?

先ほどの依頼を例に挙げると…

「翻訳ファイルの中から未翻訳の項目を見つけたい」

こちら、翻訳自体はエンジニアではない方が担当することが多いはずです。

そんな時に、便利機能を EditorWindow で提供すれば、Unity に詳しくない方でも、翻訳漏れを簡単に検索出来るようになります。

その結果、効率化につながるのです。

EditorWindow の作り方

それでは、EditWindow の作り方を、順を追って解説したいと思います。

1. スクリプトファイルを作成

まず、EditWindow を作るには、「Editor」という名前のフォルダを作成しなくてはなりません

作成する場所については、Assets 以下ならどこでも構いませんが、今回は、Assets フォルダ直下に作成したいと思います。

作成後は、Editor フォルダの下に、スクリプトを新規作成します。

なぜ、Editorフォルダ?
Editorという名前のフォルダは、ビルド時に無視されるからです。
今回のスクリプトはプロジェクトに必要なコードではなく、あくまでUnity上での作業効率を向上させるためのものであるため、ビルドに含む必要がありません。
また、このスクリプトをビルドに含めようとするとエラーになります。

2. EditorWindow を継承させる

新規作成したスクリプトの、 MonoBehaviour の部分を、 EditorWindow に書き換えます。

デフォルトでは、「Start関数」と「Update関数」が記述されていますが、両方消しておきましょう!

3. OnGUI関数を定義する

次に、GUI を描画するための関数である、「OnGUI関数」を定義します。

この関数内に、描画のための処理を記述することになります。

今回は、お約束でウインドウズ上に「Hello World!」というテキストを表示させてみましょう!

4. メニューバーに追加する

次に、Unity 上部のメニューバーから、先ほど作った EditorWindow を開けるようにしてみます。

それには、以下のスクリプトを追加するだけで簡単に実装できます。

なお MenuItem() のかっこの中の文字列は、メニューバー上での表示名になります。

仮に、 Test/WindowTest と入力した場合、下の画像のように表示されるはずです。

5. EditorWindow の完成

以上で完成です。

スクリプト全体は、以下のようになりました。

これで、メニューバーに「Test」という項目が追加されていると思います。

Test > WindowTestとクリックすると、以下画像のように、先ほど作ったEditorWindowを開くことが出来るはずです。

6. 小ネタ

EditorWindow について、「3つ」ほど小ネタを紹介したいと思います。

1:MonoBehaviour 継承時と違い、クラス名とファイル名は別でも問題ありません。

2:表示名を ”Test/WindowTest” としていますが、スラッシュ区切りを増やすと、さらに階層を深くすることが可能です。

3:実は、スクリプトを作成するフォルダ階層は、Editor の下じゃなくても大丈夫です。
スクリプト全体を#if UNITY_EDITOR で囲うことで、Editor フォルダ配下にスクリプトを置くのと、同じ効果が得ることができます。

EditorWindow の使い方

OnGUI 内での処理の書き方の例に、「メモ帳代わりに使えるウィンドウ」を作ってみましょう。

上記の作り方の説明では、テキストの表示のみを行いました。

今回は、「文字入力を受け付けたり」「ボタンを表示」させる実装を追加したいと思います。

作成したウィンドウ

スクリプト全体

「文字入力機能」と「ボタン表示」を追加したスクリプト全体は、以下となります。

スクリプト内の説明

また、スクリプト中にコメントを入れていますが、追加で覚えておいてもらいたいことを簡単に説明しておきたいと思います。

【GUILayout.Button】
ボタンを表示。押されるとtrueが返る。

【GUILayout.TextArea】
文字入力エリア表示。TextFieldもあるが、そちらは1行入力。

【GUILayout.BeginScrollView】
スクロールできる領域を作る。BeginとEndで囲まれた領域がスクロールできる領域となる。
引数に現在の位置を取り、新しいスクロール位置が返るので、ローカル変数で保存しておく必要がある。

スクリプトファイルカウンターを作ってみる

さて、今まで作ってきたことを応用として、「現在Assets内に含まれる、csファイルの数をカウントする機能」を作ってみたいと思います。

こちらは、「EditorWindow 上で、Assets 配下のファイルに対して、何かを行う機能を求められた場合」に活用できるかと思うので、早速作ってみたいと思います。

スクリプト全体

SearchCsFileRecursive  が再帰関数になっており、渡されたフォルダパス以下の、全フォルダを検索できます。

具体的な処理

具体的な処理は下記の通りです。

  1. 直下のファイルリストを取得して、拡張子がcsのファイルをカウント
  2. 直下のフォルダリストを取得して、フォルダが存在すれば、それぞれのフォルダに1.~3.を実行し、返ってきたカウントを加算(存在しなければ3.へ)
  3. カウントの値を返す。

実行

実行すると、以下のように表示されるはずです。

さいごに

今回は、EditorWindow のやり方をまとめてみました!

この機能を使えるようになれば、様々な Unity プロジェクトで開発の効率化を行うことが出来ると思います。

今関わっている、Unityのプロジェクトで起きている問題に利用できないか、考えてみてはいかがでしょうか?

解決する糸口になるかもしれません!

是非、ご活用していただければ幸いです!

こちらの記事もオススメ!

書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア