2012/06/07

飛行船でデモ飛行


お店に展示してある飛行船は「デモ飛行」ができます。
店が狭いので、半分に切ってありますが、性能にかわりはありません。
動かすには、船のどこかに座ってから、船体にタッチします。
操縦には、キーボードの矢印キー(前後左右)と PageUp・PageDownキー(上下)を使います。
止まるには、もういちどタッチするか、立ち上ってください。
あと、デモ飛行船は、もとの場所にもどさなくても大丈夫です。
乗客が降りると、勝手に消えるし、元の場所には新しい展示用の飛行船が出るようになってます。

スクリプトでは、飛行船オブジェクトを「乗り物」に設定し、それっぽい動きをするいろいろな設定をします。
細かいところは全部すっとばして、操縦のとこだけ一部を書くと…

矢印キーはふだん歩いたり飛行したりに使ってるので、これを飛行船操縦用に切り変えます。
default {
 touch_start(integer total_number) { // タッチで矢印キーのコントロールを取る許可を依頼
  llRequestPermissions(llDetectedKey(0), PERMISSION_TAKE_CONTROLS);
 }
 run_time_permissions(integer perm) {
  if ( perm ) { // 許可を得てそれぞれ矢印キーのコントロールを取る
   llTakeControls(CONTROL_FWD | CONTROL_RIGHT | // 「↑」「→」(以下省略)
  }
 }
 control(key id, integer level, integer edge) { // 矢印キーを押したり離したりした時
  if(level & ~edge & CONTROL_FWD) { // 「↑」キーを押してるとき
   if( LinearMotor.x < 50 )    LinearMotor.x += 10; // 前進
   LinearMotor.z = 0;
  }
  if(level & ~edge & CONTROL_RIGHT) { // 「→」キーを押してるとき
   if ( AngularMotor.x < 2.5 ) AngularMotor.x += 0.5; // 右へ傾ける
   if ( -5 < AngularMotor.z ) AngularMotor.z -= 1; // 右回り回転
  }
  // (ほかは省略)
  fly( LinearMotor, AngularMotor);
 }
}
fly( vector linear_motor, vector angular_motor) { // 飛行船を動かす
 llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, linear_motor );
 llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );
}
…こんな感じです。

参考:乗り物制作のチュートリアル
http://wiki.secondlife.com/wiki/Linden_Vehicle_Tutorial/ja

築地のお店で乗り心地を試してみてください。
http://slurl.com/secondlife/TSUKIJI/90/47/22/