2007年07月28日
椅子に複数人で座ってみると(2)
sit2avator links

椅子系の研究続きです。
目的:プリムに座ったアバタ全員をscriptで制御すること
今回のテスト:リンクしたプリムの椅子としての挙動を見てみる
です!
SL人口もどんどん増えてきて
もはやどこぞやに正しい情報が書いてありそうなもんですが
検索して調べるだけだと"知っているだけ"になってしまって
身についていかない・理解が深まらないので
このブログでは調べる前に自分であれこれやってみている事が多いです。
今回急がし目のため、ビジュアル面は適当…
…ダメだなあ、こんなんじゃ。

まず3つのプリムを連結した椅子を作ります。
白いプリムがルートプリムです。
赤、青のプリムが子プリムで、色の違いに意味はないです。

そのまま普通に座ってみました。
1プリムのときとまったく同じ挙動のようです。
プリムとの位置関係やクリックする座標で座る場所が自動調整され、
すでに座っているアバタがいる場合、座れないこともあります。

親プリムだけにscript(エントリーの最後にあるやつ)を記述した状態。
1人目は必ずscriptで指定した場所に座りますが、
2人目以降の座る場所は自動調整されます。
これも、1プリムのときとまったく同じ挙動のようです。
scriptで2人目の情報がまったく取れないのも一緒。

椅子系の研究続きです。
目的:プリムに座ったアバタ全員をscriptで制御すること
今回のテスト:リンクしたプリムの椅子としての挙動を見てみる
です!
SL人口もどんどん増えてきて
もはやどこぞやに正しい情報が書いてありそうなもんですが
検索して調べるだけだと"知っているだけ"になってしまって
身についていかない・理解が深まらないので
このブログでは調べる前に自分であれこれやってみている事が多いです。
今回急がし目のため、ビジュアル面は適当…
…ダメだなあ、こんなんじゃ。

まず3つのプリムを連結した椅子を作ります。
白いプリムがルートプリムです。
赤、青のプリムが子プリムで、色の違いに意味はないです。

そのまま普通に座ってみました。
1プリムのときとまったく同じ挙動のようです。
プリムとの位置関係やクリックする座標で座る場所が自動調整され、
すでに座っているアバタがいる場合、座れないこともあります。

親プリムだけにscript(エントリーの最後にあるやつ)を記述した状態。
1人目は必ずscriptで指定した場所に座りますが、
2人目以降の座る場所は自動調整されます。
これも、1プリムのときとまったく同じ挙動のようです。
scriptで2人目の情報がまったく取れないのも一緒。

青いプリム(子プリム)だけにscriptを記述した場合も上記と同じで、
最初に座ったアバタだけがscriptで制御可能になっています。
正しくはscriptのあるなしでプリムの椅子としての挙動が変わるのでなく
llSitTarget命令で指定した
アバタが座る時の座標ベクトル値が、デフォルト(0,0,0)値か否か、
で挙動が変わるという事のようです。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
さてさて、さらに複数のプリムにscriptを記述した場合を調べると…
ちょっと面白い結果がでました。

とりあえず、プリムごとにきちんと座る位置の指定が利いています!
うーん、いい感じ。

(なんだか怪しい写真なのはおいておいて…)
scriptが書いてあるのがルートプリムでも子プリムでも、特に動作に違いはないようです。
タッチの場合は親か子かで挙動の差異がありますよね。
さらに座ったアバタ両者の情報もscriptで取得できています!
しかしその挙動がちょっと妙な感じです。
間違ってるわけではないです。正しいですが妙だなと。
先にその際のチャットログだけ乗っけておきます。
どう妙なのかの解説と、これはどう扱うのがいいか、
などの考察は次のエントリーにて。
◆Harayoki Kuhnが青いプリムに座る
ObjectBlue: ObjectBlue sit Harayoki Kuhn
ObjectRed: unsit
ParentObjectWhite: unsit
◆nanasi gonbe(仮名)が白いプリムに座る
ObjectBlue: ObjectBlue sit Harayoki Kuhn
ObjectRed: unsit
ParentObjectWhite: ParentObjectWhite sit nanasi gonbe
◆nanasi gonbe(仮名)が立ち上げる
ObjectBlue: ObjectBlue sit Harayoki Kuhn
ObjectRed: unsit
ParentObjectWhite: unsit
◆nanasi gonbe(仮名)が赤いプリムに座る
ObjectBlue: ObjectBlue sit Harayoki Kuhn
ObjectRed: ObjectRed sit nanasi gonbe
ParentObjectWhite: unsit
こういうscriptがくっついています。
特に何もしてないです。
integer debug = TRUE;
Trace(string s){
if(debug) llOwnerSay(s);
}
Init(){
Trace("Init");
llSitTarget(<0.3,0,0.4>,ZERO_ROTATION);
}
integer bPhantom = FALSE;
default{
state_entry(){
Init();
}
on_rez(integer num){
llResetScript();
}
changed(integer che){
if(che & CHANGED_LINK){
key av = llAvatarOnSitTarget();
if(av!=NULL_KEY){
Trace(llGetObjectName()+" sit "+llKey2Name(av));
}else{
Trace("unsit");
}
}
}
}
Posted by harayoki at 22:22│Comments(0)
│椅子(sit)の挙動