7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クラスターAdvent Calendar 2021

Day 12

Unityの作業効率を上げる系Editor ScriptのTips集

Last updated at Posted at 2021-12-13

この記事はクラスター Advent Calendar 2021 12日目の記事です。
なんとびっくり13日になってしまいました🙄
一昨日は@Swanmanさんの「カスタマーサポートがクラッシュの原因を突き止めた話 その2」でした
カスタマーからの連絡を受け、原因まで突き止めてくれるなんて!驚きのCS担当ですね!!

さて、普段TA(Technical Artist)的なことをしている私はEditorScript書く上で便利なTipsを書いていこうかと思います。

Editor Scriptとは

そもそもEditor Scriptとは何ぞやというお話ですが、今回お話しするEditor ScriptとはUnityのEditor機能を何らかの形で拡張し、便利にしてくれるScriptのことです。(Unity以外のEditor Scriptについては書きませんので悪しからず…
Runtimeに干渉しない範囲で純粋にUnityでの作業の手間を省いてくれるScriptについてのTipsを書いていきます。

代表的なもので言うと

といったものですね

Unityで何かしらSceneを構築をしていこうと思ったら、どうしてもDCCツール(いわゆるBlenderとかMayaとか)上の作業だけではなく、Unity上での作業が必要になってきます。どんなにDCCツールの方の工程が効率化されていたとしても、Unity上での作業効率が悪いのでは全体としての効率が落ちてしまいます。そこでEditor Scriptの出番です。Unityを少しでもDCCツールに近付けていきたいわけです。
さらに、Editor Scriptは作業の効率化だけではなく、作業環境を統一することによるミスの削減などにも貢献します。

弊社のCluster Creator KitもUnity上での作業上不便な点がまだまだ多くあります。
例としては

  • WarpのTargetからWarpを逆引きできず、視覚的にもどこへワープするのか把握しづらい
  • WorldGateの飛び先を把握しづらい
  • Cluster Creator KitのバージョンがProjectごとにまちまちになる

などです。実は、社内のイベント制作チームではそういった問題をEditor Scriptによって解決していたりします。

でどうやって作るの?

Editor Scriptの意義は分かった。でどうやって作るの?という話です。
幸いUnityはEditorWindowクラスを継承するだけでEditorにWindowを追加できたりとDCCツールと比べると、その辺の仕組みは整理されています。(EditorにWindowを追加する方法が2種類も3種類もあって、できることも違うどこかのDCCツールと比べると非常に簡便です

とりあえず何か作業効率を上げるツールを作ってみたいという方にはUnity公式のこちらのチュートリアルがおすすめです。
UIのチュートリアルですが、Editor Scriptを作ってみるとっかかりには非常に良いチュートリアルだと思います。
https://learn.unity.com/tutorial/uielements-first-steps

Tips集

でここからが本題です。まぁ大抵の機能は(うんうん悩みながら)問題なく実装できたりするわけですが、たまに面倒な問題に直面することがあります。そんな問題にブチあたったときに解決の糸口になるかもしれないことを書いていきます。

1. Editorの初期化実行時に処理を走らせたい

InitializeOnLoad属性を付与しましょう
Static constructorの作成もお忘れずに

2. Editorの初期化実行時に走らせたいが最初の一回(起動時)だけでいい!何回も動かないで

InitializeOnLoad属性を付与したクラスの中にInitメソッドを追加しましょう

3. Editorの実行中に特定の回数だけ実行されて欲しい!Editorを再起動しない限りこれは絶対だ

ScriptableSingletonというEditor実行中に一貫して値を保持できる便利クラスがあります
あとはInitializeOnLoadと組み合わせましょう

4. クラスの外からPublicではないメソッド・変数を読みたい

欲しい情報がある!しかしアクセスできない!このSerializeされた値が欲しいだけなのに!そんな場面はたくさんあると思います
Reflectionを使いましょう

5. Scene Viewに文字を表示したりアイコンを表示したりラインを引いたりしたい

OnDrawGizmosメソッドを利用して、ギズモを表示したりラベルを表示したりラインを引いたりできるよ

6. EditorでEditモードのときも実行されるMonoBehaviourを

ExecuteInEditMode属性を付与しましょう
(UpdateメソッドはScene内の何かが変わったときにしか呼び出されないので注意


以上、ちょっと少なかったですがEditor Scriptを書く上でのはまりポイントをまとめてみました。
Editor Scriptを書く際の手助けになれば幸いです。

今日、次の記事は@YOSHIOKA_Ko57さんの「なんか書く」です。どんな記事が出るのか楽しみですね!!

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?