2007年05月07日
llRemoteLoadScriptPinで別スクリプト呼出
llRemoteLoadScriptPinで別スクリプト呼出
複数のスクリプトの扱いについて、情報が散逸しているので自分用にまとめる。
情報源は、http://wiki.secondlife.com/wiki/ やhttp://www.lslwiki.net/lslwiki/wakka.php や
LSLGuide.pdf。
(間違いがあったら教えてください~)
・オブジェクト内には、スクリプト名のABC順に並べ変えられて格納される。
大文字小文字は関係ない。
・一番上に格納されているスクリプトが実行される
・同じオブジェクトに入っているスクリプトを呼び出す際は、PINを指定しておかなくてOK。
KEYもNULL_KEYでOK。
・別なオブジェクトに入っているスクリプトを呼ぶ場合は、呼び先がRezされている必要がある
(インベントリに入っているだけではダメ)
・呼び出すタイミング(イベント)によって、動作が変わるので注意。下記の例参照。
state_entry()で別スクリプトを呼び出すと、touch_start()の処理はinvokerが終わってからchild
touch_start()で別スクリプトを呼び出すと、
・・・だと思ったが、いったんTakeしてからでないと、最後にオブジェクトに入れたスクリプト
を最初に実行しているように見える。不明。
・PIN(Personal Identification Number)はinteger
・スクリプトをまたがって変数を受け渡す方法はなさそう。
llRemoteLoadScriptPin関数の最後の引数を使えば、llGetStartParameter関数でintegerを受け取れる
ID設定に使うなら、オブジェクトの属性としてllSetAlpha関数/llGetAlpha関数とかで受け渡したほうがいいかも。
・llRemoteLoadScriptPin関数の先頭の引数の「key target」に何を指定すればいいのかは不明。
複数のスクリプトの扱いについて、情報が散逸しているので自分用にまとめる。
情報源は、http://wiki.secondlife.com/wiki/ やhttp://www.lslwiki.net/lslwiki/wakka.php や
LSLGuide.pdf。
(間違いがあったら教えてください~)
・オブジェクト内には、スクリプト名のABC順に並べ変えられて格納される。
大文字小文字は関係ない。
・一番上に格納されているスクリプトが実行される
・同じオブジェクトに入っているスクリプトを呼び出す際は、PINを指定しておかなくてOK。
KEYもNULL_KEYでOK。
・別なオブジェクトに入っているスクリプトを呼ぶ場合は、呼び先がRezされている必要がある
(インベントリに入っているだけではダメ)
・呼び出すタイミング(イベント)によって、動作が変わるので注意。下記の例参照。
state_entry()で別スクリプトを呼び出すと、touch_start()の処理はinvokerが終わってからchild
touch_start()で別スクリプトを呼び出すと、
・・・だと思ったが、いったんTakeしてからでないと、最後にオブジェクトに入れたスクリプト
を最初に実行しているように見える。不明。
・PIN(Personal Identification Number)はinteger
・スクリプトをまたがって変数を受け渡す方法はなさそう。
llRemoteLoadScriptPin関数の最後の引数を使えば、llGetStartParameter関数でintegerを受け取れる
ID設定に使うなら、オブジェクトの属性としてllSetAlpha関数/llGetAlpha関数とかで受け渡したほうがいいかも。
・llRemoteLoadScriptPin関数の先頭の引数の「key target」に何を指定すればいいのかは不明。
//00Invoker-1 呼び出す側のスクリプトその1
default
{
state_entry()
{
llOwnerSay("rez " + llGetObjectName() + "with " + llGetScriptName());
llRemoteLoadScriptPin(NULL_KEY, "child-script", 3, FALSE, 0);
}
touch_start(integer total_number)
{
llOwnerSay("Touch start at " + llGetScriptName());
llOwnerSay("Touch end at " + llGetScriptName());
}
}
//00Invoker-2 呼び出す側のスクリプトその2
default
{
state_entry()
{
llOwnerSay("rez " + llGetObjectName() + "with " + llGetScriptName());
}
touch_start(integer total_number)
{
llOwnerSay("Touch start at " + llGetScriptName());
llRemoteLoadScriptPin(NULL_KEY, "child-script", 3, FALSE, 0);
llOwnerSay("Touch end at " + llGetScriptName());
}
}
//child-script 呼び出される側のスクリプト
default
{
state_entry()
{
llOwnerSay("rez " + llGetObjectName() + "with " + llGetScriptName());
}
touch_start(integer total_number)
{
llOwnerSay("Touch start at " + llGetScriptName());
llOwnerSay("Touch end at " + llGetScriptName());
}
}
Miz さんのBLOGで解説記事が載っているのでトラックバックを追加しました。
ソース(2):【日本語対応メッセージボード v05】
ソース(1):【日本語対応メッセージボード v05】
説明書:【日本語対応メッセージボード v05】
別プリムにあるスクリプト間で定数を素直に共有できないか?
1.17でllGetNotecardLineで日本語取出せず
メモリ管理には謎がある
ソース(1):【日本語対応メッセージボード v05】
説明書:【日本語対応メッセージボード v05】
別プリムにあるスクリプト間で定数を素直に共有できないか?
1.17でllGetNotecardLineで日本語取出せず
メモリ管理には謎がある
Posted by march at 19:12│Comments(0)
│LSL