2015年4月12日日曜日

Unity C#のプロパティなどをインスペクターに表示するエディタ拡張「VFW」の使い方

Unityのエディタ拡張「VFW」を紹介します。
(※ビデオコーデックのVFWではありません!)

 説明の前に、まずは一例

〇 サンプル


サンプルコード
 
カスタム属性[Show]を設定した読み取り専用のプロパティmaxHPを宣言。

インスペクター上で数値を変更 
 
Levelの増減に合わせてMaxHPも増減するのがわかります。
また、読み取り専用なのでMaxHPを直接変更することはできないようになっています。
このようにして[SerializedField]属性では対応できない読み取り専用プロパティを
インスペクターに表示できることが確認できました。
 
サンプルで示したmaxHPのような他の変数に依存する変数は、
プロパティ(getアクセサ)とVFWを用いることで
インスペクター上で数値を確認しながら調整を行うことができるようになります。
 

VFWには他にも色々なエディタ拡張の機能を備えています。
ここでは、VFWのダウンロードからプロパティをインスペクターに表示するまでを説明します。


 ・ 使い方

 

〇 提供元


Unityのフォーラムにおいて公開されています。製作者はvexeさん。

(FREE) VFW: Full set of drawers. SaveSystem, Serialize interfaces, generics, auto-props, delegates
http://forum.unity3d.com/threads/free-vfw-full-set-of-drawers-savesystem-serialize-interfaces-generics-auto-props-delegates.266165/

説明には、
どんなメンバーも、シリアライズできないのでさえも表示できる。
変数(フィールド)、プロパティ、メソッド、ジェネリック、インターフェイス、抽象クラス、ディクショナリー、配列、リストなどなど全てがシリアライズ可能で表示させる。
とあるみたいです。

英語が得意な方は是非読み進めて頂き、日本語の詳細な解説をお願いしたいです。


〇 ダウンロード&インポート


上記、提供元のアドレスを開いて頂き、
vexeさんの長い説明を終えたところに下画像のような表示があります。


左の VFW Examples.unitypackage はサンプル。
右の VFW 1.2.9p1.unitypackage が本体になります。
(2015/4/11現在の version は 1.2.9p1 です。)

それぞれダウンロードし、インポートを実行します。

Unity version 5.0.0f4 ではインポートの際に、


このようにVFWに古いAPIが含まれてるぞ!という注意をされますが、
左の「I Made a Backup, Go Ahead!」を押して、
インポートを続行しても特に問題は起こりませんでした。

インポートした /VFW Examples/Scenes/ にサンプルのシーンが用意されており、
Serializationシーンにプロパティのサンプルが含まれています。
プロパティ以外にも色々ありますので、是非いじってみてください。

インポートは以上です。


〇 ソースコード


それでは、プロパティを可視化すべくソースコードを記述します。

・ Monster.cs

using UnityEngine;
using System.Collections;
using Vexe.Runtime.Types;

//[DefineCategory("Settings")] //なくて良いみたい
public class Monster : BetterBehaviour {

    public int level;
    [Show]
    public int maxHP { get { return level * 10; } }
    public int maxMP { get; set; }
    public Vector3 position { get; set; }
    [Show]
    private Color color { get; set; }

    (...省略)
}


記述するのは赤字の3点です。
・ using Vexe.Runtime.Type; の追加
・ クラスの継承を BetterBehaviour に変更
・ 表示したいプロパティに対してカスタム属性[Show]を追加
  (パブリックな自動実装プロパティは属性を追加せずに表示されます。)

コードを書き換えた直後はインスペクターに「Multi object editing not supported .」(だったかな?)
と表示されて正常に表示しませんでしたが、Sceneを開き直すことで表示されるようになりました。

このソースコードでは


インスペクターでこのように表示、編集ができます。
(色々ハミでていますがわかって頂けるかと…!)

こうしてVFWを使用することで、色々なプロパティの表示ができるようになりました。
バッキングフィールドの記載も不要です。Thak you VFW!!


〇 おわりに


vexeさんは、VFWの既知の問題点として

・Undo が完全ではない
・まだ全てがドキュメント化されていない
・まだ重複オブジェクトの編集がサポートされていない
(オブジェクトを複数選択し一括編集することのようです)

以上の3つを挙げられています。留意しましょう。

ライセンスはMITライセンスとなっています。

Copyright (c) 2014 vexe
Released under the MIT license
http://opensource.org/licenses/mit-license.php

ソースコードにこんな感じで書けば良いのかな?

以上、簡単ですがエディタ拡張「VFW」の紹介でした。



ちなみに、プロパティを表示するためのカスタム属性は他にもこちらがあるようです。
http://wiki.unity3d.com/index.php?title=Expose_properties_in_inspector

0 件のコメント:

コメントを投稿