Unityの問題点

Unity で C# を使ってオブジェクト指向プログラミングをする際の問題として、「プロパティがインスペクターで操作できない」という点があります。
したがって、通常インスペクターで操作したい値は public フィールドにするか、場合によっては SerealizeField 属性を付与した private フィールドを作るしかありません。

これについて、過去にはプロパティをインスペクター(エディタ)から操作できるようにするという提案がされて389票もの賛成を集めましたが、最終的に却下されています。そのため、今後のサポートはされない可能性が高いです。
Unity Feedback – Scripting: C#: expose properties to editor

対策

ここで代替案として、隠蔽されたprivateフィールドにSerealizeField属性を付与する方法が上げられています。
例えば次のように書きます。

コードスニペットでもっと便利に

上の方法ですと、記述量が多くて大変です。
Visual Studio ユーザーなら、コードスニペット機能を用いることでこの負担を大きく減らすことができます。

まず、 SerializeFieldProperty.snippet というファイルを作り、次の内容をコピペします。

次にSerializeFieldProperty.snippetを、Visual Studioのプロジェクト等が入っているフォルダ(デフォルトではマイドキュメントにあります)から辿って /Visual Studio 2017/Code Snippets/Visual C#/My Code Snippets/ フォルダの中に入れてください。Visual Studio 2015 など他のバージョンを使っている人は、Visual Studio 2017 の部分を自分のバージョンに読み変えてください。

これでコードスニペットの登録は終わりました。

あとは Visual Studio を再起動して、プロパティを作りたい場所で uprop と打った後に TAB キーを二回押せば、次のようなコードが挿入されます。

ここでプロパティの名前を入力してTAB キーを押すとプロパティ名が一括で変わり、次のようになります。

カーソルが intの上に乗っているはずなので、もしもVector3や自分で作ったクラスなどint以外の型を使うならば、それを入力してエンターキーを押すと一括で変更されます。次の例の場合 double と入力してエンターキーを押しています。

これで簡単にインスペクター(エディタ)から値を変更できるプロパティが実装できるようになりました!

publicフィールドで心を削るのはもう終わりです。じゃんじゃんカプセル化していきましょう。

スポンサーリンク