2012/06/12

飛行船アバターのAO


飛行船アバターを作ったきっかけは、写真の初期アバターです。
人格なしのアカウントのつもりだったので、どうせなら、とまったく人に見えないのを選んだわけですが(ほかに動物やロボット、車型もありました)、人型でも初期アバターに不満がでてくるように、他人の作った姿のままでいるのは抵抗あったので、自分で作り直しました。

アダルト商品取り扱いなので、ちょっとワイルド風味に海賊ぽいマークをつけて、その流れで人型の服装も海賊コスプレなわけです。
(商品の飛行船は、海賊マークなしです。)

アバターのアニメーションも自前のに変えました。
といっても、ふわふわ高さを変えたりする程度ですが、手足のない飛行船に細かいアニメーションは必要ないので都合よいです。

下のスクリプトは、アニメーションを自分のに変更する、つまりAO(アニメーションオーバーライド)ですね。
default {
 attach(key id) {
  if (id) { // 装着されたらアニメーション変更の許可を依頼
   llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);
   Id = id;
  }
  else { // とり外されたら今のアニメーションを止める
   if (Anim) llStopAnimation(Anim);
   llResetScript();
  }
 }
 run_time_permissions(integer perm) { // 継続的に
  if (perm & PERMISSION_TRIGGER_ANIMATION) llSetTimerEvent(0.2);
 }
 timer() {
  string anim = llGetAnimation(Id); // 再生中のアニメーションを調べる
  if (anim == "Walking") anim = "walk"; // 組込アニメーションを自分のに変更
  else if (anim == "Running" || anim == "Flying") anim = "fly";
  else anim = "hover";
  if (Anim == anim) return; // 前と同じなら 戻る
  if (Anim) llStopAnimation(Anim); // 前のアニメーションを止める
  llStartAnimation(anim); // 新しいアニメーションを始める
  Anim = anim;
 }
}
LSLポータルのllGetAnimation()のところに組込アニメーションの説明と簡単なAOのサンプルがあります。
http://wiki.secondlife.com/wiki/LlGetAnimation/ja