「Unity LWF内のインスタンスを取得する」の版間の差分

提供: LWF Wiki
移動: 案内検索
(gotoAndPlayでジャンプするフレームに置いてあるインスタンスを取得する)
(gotoAndPlayでジャンプするフレームに置いてあるインスタンスを取得する)
32行: 32行:
 
  Debug.Log(lwf.rootMovie["sword"]);
 
  Debug.Log(lwf.rootMovie["sword"]);
 
この場合、ジャンプしてその先の構築が行われるまで待つ必要があります。<br/>
 
この場合、ジャンプしてその先の構築が行われるまで待つ必要があります。<br/>
 +
lwf.rootMovie.GotoAndStop ("attack");
 +
lwf.rootMovie.AddEventHandler("render", delegate(LWF.Movie movie) {
 +
    lwf.rootMovie.ClearEventHandler("render");
 +
    Debug.Log (lwf.rootMovie["sword"]);
 +
});
 +
または下記のように設定してください
 +
lwf.rootMovie.GotoAndStop("attack");
 +
var eventId = lwf.AddMovieEventHandler("_root.char.sword", postLoad: (movie) => {
 +
    lwf.RemoveMovieEventHandler("_root.sword", eventId);
 +
    Debug.Log (movie);
 +
});

2014年10月1日 (水) 13:38時点における版

rootに置いてあるインスタンスを取得する

Load()を行った直後はまだLWFアニメーションのツリー構築が終わっていないため
rootに置かれているインスタンスの取得をすることができません。
※rootの参照は可能です。

rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。
下記のように書くと取れるのですがLoad直後ではNullが返ってきます。

//Nullが帰ってくる
Debug.Log(lwf.rootMovie["chara"]);


なのでLoad完了のCallbackを待った後、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。
Start()に下記のコードを追加します。

AddLoadCallback (delegate(LWFObject obj) {
    lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
        Debug.Log (lwf.rootMovie["chara"]);
    });
});

こうすることでcharaインスタンスを参照して制御することができるようになります。
LoadCallbackの時点でrootMovieは参照可能となり、postLoadの時点でrootMovieに配置されているインスタンスを参照可能になります。



gotoAndPlayでジャンプするフレームに置いてあるインスタンスを取得する

GotoAndPlay()などでジャンプした先にいかないと存在しないインスタンスはGotoAndPlay()の直後に
取得しようとしてもNullが返ってきてしまいます。

rootの"attack"というラベルに存在する"sword"というインスタンス名のムービークリップをすると仮定します。

下記のコードだとインスタンスを取得することはできません。

lwf.rootMovie.GotoAndStop("attack");
Debug.Log(lwf.rootMovie["sword"]);

この場合、ジャンプしてその先の構築が行われるまで待つ必要があります。

lwf.rootMovie.GotoAndStop ("attack");
lwf.rootMovie.AddEventHandler("render", delegate(LWF.Movie movie) {
    lwf.rootMovie.ClearEventHandler("render");
    Debug.Log (lwf.rootMovie["sword"]);
});

または下記のように設定してください

lwf.rootMovie.GotoAndStop("attack");
var eventId = lwf.AddMovieEventHandler("_root.char.sword", postLoad: (movie) => {
    lwf.RemoveMovieEventHandler("_root.sword", eventId);
    Debug.Log (movie);
});