「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); });