2012/06/10

スカイボックス


スカイボックス「MyBox」は、サンドボックスなどの上空に臨時の部屋やプラットフォームなどを出して、もの作りの作業や着替えなどができるようにしたものです。

箱に座って、メニューで上空に行って部屋などを出し、用がすんだら「Clear」で片付けます。
写真は築地のお店のデモ機で、場所が狭いので小さめの8m四方のプラットフォームを出しています。
商品では標準で20m四方、サイズ変更でもっと大きくもできます。

下に、スクリプトの部屋を出す(Rez)ところと、「Clear」で片付けるところを書きます。
片付けるときには、llDie()という、名前からして恐ろしい、オブジェクトをきれいさっぱり消去する命令を使います。
llDie()で消えたオブジェクト(中のスクリプトも)を復活する方法はありませんので(ゴミ箱にもない)、テストする前には必ずコピーをとっといてください…経験者は語る^^;
default {
 // (省略)
 listen(integer channel, string name, key id, string button) { // 押されたボタンを聞く
  // (省略)
  else if ( 0 <= llListFindList( Rooms, [button] )) {
   // 部屋名のボタンで部屋をRezしRoomChannelの数字を渡す
   llRezAtRoot( button, llGetPos() + Offset,
     ZERO_VECTOR, ZERO_ROTATION, RoomChannel );
  }
  else if ( button == "Clear" ) {
   // 「Clear」ボタンでRoomChannelで「Clear」と言う
   llRegionSay( RoomChannel, "Clear" );
   llListenRemove(Handle);
   llSleep(0.7);
   jumpPos(HomePos); // もとの場所に戻る
   llSleep(0.7);
   unsitAll(); // 座っている人を立たせる
   llDie(); // 自分を消去(デモでは消えずに残る)
  }
 }
}
部屋側には「Clear」を聞いて自分を消去するスクリプトを入れておきます。
default {
 on_rez(integer start_param) {
  if (start_param) llListen(start_param,"","","Clear");
   // Rezで渡された数字のチャンネルで「Clear」を聞く
 }
 listen(integer channel, string name, key id, string msg) {
  llDie(); // 聞こえたら自分を消去
 }
}