今回は、アニメーションオーバーライドのスクリプトを紹介します。アニメーションオーバー
ライドとは、アバターの基本アニメーションをユーザが作成したオリジナルのアニメーションで
置き換えてしまう技術です。単純に訳すと、"アニメーションの重ね処理"とでもなるんでしょう
か。略してAOとも呼ばれてます。
ここで少し基本アニメーションについて説明します。基本アニメーションとは、リンデンラボ社
がシステム内部で最初から用意しているデフォルトのアニメーションのことを指します。通常ア
バターはこれらの基本アニメーションを状況に応じて、自動的に実行しています。立つ、歩く、
座る、飛ぶ等のしぐさは、すべてこの基本アニメーションが元になっています。基本アニメーシ
ョンは、システム側でもともと用意されているアニメーションですので、アニメーションファイルは
存在しません。ちなみにスクリプトを使用してこの基本アニメーションを実行したい場合は、単純
にllStartAnimation()コマンドで、基本アニメーション名称を指定してあげればOKです。
(コンテンツ内にアニメーションファイルを配置する必要はありません)
例えば、基本アニメーションの"座る"を実行するには、以下のように命令します。
llStartAnimation("sit");
(この中で、"sit"というのが座る動作の基本アニメーション名称になります。)
この基本アニメーションは、全部で135種類用意されています。基本アニメーションのリストは、
以下のページで確認可能です。
Internal Animations(wiki.secondlife.com)
リストをご覧いただければわかると思いますが、"立つ"という動作だけでも5種類のアニメーシ
ョンが用意されています。アバターを立たせてじっと見ていればわかりますが、アバターは定期
的にポーズを微妙に変化させています。これはこの複数のstanding用のアニメーションを交互に
実行しているからです。こうすることによりアバターのしぐさがより自然になります。
さてちょっと話題がずれてしまいましたが、AOの話に戻ります。AOは、前述でも書きましたが、
この基本アニメーションをユーザが作成したオリジナルのアニメーションで置き換えてしまうも
のです。そうすることによりアバターが、立つ、歩く、座るといった基本動作を実行したとき、基本
アニメーションではなくオリジナルのアニメーションが実行されることになります。もしどこかでとて
もセクシーな歩き方をしている女性アバターを見かけたとしたら、それはこのAOの技術を利用して
いますw。
仕組みとしては、timerとllGetAnimationコマンドを利用して、アバターのアニメーション状態を
監視し、その状態に応じてオリジナルアニメーションで置き換えてあげます。
「スクリプト内容」
//
// AnimationOverride script v1.0
//
// Created by Zero2000 Kid 2008/01/02
//
float timerRate=0.2;
string targetstate="Walking";
string originalanim="walk_male";
default {
state_entry() {
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
llSetTimerEvent(timerRate);
}
on_rez(integer int) {
llResetScript();
}
timer() {
string basicstate=llGetAnimation(llGetOwner());
if (basicstate==targetstate) {
llStartAnimation(originalanim);
} else {
llStopAnimation(originalanim);
}
}
}
「スクリプトの説明」
このスクリプトは、歩行動作のアニメーションをオーバーライドしています。
1. llRequestPermissionsでアニメーションの実行許可を取ります。
2. llSetTimerEvent(timerRate)で、タイマーを動作させます。(0.2秒間隔)
3. タイマー関数の中では、llGetAnimationを使用して、アバターのアニメーション
状態を取得します。llGetAnimation関数は、状態名をstring型で返します。
4. アニメーション状態が、2行目のtargetstateで指定した、"Walking"状態であれ
ばllStartAnimationを使用してオリジナルの"walk_male"というアニメーション
を実行します。"Walking"状態以外であれば、llStopAnimationを使用して、オ
リジナルアニメーションをstopします。
* llGetAnimation関数では、Walkingの他に様々な状態を取得可能です。
以下のページで確認できます。
llGetAnimation(wiki.secondlife.com)
* 2行目:string targetstate="Walking";のWalkingを変更してあげれば、歩行
以外の動作に対応することが可能です。
「使用方法」
1. 上記のスクリプトをコピペし、オブジェクトのコンテンツの中にドラッグします。
2. オリジナルのアニメーションファイルをオブジェクトのコンテンツの中にドラッグします。
3. オブジェクトをTAKEし、装着します。
* ここにいけばフリーのAOアニメをゲットできますw
Vixens Isle Space Dock Mall
* AO用のスクリプトですが、GNUライセンスのオープンーソースが存在しています。
Francis Chung氏作成のFranimationOverriderというスクリプトです。このスクリプトは、
すべての動作のAOに対応しているようなのでちょっと複雑な感じですwしかしやっていることは
今回のスクリプトと同じような仕組みです。ちなみにAO用のHUDで有名なZHAOもこちらのスク
リプトをベースにしているようです。
リンデンスクリプト Tips Intexへ