llRezObject を使ってスカイボックス出現

ねこねこ

2008年01月26日 15:38




  無料のスケールボードを置いているのですが、上空に持っていくにはどうするかと聞かれ、SLを始めた頃スカイボックスなる存在があり、座ると上空に行きスカイボックスを設置してくれるという一見便利そうに見えるものがあったのを思い出し、それを実現してみました。
  まず、いつものごとく llRezObject() の設置限界をさぐってみました。第一引数が、オブジェクトのインベントリに入っている出現させたいオブジェクトの名前であり、第2引数が絶対座標になります。llSetPos() の限界が10メートルなので、まず上空10メートルで試しました。




  無事10メートル上空に出現。



  次は、12メートルに挑戦。やはりだめでした。エラーはデバッグチャンネルに報告しているのでしょうが、表面上はなにもおこりません。llSetPos() と同じく10メートルまででした。こうしてみると以前書いた llSitTarget() の限界が300メートルというのはかなり大きなことだと思えます。



  いよいよ核心に迫ります。実は、これを書く前、普通REZするときなにもない空間には出せないので、出すオブジェクトと、座って上がるオブジェクトを別々に上空に上げて上空で合体させるプログラムを書いていました。それはそれで、別々に上がっていく様が見えておもしろかったのですが、実験してみると、上空でオブジェクトから直接スクリプトでREZできるのがわかり、図のようにしました。10メートルを10回上げています。
  ここで llSleep(0.1) を入れているのは、なぜかREZのタイミングをとるのに必要みたいです。こういったところは実際に動かしてみないとわからないところです。最後は、立ち上がったら椅子を消すようにしました。上空に上がって行く途中で立ち上がってしまうと椅子とボードだけあがって行きます。(そのときは、逆に座れば椅子は消えます。)




  こんな感じで、中心座標の同じ位置にボードが出現しています。



  立ち上がると、椅子は消えます。これは上空100メートルにしていますが、実際サンドボックスによって状況がことなるので、好きに変更してください。わたしが経験したところでは200メートルまでしかアバターが(いくらでもあがれるHUDをつけていても)あがれなかったところがありました。そのときは編集で、ボードを300メートルにあげていたので、どうにか上を見上げて消すことができました。また、サンドボックスによっては上になにがあるかわからなかったりするので、そのときどきの状況にあわせる必要があると思います。一応これもフリーの箱に詰める予定です。

スクリプト