ソラマメブログ

2007年11月25日

LSL:llSitTargetの落とし穴・・・

知ってる人は、こんな落とし穴にハマったりしないと思うのですが・・・

やっちゃいましたー

露天風呂を作る記事を書いたのですが、カタチ作りまでは、なんとかなったのねー
あと必要なのは、、、、

(1)水面を動かす
(2)湯気を出す
(3)温泉に入っているポーズをセットする

の3つだけなんですよねー

水面を動かすのは、llSetTextureAnim()という関数。
この間ダンスボールを作ったときに実験したので大丈夫よねー

湯気を出すのは、llParticleSystem()という関数。
ロケットを作ったときにパーティクル勉強したからこれも大丈夫。

ポーズをセットするのは、llStartAnimation()とかのAO(Animation Override)系のスクリプト。
ホウキとかこの間のAFKのときとかいつも使ってるので、これも問題なし。
座ったときに位置を設定するのにllSitTarget()という関数を使うんですが、
だいぶん前に椅子をつくったときにやったので、これも大丈夫・・・
と思ってたんですよねー

でも、使い慣れていない関数には落とし穴。

・・・はい、きっちりハマりました


LSL: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:llSitTargetの落とし穴・・・

服を着たままでごめんねー



同じカテゴリー(Tips)の記事画像
プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^
球面の内側にテクスチャを貼るときの覚書です^^
LSL:日本語文字列をバイト数で長さ制限
スナップショットをレンズぼかしで加工してみました^^
LSLのカラーに変換するツールを作ってみました^^
ブラウザからインワールドの検索を使ってます^^
同じカテゴリー(Tips)の記事
 プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^ (2009-07-11 14:57)
 球面の内側にテクスチャを貼るときの覚書です^^ (2009-06-27 07:28)
 LSL:日本語文字列をバイト数で長さ制限 (2009-04-29 12:06)
 スナップショットをレンズぼかしで加工してみました^^ (2008-10-06 04:14)
 LSLのカラーに変換するツールを作ってみました^^ (2008-10-02 21:15)
 ブラウザからインワールドの検索を使ってます^^ (2008-09-02 17:39)

Posted by jinko at 01:34│Comments(3)Tips
この記事へのコメント
 名前、ひらがなにしてみた

 かわいいしょ?w

 あはは^^

 ふたりでほっこりおしゃべりしまくったね~やっぱお風呂で裸の付き合いってやつだと時間も忘れるね~ww

 お風呂セットで気分ももりあがったしね♪

 ジンコこれからもよろしくね~ん(*´Д`*)♪

 ははは^^
Posted by まろあ at 2007年11月25日 05:08
jinkoさん こんにちは

昨夜はMillsのフレンドを受け入れてくださって、ありがとう。
PCでの物作りって本当に難解ですねー。
素人にはチンぷんカンブンですわ。

でも、露天風呂いい感じに仕上がっているみたいですねー。
売り出されたら、俺のスカイボックスに設置を考えよーかなー。
露天風呂で星空を見上げるのもおつですよね。
Posted by kiddkidd at 2007年11月25日 14:08
まろあ^^

そんなことバラしたら、のぞかれるら~
あははー
誰も、見ないか・・・

こちらこそよろしくお願いしますー♪


kiddさん、

昨日はバスタオル一丁のハダカだったのでごめんねー

そうなんですよー、なかなか難解ですねー
でも、SLって作る環境とコミュニティが同時に存在してて
いろんな人に助けていただけるので助かります。

お風呂売らないけど、作るのならお手伝いしますよー
Posted by jinkojinko at 2007年11月25日 18:18
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。