技術的な話題 に関する投稿を表示しています

Inspector拡張の

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

MMD for Unity (http://sourceforge.jp/projects/mmd-for-unity/) で、メニューアイテムからじゃなくてインスペクターでPMD->PrefabとVMD->Animationが出来たらいいなー、と思ってあれこれ弄って詰まったのでその話を。

 

Unity拡張ってどうやんねん!という話はしないので、http://www.slideshare.net/lucifuges/extending-the-unity-editor とかみてください。ほぼすべてなんでも出来るようになるので、ここ設定するのに使いづらいなーというポイントがあれば、改善できる可能性があります。
試しにやってみましょう。

本題です。まず必要なのは、Projectウィンドウで選択されたものをInspectorウィンドウに表示する方法です。

通常のInspector拡張であれば、

[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor
{
  public override void OnInspectorGUI()
  {
    EditorGUILayout.LabelField("Its MyScript");
  }
}

というような感じでできます。

 

このときのCustomEditor属性の第一引数に適当なクラス型を入れることで、そのクラス型に対する拡張になります。この場合は、MyScriptというクラス専用のエディタ拡張になります。
(実際に試していないのですが、)MyScriptを適当なオブジェクトにくっつけてやると、MyScriptEditorのインスタンスが勝手に生成されて、Inspectorには"Its MyScript"というラベルが表示されているはずです。

で、これを、Projectウィンドウにどう引っ掛けるか。
色々試した結果、typeof(UnityEngine.Object)を指定すればいいようです。
但し、これは全てのアセットを対象に出来ないようで、Unity側でInspectorが用意されていないもの、が該当になります。
(例えば、認識されない拡張子、*.unityファイル(シーンを保存したもの)、フォルダ、など)

CustomEditor属性の第二引数にtrueを指定することで、そのクラスを継承した子クラスにも適用されるらしいですが、その指定をしてもMaterialだったりTextureだったりには設定出来ませんでした。

 

さて、[CustomEditor(typeof(Object))] と指定すれば引っ掛けられることがわかったので、後はPMDLoaderWindow.csに含まれるGUI部分を移すだけで出来ました。

 

が!! 問題はここから。
別のファイルに分けたほうがよさそうなのでVMD用InspectorをPMD用Inspectorからコピーして作ったところ、VMD用Inspectorが動作しないじゃありませんか。

コンストラクタでDebug.Logをするように書いてもVMD用Inspectorのインスタンスが作られる雰囲気もないので、うーん。
推測として、CustomEditor属性の挙動が、最初に読み込まれた(実行された)方が優先されて、どうこう、みたいな。

MMD for Unityの中に閉じた問題なら、InspectorBaseみたいなものを作って、そこからPMDorVMDに振り分ければいいと思います。ですが、もし他のエディタ拡張スクリプトを導入なり自作なりで、そちらでも同様に[CustomEditor(typeof(Object))]が行われていた場合を考えるとぐぬぬ。

 

Editorを継承すると、"target"という変数が使えるようになるのですが、Unityに認識されない拡張子またはフォルダの時に、これに入ってくる値の型が、UnityEngine.DefaultAsset という内部型みたいです。
グーグル大先生に聞いてもなにひとつそれっぽい答えがでてこなかったので、それが分かっても問題解決への鍵にはなりませんでした。

 

某所になんかいい方法ないですかと質問を投げたのですが、「そもそもの話、そんなことしようとする人口数~w」という気がするのでうーん。諦める方向ですかねー…

あ、カスタムインポータを書いて、UnityにPMDが放り込まれたら自動的に読み込むというのもアリ...?
どちらにせよ、現状で特につらぽよポイントは無さそうなので、それが出来なくても、あ、はい、程度な気がしますね。

 

参考URLとか:

  • http://docs.unity3d.com/Documentation/Components/gui-ExtendingEditor.html
  • http://docs.unity3d.com/Documentation/ScriptReference/CustomEditor.CustomEditor.html
  • http://answers.unity3d.com/questions/11680/how-can-i-make-a-custom-inspector-for-this-object.html
  • http://forum.unity3d.com/threads/101654-Showing-Unknown-Extensions-in-the-Inspector

 
 

そうだそうだ、「Materials」「Materials 1」「Materials 2」「Materials 3」....と増え続けていくバグは直ったので、r143でコミットしました。

パン#3にいきました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

なんだかんだで10人くらいかと思っていたら4人(飛び入りで+1、終了前に+1、合計6人)で、非常に残念でした。

[やったこと]
ExcelVBAを使って、BefungeからHSPに変換するサムシングをつくってみる

[残念ポイント]
>成果物の巻
・なんでExcelVBAを選んだ
・どうやったらBefungeをHSPに変換する需要がでてくるんだ
・Befungeの仕様を網羅しているわけじゃない
・出力されるコードがやばい(ループとかメソッドかましてない)

>言語の巻
・ExcelVBAすごい。いい加減だったり厳密だったり。
・hoge()で呼べると思ったらCall hoge()とかだったり、一度は通ったはずなんだけど忘れていた
・Befungeは、まあ、はい。Brainfxckなんかと比べると、ネタとしていいと思うんだけど実用性が皆無
・HSPは今回はがっつりやってないのでわかりません
・デフォルトでWin32API叩けたりCOMオブジェクトも使えるし、とてもいいんじゃないですかね。簡単な命令郡みたいですし。

>イベント自体の巻
・15分ほど遅刻でしたごめんなさい
・新聞紙からダンボールにグレードダウン(アップ?)してました
・貧民パンにプロ仕様が入っていました
・首いたい
・ごろ寝モード
・座る
・首いたい
・立つ
・座る
・首いたい

>他の方の巻
・「ISLISPなんてなかった」
・「MercuryでML実装したけどfibonacci(9)で落ちる」
・「Java8が残念じゃなだけどそもそもJavaが残念」
・「黒歴史言語でBrainfxxkを実装したかった来れませんでした」

>その他の巻
・まとめやustは無さそうなので、ハッシュタグ追ってください()
・「#残パン会」です

[おまけ]
ぎっとはぶにあっぷしました。
https://github.com/sters/zanpan/blob/master/zanpan3/

ちなみに、
https://github.com/sters/zanpan/blob/master/zanpan2/
とかには前回の第二回の成果物をあれこれ弄ったらなんだかなー、となったものが入っています。

gomiba.co.in is back

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

なんだかいろいろあってここ3日くらい?ページに繋がらないことになってました。
多分大丈夫でしょう。

一番困ったのは、なにもすすまなかったことですね。
Redmineとかに繋げなかったので仕方ないですよねー(言い訳

や、実際のところ、dip.jpとかDDNSサービスを使えばどうとでもなったはずですが..まあ....

VisualStudio2010でもTypeScriptが書きたい!

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

TypeScriptというMS製のaltjsが最近でてきまして。
それを使えるのがVS2012からっぽいので、はてさてどないしましょうか。という。

すなおに2012を入れるとか、VSをあきらめてnpmで入れるとか、すればいいのですが、いろいろあってまだ2010のほうがいいなーと状況で、さてどうしようか、というものです。

TypeScript for Visual Studio 2012より、"TypeScriptSetup.0.8.0.msi"をDL。
DLしたインストーラを7zipで展開して、*.visx_FILEを*.visxにリネーム。
*.visxファイルを実行し、インストールすればVS2010でもプロジェクトを作ったり、tsファイルを追加したり、ビルドできたりできます。
そのあとで、0.8.*をDLして普通にインストールすると、そのバージョンのコンパイラが使えます。
(0.8.*でこれを実行しようにも、visx_FILEがなかったようなあったような…確認不足ですんません)

新規TypeScriptプロジェクトを作るには
「新しいプロジェクト」->「VisualC#」->「HTML Application with TypeScript」
tsファイルの追加には
「新しい項目の追加」->「VisualC#」->「TypeScript File」
という、ぱっと見どこにあるのかわからなかったのでメモ。

そういえば、今後でジェネリクスが入ってきたり、非同期(async/await)が入ってくるらしいです。(ロードマップ参照)
インテリセンスでバリバリ行けてしまいますし、このままTypeScript充ですかね…。ひょええええ。

ブログ移行ナー

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

タイトルどおり、FC2ブログから、VPS上のWordpressへと移行中です。

デザインは ごみばこいん と統一
(というなの手抜き、じゃないですよ?)して、Bootstrapでうんぬん

1 2 3 4 5 6 7 8 9 10 11 12 13