タグ「MMD4Mecanim2013/09/23版(α)」が付けられているもの

MMD4Mecanim+Vuforia 環境での不具合

Unity4+MMD4Mecanim PMX対応版+Vuforia 環境にて、何もないロード画面から Application.LoadLevel() して Lat式ミクを表示する.
何故か表示できず(この原因究明中に発見)、そのままアプリを終了(停止?)すると
MMD4MecanimBulletPhysics のコンポーネントが Unity のプロジェクトビューに残ってしまう.

個人的なメモ.
結局原因が不明で、対処療法.

要因としては、OnApplicationQuit() が呼ばれていないから.
これって MonoBehaviour が用意しているのに、呼ばれないことなんてあるの?
どっかでオーバーライドしてて呼ばれてないだけ?
え、どういうこと?
新規で作った GameObject に、適当なスクリプト貼り付けて OnApplicationQuit でログを出そうとしても、
ちゃんとログが出力されないという...

えぇー...何が起きているんだ...

たぶんこっちで、なんか妙なことしてるんだろうなぁと思いつつ、この場合の対処をすることに.

ゲーム終了時に OnApplicationQuit() が呼ばれないと、


>MMD4MecanimBulletPhysics._applicationQuit
>MMD4MecanimModel._applicationQuit

の2点が true にならない.

以下、ワークフロー.
-> ゲームプレイ中だと判断される
-> MMD4MecanimModel.OnDestroy() の中で MMD4MecanimBulletPhysics.instance を取得しようとする
-> MMD4MecanimBulletPhysics の get で if( _instance == null && !_applicationQuit )... ってなってるけど、そのまま if の処理を続行
-> new Gameobject("MMD4MecanimBulletPhysics"); で、オブジェクト作成されちゃって、誰も捨ててくれない... (´;ω;`)ウッ...

で、ここまで調べておいてふと気づく。

これ、根本的な解決にならない。

というわけで、もとより気になっていた
ImageTarget が 非アクティブ状態になってる件
を追跡してみる.

まず、カスタムメイドの TrackableEventHandler を利用しているのが原因かな、と思ったのでカスタムを切ってから
Vuforia 付属の DefaultTrackableEventHandler.cs をアタッチしてみる。

結果 -> ダメ. 同じ現象が起きる

ARCamera に付属してた、どの Vuforia のバージョンからか分からないけど KeepAliveBehaviour ってやつのパラメータに
Keep AR Camera Alive とかいうのがあって、いつの間にかチェックが入ってた。
これを切ってみる。

結果 -> これだったーーーーーー!!!!!!!!!!!!!!!!バカバカバカ!!!!!!!!


KeepAliveBehaviour について
https://developer.vuforia.com/resources/api/unity/class_keep_alive_behaviour

なるほど、複数のシーン間でデータセットやターゲットデータを保持したまま遷移できるようになるのね。

いらねぇよ! いるかもしれねぇけど、今使わねぇよ!
しかもこれ、チェックしたら ILoadLevelEventHandler を実装しなきゃじゃん!

よし、切ろう。
ってことで解決ー。

Vuforia...ドキュメントが英語なのは結構骨が折れるぜorz