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

提供: LWF Wiki
移動: 案内検索
(ページの作成:「==ツリー構築が終わってから取得する== Load()を行った直後はまだLWFアニメーションのツリー構築が終わっていないため<br/> イン...」)
 
(ムービークリップを取得する)
 
(1人の利用者による、間の20版が非表示)
1行: 1行:
==ツリー構築が終わってから取得する==
+
==ムービークリップを取得する==
Load()を行った直後はまだLWFアニメーションのツリー構築が終わっていないため<br/>
+
ムービークリップを取得するには<br/>
インスタンスの取得をすることができません。<br/>
+
 
<br/>
 
<br/>
 +
<LWF.Movieインスタンス>.SearchMovieInstance(arg1,arg2);<br/>
 +
*arg1 : string "インスタンス名"
 +
*arg2 : bool "自身の子以外のインスタンスを検索対象にするか"
 +
<br/>
 +
または<br/>
 +
<br/>
 +
<LWF.Movieインスタンス>["インスタンス名"];<br/>
 +
<span style="color:blue">※<LWF.Movieインスタンス>.SearchMovieInstance("インスタンス名", false); と同義</span><br/>
 +
<br/>
 +
を使用します。<br/>
 +
<br/>
 +
<br/>
 +
しかし、Load()を行った直後はまだLWFの構築が終わっていないため、rootに置かれているインスタンスを取得をすることができません。<br/>
 +
なので、構築完了を待ってから取得する必要があります。<br/>
 +
※rootの参照は構築前でも可能です。<br/>
 +
<br/>
 +
【サンプル】<br/>
 
rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。<br/>
 
rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。<br/>
下記のように書くと取れるのですがLoad直後ではNullが返ってきます。<br/>
+
下記の例だと構築が完了していないためLogにはNullが返ってきます。<br/>
  //Nullが帰ってくる
+
  //ダメな例
 +
(Load処理)
 +
 
  Debug.Log(lwf.rootMovie["chara"]);
 
  Debug.Log(lwf.rootMovie["chara"]);
 
<br/>
 
<br/>
なのでLoad完了のCallbackを待った後、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。<br/>
+
<br/>
Start()に下記のコードを追加します。<br/>
+
なので、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。<br/>
  AddLoadCallback (delegate(LWFObject obj) {
+
  //良い例
    lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
+
(Load処理)
        Debug.Log (lwf.rootMovie["chara"]);
+
    });
+
lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
 +
    Debug.Log (lwf.rootMovie["chara"]);
 
  });
 
  });
 +
 
こうすることでcharaインスタンスを参照して制御することができるようになります。<br/>
 
こうすることでcharaインスタンスを参照して制御することができるようになります。<br/>
 
<br/>
 
<br/>
Loadの引数にもlwfLoadCallbackというものがあるのでこちらを利用しても構いません。<br/>
+
<br/>
 +
<br/>
 +
 
 +
==ボタンを取得する==
 +
ボタンを取得するには<br/>
 +
<LWF.Movieインスタンス>.SearchButtonInstance(arg1,arg2);<br/>
 +
*arg1 : string "インスタンス名"
 +
*arg2 : bool "自身の子以外のインスタンスを検索対象にするか"
 +
を使用します。<br/>
 +
<br/>
 +
<br/>
 +
【サンプル】<br/>
 +
rootにbuttonというインスタンス名のボタンが置いてあると仮定します。<br/>
 +
ムービークリップ同様、構築が完了していないとLogにはNullが返ってきます。<br/>
 +
(Load処理)
 +
 +
Debug.Log(lwf.rootMovie.SearchButtonInstance("button", false));
 +
<br/>
 +
<br/>
 +
なので、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。<br/>
 +
(Load処理)
 +
 +
lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
 +
    Debug.Log(lwf.rootMovie.SearchButtonInstance("button", false));
 +
});
 +
<br/>
 +
<br/>
 +
<br/>
 +
 
 +
==gotoAndPlayでジャンプするフレームに置いてあるインスタンスを取得する==
 +
GotoAndPlay()などでジャンプした先にいかないと存在しないインスタンスはGotoAndPlay()の直後に<br/>
 +
取得しようとしてもNullが返ってきてしまいます。<br/>
 +
<br/>
 +
rootの"attack"というラベルに存在する"sword"というインスタンス名のムービークリップをすると仮定します。<br/>
 +
<br/>
 +
下記のコードだとインスタンスを取得することはできません。<br/>
 +
lwf.rootMovie.GotoAndStop("attack");
 +
Debug.Log(lwf.rootMovie["sword"]);
 +
<br/>
 +
この場合、ジャンプしてその先の構築が行われるまで待つ必要があります。<br/>
 +
下記がサンプルになります。<br/>
 +
lwf.rootMovie.GotoAndStop ("attack");
 +
lwf.rootMovie.AddEventHandler("render", delegate(LWF.Movie movie) {
 +
    lwf.rootMovie.ClearEventHandler("render");
 +
    Debug.Log (lwf.rootMovie["sword"]);
 +
});
 +
<br/>
 +
または下記のように設定してください
 +
lwf.rootMovie.GotoAndStop("attack");
 +
var eventId = lwf.AddMovieEventHandler("_root.char.sword", postLoad: (movie) => {
 +
    lwf.RemoveMovieEventHandler("_root.sword", eventId);
 +
    Debug.Log (movie);
 +
});

2014年10月2日 (木) 17:04時点における最新版

ムービークリップを取得する

ムービークリップを取得するには

<LWF.Movieインスタンス>.SearchMovieInstance(arg1,arg2);

  • arg1 : string "インスタンス名"
  • arg2 : bool "自身の子以外のインスタンスを検索対象にするか"


または

<LWF.Movieインスタンス>["インスタンス名"];
※<LWF.Movieインスタンス>.SearchMovieInstance("インスタンス名", false); と同義

を使用します。


しかし、Load()を行った直後はまだLWFの構築が終わっていないため、rootに置かれているインスタンスを取得をすることができません。
なので、構築完了を待ってから取得する必要があります。
※rootの参照は構築前でも可能です。

【サンプル】
rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。
下記の例だと構築が完了していないためLogにはNullが返ってきます。

//ダメな例
(Load処理)

Debug.Log(lwf.rootMovie["chara"]);



なので、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。

//良い例
(Load処理)

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

こうすることでcharaインスタンスを参照して制御することができるようになります。



ボタンを取得する

ボタンを取得するには
<LWF.Movieインスタンス>.SearchButtonInstance(arg1,arg2);

  • arg1 : string "インスタンス名"
  • arg2 : bool "自身の子以外のインスタンスを検索対象にするか"

を使用します。


【サンプル】
rootにbuttonというインスタンス名のボタンが置いてあると仮定します。
ムービークリップ同様、構築が完了していないとLogにはNullが返ってきます。

(Load処理)

Debug.Log(lwf.rootMovie.SearchButtonInstance("button", false));



なので、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。

(Load処理)

lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
    Debug.Log(lwf.rootMovie.SearchButtonInstance("button", false));
});




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