すぐに固まるパソコンを使う。

すぐに固まるパソコンを使って色々します(実はそんなすぐでもない)。基本的にプログラミング系が多いです。たまに違うことします。

Immediately Freeze!

重くなるUnity 27 MenuとEditor 「エクステンド!!1」

今度は、UnityEditorを拡張(Extend)したいと思います。こうすればできることが増えるでしょう。

 

Script : KplaMeshEditor

基本的にEditorの拡張もScriptがやってくれます。Meshを作成するのをやりたいので、「MeshEditor」などにしておきます。

gist.github.com

解説

まず、インポートUnityEditorを忘れないで下さい。最初の時に無いために、わすれやすいです。

 

そして、継承するクラスEditorWindowにします。EditorWindowOnGUIなどのメソッドなどがあるので基本にします。

 

フィールドは設定する値を定義します。meshNameは初期値に"New Mesh"を設定しておきます。

 

次に、Menu呼び出しメソッドを作ります。staticというのは「静的」ということで、後からは全く変わらない内容を表します。反対はdynamicで「動的」です。

このstaticメソッドMenuItemHeyas/Mesh Editerで呼び出せるようにしているのが内です。ブラケット(bracket)と言い、Attributes*1を設定できます。

中では、EditorWindowクラスのGetWindowメソッドをします。これはそのWindowがなければ作り、あれば最も前に持ってきます。

そして、次にOnGUIメソッドに行きます。これはEditor内のGUILayoutすることができるものです。レイアウトは、GUILayoutを使っています。中のメソッドに名前と、スタイルを入力できます。また、すでにある値にGUIを代入するときは、EditorGUILayoutを使います。

EditorGUILayoutではObjectFieldTextFieldを使っています。ObjectFieldの引数にはtypeof(Mesh)というのが有ります。このtypeofキャストのことで、キャストは引数と()内のインスタンスの型が変換できる(objectとMeshは変換可能(Meshがobjectを使っているから))とき、それを変換します。

ただ、IntからFloatのように簡単*2に変えられるときはキャストを使わなくてもいいです。キャストは、値が変化するときや、他の理由の時に必要になります。

しかし、前にも言ったようにキャスト同じオペランド型でないと出来ないので注意が必要です。

 

結果

このようにして作って実行(?Saveだけでもいいかも)すれば、、、

f:id:norlself66:20150331140023p:plain

このようにメニューバーにHeyasというのが出来、Mesh Editorが選択できます。

そして、、、

f:id:norlself66:20150331140149p:plain

このようなWindowが出てきました。またMesh SearchMeshが選べるようになっています。

*1: [ ]には2つの意味があります。「配列機能」と、「属性機能」です。配列では、定義するときに 型名[] name = {}とします。これによりnameは{}内の数の配列を持ちます。次に属性機能ですが、これはクラスやメソッドに情報を付け足すようなもので、設定したい宣言の前に入れます。この場合、[MenuItem(String name)]となっており、メニューアイテムに追加し、その名前をnameで設定できるということです。

*2:Intは整数で、Floatは浮動小数型(少数有りということ)なので、Intの値をFloatにそのまま変えても値は変わらないということ。逆にFloatをIntにするときは小数点以下がなくなるので、キャストが必要です