Unity++blog.

UnityやC#とかについて学習したことを書いてます

エディタの拡張をやってみる

あまり必要ではなかったのでエディタ拡張を調べたことがなかったのですが、やり方の仕組みくらいは理解しておきたかったので調べて試してみました。

 

参考にさせて頂いたサイト様です。

gametukurikata.com

 

qiita.com

 

 

まずどういったことが出来るかですが、いつも見るこのようなインスペクター↓

f:id:nabesi777:20190208222302p:plain

 

チェックボックスがついていたりプルダウンで選択できたりと、コンポーネントによって特徴がありますが、このようにインスペクターをカスタマイズすることができます。

 

今日はどういった風に拡張するのかを調べるのが目的なので、シンプルな機能を追加してみました。

 

下は歩行者を動かすスクリプト(PedestrianController)のコンポーネントです。

f:id:nabesi777:20190208222711p:plain

 

WalkForXは歩くスピードですが、今は0.3という数値が入っています。

この数値をSliderとプログレスバーで表示させてみます。

 

その為に新しくプログラムを書きますが、拡張をするスクリプトと拡張の為のスクリプトはフォルダは分ける必要があるみたいなので、新しく「_Editor」というフォルダを作成してEditorTestというスクリプトを作成しました。

f:id:nabesi777:20190208223223p:plain

 

▶全体のコードの前に簡単に特徴の確認

 

usingにUnityEditorを追加する

f:id:nabesi777:20190208223722p:plain

 

usingの下へ拡張するエディタを指定

f:id:nabesi777:20190208223827p:plain

 

 MonoBehaviourではなくて Editorを継承する

f:id:nabesi777:20190208223936p:plain



コードは基本OnInspectorGUI ()メソッドの中に書く。

またStartメソッドではなく最初に呼びたいものは OnEnable () メソッドの中に書く。(オブジェクトがアクティブになった時に呼ばれ、Startより早く呼ばれるらしい)

f:id:nabesi777:20190208224341p:plain

f:id:nabesi777:20190208224402p:plain


全体のコードはこちらです。

 

 

 コードが書けたらあとは特別なことをする必要はなく、保存するだけで自動的にエディタが変化します↓ スライドバーとプログレスバーが追加されたのが分かります。他にもインスペクターで普段見たことのあるようなものは設置できそうです。参考にさせてもらったサイト様には他にも例がたくさんありました。

f:id:nabesi777:20190208230205p:plain

 

 この歩行者は信号で止まり、その時この0.3という数値は0になりますが、しっかりと拡張したエディタにも反映されました。

 

 

追記

そういえば、値を取得するときに元の変数のアクセス修飾子をprivateからprotectedに変えてました。多分こうしないと値を取れないと思います。試してないので多分ですが。