ソラマメブログ
< 2025年05月 >
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Mail

2007年07月29日

phantomイスの変な挙動

sit2avator links
phantomイスの変な挙動

#2で述べた妙な挙動の話はいったん置いておいて
それとは別にちょっとバグ???ぽい挙動を見つけました。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=

いつだったかわすれましたが、
プリムをphantom属性(すり抜ける状態)にすると
そのプリムにはもはや座れなくなるという事に気づきました。
(setSitTargetで指定する座標ベクトル値はデフォルトのゼロベクタである必要があります)
これはバグではなく、仕様だと思います。

けっこう便利かな?と思いつつ使う機会がなかったのですが
今、ちょうどイスについて色々検証しているので、
ついでにそれについても詳しく調べてみました。

結果、ですが、どうも完璧に座れなくはできないようですね。
というよりもちょっと挙動がおかしいのです。

以下、その実験の詳細です。
まず実験用にタッチすると"通常プリム&sitTragetあり"、"phantom&sitTragetなし"
を切り替えるscriptを組みました。
(ソースはエントリーの最後にあり)
下記の画像の青いプリム(なつかしのワンプリムイス)にそのscriptが仕込まれています。

phantomイスの変な挙動
phantomでないときの見た目

phantomイスの変な挙動
phantom時は分かりやすいように、プリムを半透明にしました

この2つの状態と周りの状況を変化させつつ、
何度もイスに座ってみます。

ひさびさに映像で確認どうぞ。


この映像で検証していること
1)普通にイスに座る 問題なし
2)イスを他プリムに埋め込んで座る 問題なし
3)イスをファントムに切り替える
4)なんどか試すがイスに座れない たぶん問題なし
5)イスを他プリムに埋め込むと、座れてしまう
 さらにCHANGED_LINKイベント時に取得できるllAvatarOnSitTarget()の値が
 座ったアバタのキー値ではなくNULL_KEYを返してくる
6)再度イスを空中に浮かすとイスに座れなくなる

phantomイスの変な挙動
プリムが埋まっていると座れちゃったぞ、の図

まとめると、

座れないはずのphantom(かつsitTragetの設定がない)プリムは、
地面や他プリムに重なっているとなぜか座れてしまう。
かつ、その時起こるCHANGED_LINKイベントにおいては
イスに座っているアバタのキー値が取れない。

です。

なんでしょうね~これ。

絶対に座れないプリムというのはいずれ必要になりそうですが
この方法だとしょっちゅう座れてしまってダメですね。
ほかの方法を探しましょ…。久々にlslWiki読み漁ろうかな。


イスに仕込まれているscript
integer debug = TRUE;
Trace(string s){
if(debug) llOwnerSay(s);
}
vector SIT_POS = <-1,0,-0.2>;
integer bSitEnabled = TRUE;
Init(){
Trace("Init");
SetSitEnabled(bSitEnabled);
}
SetSitEnabled(integer b){
Trace("SetSitEnabled");
list l = [PRIM_PHANTOM,!b];
llSetPrimitiveParams(l);
if(b){
llSetAlpha(1.0,ALL_SIDES);
llSitTarget(SIT_POS,llEuler2Rot(<0,-90,0>*DEG_TO_RAD));
}else{
llSetAlpha(0.5,ALL_SIDES);
llSitTarget(ZERO_VECTOR,ZERO_ROTATION);
}
}
default{
state_entry(){
Init();
}
on_rez(integer num){
llResetScript();
}
touch_start(integer total_number){
bSitEnabled = !bSitEnabled;
SetSitEnabled(bSitEnabled);
}
changed(integer che){
if(che & CHANGED_LINK){
key av = llAvatarOnSitTarget();
if(av!=NULL_KEY){
Trace(llGetObjectName()+" sit "+llKey2Name(av));
}else{
Trace("unsit");
}
}
}
}


同じカテゴリー(椅子(sit)の挙動)の記事画像
多人数制御ポーズボール
くるくるイス3
くるくるイス2
くるくるイス
子プリムといっしょにアバタを動かせない
好きな場所に座らせてみる
同じカテゴリー(椅子(sit)の挙動)の記事
 多人数制御ポーズボール (2007-12-29 02:43)
 くるくるイス3 (2007-10-30 06:27)
 くるくるイス2 (2007-10-30 04:17)
 くるくるイス (2007-10-29 13:43)
 子プリムといっしょにアバタを動かせない (2007-08-07 10:45)
 好きな場所に座らせてみる (2007-08-06 07:41)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。