重くなるUnity 27 MenuとEditor 「エクステンド!!1」
今度は、UnityのEditorを拡張(Extend)したいと思います。こうすればできることが増えるでしょう。
Script : KplaMeshEditor
基本的にEditorの拡張もScriptがやってくれます。Meshを作成するのをやりたいので、「MeshEditor」などにしておきます。
解説
まず、インポートでUnityEditorを忘れないで下さい。最初の時に無いために、わすれやすいです。
そして、継承するクラスもEditorWindowにします。EditorWindowはOnGUIなどのメソッドなどがあるので基本にします。
フィールドは設定する値を定義します。meshNameは初期値に"New Mesh"を設定しておきます。
次に、Menu呼び出しメソッドを作ります。staticというのは「静的」ということで、後からは全く変わらない内容を表します。反対はdynamicで「動的」です。
このstaticメソッドをMenuItemのHeyas/Mesh Editerで呼び出せるようにしているのが内です。はブラケット(bracket)と言い、Attributes*1を設定できます。
中では、EditorWindowクラスのGetWindowメソッドをします。これはそのWindowがなければ作り、あれば最も前に持ってきます。
そして、次にOnGUIメソッドに行きます。これはEditor内のGUIをLayoutすることができるものです。レイアウトは、GUILayoutを使っています。中のメソッドに名前と、スタイルを入力できます。また、すでにある値にGUIを代入するときは、EditorGUILayoutを使います。
EditorGUILayoutではObjectFieldとTextFieldを使っています。ObjectFieldの引数にはtypeof(Mesh)というのが有ります。このtypeofはキャストのことで、キャストは引数と()内のインスタンスの型が変換できる(objectとMeshは変換可能(Meshがobjectを使っているから))とき、それを変換します。
ただ、IntからFloatのように簡単*2に変えられるときはキャストを使わなくてもいいです。キャストは、値が変化するときや、他の理由の時に必要になります。
しかし、前にも言ったようにキャストは同じオペランド型でないと出来ないので注意が必要です。
結果
このようにして作って実行(?Saveだけでもいいかも)すれば、、、
このようにメニューバーにHeyasというのが出来、Mesh Editorが選択できます。
そして、、、
このようなWindowが出てきました。またMesh SearchでMeshが選べるようになっています。
*1: [ ]には2つの意味があります。「配列機能」と、「属性機能」です。配列では、定義するときに 型名[] name = {}とします。これによりnameは{}内の数の配列を持ちます。次に属性機能ですが、これはクラスやメソッドに情報を付け足すようなもので、設定したい宣言の前に入れます。この場合、[MenuItem(String name)]となっており、メニューアイテムに追加し、その名前をnameで設定できるということです。
*2:Intは整数で、Floatは浮動小数型(少数有りということ)なので、Intの値をFloatにそのまま変えても値は変わらないということ。逆にFloatをIntにするときは小数点以下がなくなるので、キャストが必要です