2007年11月25日
LSL:llSitTargetの落とし穴・・・
知ってる人は、こんな落とし穴にハマったりしないと思うのですが・・・
やっちゃいましたー
露天風呂を作る記事を書いたのですが、カタチ作りまでは、なんとかなったのねー
あと必要なのは、、、、
(1)水面を動かす
(2)湯気を出す
(3)温泉に入っているポーズをセットする
の3つだけなんですよねー
水面を動かすのは、llSetTextureAnim()という関数。
この間ダンスボールを作ったときに実験したので大丈夫よねー
湯気を出すのは、llParticleSystem()という関数。
ロケットを作ったときにパーティクル勉強したからこれも大丈夫。
ポーズをセットするのは、llStartAnimation()とかのAO(Animation Override)系のスクリプト。
ホウキとかこの間のAFKのときとかいつも使ってるので、これも問題なし。
座ったときに位置を設定するのにllSitTarget()という関数を使うんですが、
だいぶん前に椅子をつくったときにやったので、これも大丈夫・・・
と思ってたんですよねー
でも、使い慣れていない関数には落とし穴。
・・・はい、きっちりハマりました

座ったときにポーズしてくれるはずなんですが、、、普通に座ってるだけですよねー
あちこちにデバッグ用のllOwnerSay()を入れて変数を確認すると・・・
なんと、座ったアバターのキーが取得できてないんですねー
llAvatarOnSitTarget()
この関数は、キーとして座ったアバターのUUIDを返す関数なのですが、
ちゃんと座っているにもかかわらず、戻り値が、NULL_KEYになっちゃってます。
なんでー
Wikiで確認すると・・・
誰も座ってないときとか、sit targetがないときは、NULL_KEYを返す
みたいなことが書いてあります。
sit targetは、llSitTarget関数で設定するんですよねー
はい、あの、座る位置を指定するアレです。
llSitTarget(<0.0, 0.0, 1.0>, ZERO_ROTATION);
みたいな書きかたをよくしますよねー
関数の定義は、こんな感じです。
Function: llSitTarget( vector offset, rotation rot );
この関数。実は落とし穴があったんですよねー
説明の欄には1行こんなことが書いてあります。
http://wiki.secondlife.com/wiki/LlSitTarget
Set the sit location for this object (if offset == <0.0, 0.0, 0.0> clear it)
つまり、最初のパラメータoffsetというのをゼロにすると、クリアされます
ということなのねー
さらに、LSL Wiki版のllSitTargetのとこを見てみると、、、
(LSLのWikiはオフィシャル版とLSL Wiki版とほかにもあるみたいですねー)
sit targetsは、プリムのプロパティでスクリプトじゃない!!
とか書いてます。
このため、座っている状態でスクリプトを削除しても、sit targetsは、残っているということらしいです。
つまり、llSitTarget()という関数は
プリムのプロパティをセットする動作をして、
パラメータをゼロにしたときクリアされるということです。
座るのがプリムの中心でいいやーって思っても<0,0,0>は使えなくて、
llSitTarget(<0,0,.1>, ZERO_ROTATION);
とせなアカンってことでしたー
以下LSLWIkiのサンプルからの転載です。
日本語訳は適当なので・・・ごめんねー
座った人のキーを調べて立たせる・・・という動きをする役にたたないスクリプトです^^
もいっかい書いとくねー
llSitTarget(<0,0,0>,ZERO_ROTATION);
は、リセットになります!!
試験にでるよー
ふぅ、やっと温泉にはいれそーやわー

服を着たままでごめんねー
やっちゃいましたー
露天風呂を作る記事を書いたのですが、カタチ作りまでは、なんとかなったのねー
あと必要なのは、、、、
(1)水面を動かす
(2)湯気を出す
(3)温泉に入っているポーズをセットする
の3つだけなんですよねー
水面を動かすのは、llSetTextureAnim()という関数。
この間ダンスボールを作ったときに実験したので大丈夫よねー
湯気を出すのは、llParticleSystem()という関数。
ロケットを作ったときにパーティクル勉強したからこれも大丈夫。
ポーズをセットするのは、llStartAnimation()とかのAO(Animation Override)系のスクリプト。
ホウキとかこの間のAFKのときとかいつも使ってるので、これも問題なし。
座ったときに位置を設定するのにllSitTarget()という関数を使うんですが、
だいぶん前に椅子をつくったときにやったので、これも大丈夫・・・
と思ってたんですよねー
でも、使い慣れていない関数には落とし穴。
・・・はい、きっちりハマりました

座ったときにポーズしてくれるはずなんですが、、、普通に座ってるだけですよねー
あちこちにデバッグ用のllOwnerSay()を入れて変数を確認すると・・・
なんと、座ったアバターのキーが取得できてないんですねー
llAvatarOnSitTarget()
この関数は、キーとして座ったアバターのUUIDを返す関数なのですが、
ちゃんと座っているにもかかわらず、戻り値が、NULL_KEYになっちゃってます。
なんでー
Wikiで確認すると・・・
誰も座ってないときとか、sit targetがないときは、NULL_KEYを返す
みたいなことが書いてあります。
sit targetは、llSitTarget関数で設定するんですよねー
はい、あの、座る位置を指定するアレです。
llSitTarget(<0.0, 0.0, 1.0>, ZERO_ROTATION);
みたいな書きかたをよくしますよねー
関数の定義は、こんな感じです。
Function: llSitTarget( vector offset, rotation rot );
この関数。実は落とし穴があったんですよねー
説明の欄には1行こんなことが書いてあります。
http://wiki.secondlife.com/wiki/LlSitTarget
Set the sit location for this object (if offset == <0.0, 0.0, 0.0> clear it)
つまり、最初のパラメータoffsetというのをゼロにすると、クリアされます
ということなのねー
さらに、LSL Wiki版のllSitTargetのとこを見てみると、、、
(LSLのWikiはオフィシャル版とLSL Wiki版とほかにもあるみたいですねー)
sit targetsは、プリムのプロパティでスクリプトじゃない!!
とか書いてます。
このため、座っている状態でスクリプトを削除しても、sit targetsは、残っているということらしいです。
つまり、llSitTarget()という関数は
プリムのプロパティをセットする動作をして、
パラメータをゼロにしたときクリアされるということです。
座るのがプリムの中心でいいやーって思っても<0,0,0>は使えなくて、
llSitTarget(<0,0,.1>, ZERO_ROTATION);
とせなアカンってことでしたー
以下LSLWIkiのサンプルからの転載です。
日本語訳は適当なので・・・ごめんねー
座った人のキーを調べて立たせる・・・という動きをする役にたたないスクリプトです^^
default {
state_entry() {
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION); //llAvatarOnSitTargetのために絶対必要!!
//注意:両方のパラメータをゼロにすると、SitTargetは、セットされずにリセットされます。
//(プロパティやからリセットじゃなくて英文のとおり"除去"の方が正確かなー)
}
changed(integer change) { // なにか変化した
if (change & CHANGED_LINK) { // そんで、リンクが変化した
llSleep(0.5); // llUnSitをうまく動かすためにディレイがあった方がいいみたい
if (llAvatarOnSitTarget() != NULL_KEY) { // 誰かが座った!!
llSay(0, "Get off!");
llUnSit(llAvatarOnSitTarget()); // 座った人をすぐたたせる
}
}
}
}
もいっかい書いとくねー
llSitTarget(<0,0,0>,ZERO_ROTATION);
は、リセットになります!!
試験にでるよー
ふぅ、やっと温泉にはいれそーやわー

服を着たままでごめんねー
プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^
球面の内側にテクスチャを貼るときの覚書です^^
LSL:日本語文字列をバイト数で長さ制限
スナップショットをレンズぼかしで加工してみました^^
LSLのカラーに変換するツールを作ってみました^^
ブラウザからインワールドの検索を使ってます^^
球面の内側にテクスチャを貼るときの覚書です^^
LSL:日本語文字列をバイト数で長さ制限
スナップショットをレンズぼかしで加工してみました^^
LSLのカラーに変換するツールを作ってみました^^
ブラウザからインワールドの検索を使ってます^^
Posted by jinko at 01:34│Comments(3)
│Tips
この記事へのコメント
名前、ひらがなにしてみた
かわいいしょ?w
あはは^^
ふたりでほっこりおしゃべりしまくったね~やっぱお風呂で裸の付き合いってやつだと時間も忘れるね~ww
お風呂セットで気分ももりあがったしね♪
ジンコこれからもよろしくね~ん(*´Д`*)♪
ははは^^
かわいいしょ?w
あはは^^
ふたりでほっこりおしゃべりしまくったね~やっぱお風呂で裸の付き合いってやつだと時間も忘れるね~ww
お風呂セットで気分ももりあがったしね♪
ジンコこれからもよろしくね~ん(*´Д`*)♪
ははは^^
Posted by まろあ at 2007年11月25日 05:08
jinkoさん こんにちは
昨夜はMillsのフレンドを受け入れてくださって、ありがとう。
PCでの物作りって本当に難解ですねー。
素人にはチンぷんカンブンですわ。
でも、露天風呂いい感じに仕上がっているみたいですねー。
売り出されたら、俺のスカイボックスに設置を考えよーかなー。
露天風呂で星空を見上げるのもおつですよね。
昨夜はMillsのフレンドを受け入れてくださって、ありがとう。
PCでの物作りって本当に難解ですねー。
素人にはチンぷんカンブンですわ。
でも、露天風呂いい感じに仕上がっているみたいですねー。
売り出されたら、俺のスカイボックスに設置を考えよーかなー。
露天風呂で星空を見上げるのもおつですよね。
Posted by kidd
at 2007年11月25日 14:08

まろあ^^
そんなことバラしたら、のぞかれるら~
あははー
誰も、見ないか・・・
こちらこそよろしくお願いしますー♪
kiddさん、
昨日はバスタオル一丁のハダカだったのでごめんねー
そうなんですよー、なかなか難解ですねー
でも、SLって作る環境とコミュニティが同時に存在してて
いろんな人に助けていただけるので助かります。
お風呂売らないけど、作るのならお手伝いしますよー
そんなことバラしたら、のぞかれるら~
あははー
誰も、見ないか・・・
こちらこそよろしくお願いしますー♪
kiddさん、
昨日はバスタオル一丁のハダカだったのでごめんねー
そうなんですよー、なかなか難解ですねー
でも、SLって作る環境とコミュニティが同時に存在してて
いろんな人に助けていただけるので助かります。
お風呂売らないけど、作るのならお手伝いしますよー
Posted by jinko
at 2007年11月25日 18:18
