ソラマメブログ
< 2008年08>
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            
※カテゴリー別のRSSです。
Mail

2007年12月29日

多人数制御ポーズボール



mojikoさんのコメント(MakapuさんのLSLBBSでの質問)を受けて、
大分遅れましたが
1つのプリムでたくさんの人数を制御するポーズボール(かな?)を作りました。


プリムにすわる度に、違う位置でアバタがポーズを取っていきます。
人数は重ならなければメモリが許すまでOKです。

ポーズボールが消えるような処理は書いてないのと
時間がなかったので3人以上で検証できてません。
バグあるかもですが、まあ、参考にはなるかと。


汎用的に使えるようにしました。
プリムの中に必要なだけのアニメとノートカードを用意します。

ノートカードには
"1人目のアニメ名"
"1人目のポジション(相対位置)"
"1人目の回転角(度)"
"2人目のアニメ名"
"2人目のポジション(相対位置)"
"2人目の回転角(度)"
:
"n人目のアニメ名"
"n人目のポジション(相対位置)"
"n人目の回転角(度)"

を羅列します。
アニメ名は重複があっても良いです。
アバタ位置はそれぞれがかぶらないようにしないと、座る事ができない事があります。
回転角はわからなければ<0,0,0>でいいです。

あー…ノートカードに記述したn人より多いアバタがsitした時の
判別を書いてなかった…エラーになるかも。
しかし直してる余裕がないので、とりあえずコレで。
  
続きを読む
タグ :lsl研究
Posted by harayoki at 02:43Comments(2)TrackBack(0)椅子(sit)の挙動

2007年10月30日

くるくるイス3

sit2avator links


くるくるイスに3人以上座った状態が一人では確認できないので
ギャラリー(ぽい場所)で配布してみることにしました。



もしよければtakeCopyして持っていって、自由に変更して使ってみてください。
フルパーミッションで配布してみてるつもりです。

つもりっていうのは、実は販売とか配布とかほとんどやったことがないので
その辺かなり疎いのです…。
  
続きを読む
タグ :lsl研究
Posted by harayoki at 06:27Comments(0)TrackBack(0)椅子(sit)の挙動

2007年10月30日

くるくるイス2

sit2avator links


朝のくるくるイス。
演出的な部分ですが、スムーズにアバタの位置移動ができるように
別scriptへ処理を委譲しました…。


llSetLinkPrimitiveParamsが0.2秒時間を食うようなので、
その処理をするだけのサブscriptを10個用意し、llMessageLinkedにて
繰り返し順番に処理を呼び出します。
…うーん、これしかやりようはないのか?

スムースな動きになったか?は動画で確認でどうぞ。  
続きを読む
タグ :研究lsl
Posted by harayoki at 04:17Comments(0)TrackBack(0)椅子(sit)の挙動

2007年10月29日

くるくるイス

sit2avator links


プリムに座ったアバタ=子プリム扱いと言う事を以前書きましたが
(子プリムといっしょにアバタを動かせない)
子プリムなのでllSetLinkPrimitiveParamsにて位置や角度を指定できる
という事をyou Xiaoさんに教えてもらいました。
…これはすごいことなのですが、
この辺りの挙動の詳細を知らない人には、いまいち伝わらないかもしれません。
それはまた、まとめて書きます。

まず、サンプル作りました。

イスに座ったアバタ達が


くるくる回ります。一応何人でも対応。


プリムに座ったアバタ全員を1つのscriptから移動制御します。
llAvatarOnSitTargetllSitTargetも用いておらず、プリム自体も動いていないのがポイントです。

動画で確認どうぞ。  
続きを読む
タグ :研究lsl
Posted by harayoki at 13:43Comments(0)TrackBack(0)椅子(sit)の挙動

2007年08月07日

子プリムといっしょにアバタを動かせない

sit2avator links


プリムの位置を制御して、そこに座ったアバタを一緒に移動させる、
という事は今まで何回もよくやっていたのですが、
それと同じことを子プリムの移動で行う事はできない、
という事がわかりました。
うーん、がっかりです。

がっかりな内容をまとめておきます。

◆普通の状態:親プリムに座ったアバタ



赤が親プリムで青が子プリムです。それぞれの位置をscriptで移動してみます。



親プリムが左へ移動すると、乗っているアバタもそれに座ったまま移動します。
(※青プリムは移動せずその場に残されたのではなく、
下記実験のため、scriptで右上に移動されています)

◆いやんな感じの状態:子プリムに座ったアバタ



子プリムに座りました。



子プリムが右上に移動してもアバタの位置は変化しません。
まぬけです。

そういえば、プリムに座ったアバタは子プリムと同じ扱いになるのだそうです。
そう考えると、この挙動は納得できます。
納得できますけど…嫌ですねえ。  
続きを読む
Posted by harayoki at 10:45Comments(0)TrackBack(0)椅子(sit)の挙動

2007年08月06日

好きな場所に座らせてみる

sit2avator links


#5にあるように…
scriptでアバタを任意のプリムに座らせることはできません。
これは仕様のようです。
アバタは、ユーザの操作で"座る"を行った対象のプリムだけに座ります。

これをなんとか任意のプリムに座らせる事に挑戦しました。


このイスに座ると


1人目がここに


2人目がここに座ります。(3人目はさらに上に座ります。)

かなり力ずくですが…scriptでアバタが座る場所を切り替えることに成功しています。  
続きを読む
Posted by harayoki at 07:41Comments(0)TrackBack(0)椅子(sit)の挙動

2007年07月30日

椅子に複数人で座ってみると(3)

sit2avator links

#2の下の方で述べた変な挙動の説明です。

リンクされたプリムそれぞれでCHANGED_LINKを扱っている時の
動作ログ(llSayさせた情報)をもう一度みてみると…

◆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


このように、アバタが座った(立ち上がった)対象以外のプリムでも
CHANGED_LINKイベントが発動しているのが分かります。
そこではllAvatarOnSitTargetの値は前のままです。

なんだこれは?なんだか、余計なイベントが起こってるなあ、と思ってしまうのですが
よく考えればCHANGED_LINKは"リンクがチェンジした"というイベントなので、
意味合い的にはコレであってる事がわかります。

しかしながら

changed(integer che){
if(che & CHANGED_LINK){
key av = llAvatarOnSitTarget();
if(av!=NULL_KEY){
//アバタが座った
}else{
//アバタが立った
}
}
}


という感じのscriptはアバタが座った/立ったの判別によく使われているので
"誰も座ってなかったのに、アバタが立ち上がったイベントが取れた"
とか
"アバタがすわったままなのに、再度座ったイベントが取れた"
という風に感じてしまうわけです。

リンクされたプリムそれぞれでsit系のイベントを扱う場合、
llAvatarOnSitTargetの値がNULL_KEYか否かだけでなく、
前と状態が変化しているかどうかまでみてやらないといけないようです。
さもないと予期せぬ動作をするscriptを書いてしまうかもしれません…注意ですね。

ちなみに、自分が先ほど作ったSitAvManagerModule
(子プリムたくさんにイスプリムがある時などに威力を発揮するマネージャ…説明しづらい)は
その辺りの事もケアしてscriptが書かれています。

次のエントリーあたりでは、このモジュールを使ってイスに座ったアバタ全員を
アニメさせるような事をやってみます。  
Posted by harayoki at 04:40Comments(0)TrackBack(0)椅子(sit)の挙動

2007年07月29日

小ネタ) scriptでアバタを座らせることはできる?

sit2avator links

細かい自問自答2。

Q.scriptで強制的にアバタを座らせたいのですが、可能ですか?

A.不可能です。
 立ち上がらせることはできますが座らせることはできません。
 アニメーションを再生して、座ってるように見せることはできます。
 が、それは実際に座っているわけではないので
 カメラ目線を制御したり、椅子といっしょにアバタを移動させたりはできません。

以下lslWikiのllUnSitページより

Q: How do I force an avatar to sit on an object?
A: You can't. You can only force them to stand up. It is possible to animate an avatar so they look like they're sitting, but not to control their position with much precision or reliability, at least not without using attachments.
  
Posted by harayoki at 17:03Comments(0)TrackBack(0)椅子(sit)の挙動