シンクロアニメーション1(リンデンスクリプト Tips)

Zero2000 Kidd

2008年01月12日 00:08


  シンクロアニメーションのスクリプトです。シンクロとは、同期のことで、複数のアバターに同時に
 アニメーションを実行させる技術です。シンクロさせる方法としては、2通り考えられるます。ひとつ
 は、シンクロさせたいアバター全員にシンクロ用のオブジェクトを装着させ、何らかの合図(chatの
 発言等)で、アニメーションを実行させる方法です。もう一つの方法は、1人のアバターが他のアバ
 ターに対してアニメーションの司令を出して、シンクロさせる方法です。
  前者に関しては、全てのアバターがシンクロ用のオブジェクトを装着する必要がありますが、後者
 に関しては、指令を出す1人のアバターのみが装着していれば可能となります。
    今回は、前者のスクリプト(アバター全員がオブジェクトを装着)を紹介したいと思います。

シンクロダンス中w丸いボールがスクリプトを仕込んだオブジェクトです。
別にボールじゃなくても構いませんw
        
「スクリプト内容」
//
//   SynChronAnimation script   v1.0
//
//                   Created by Zero2000 Kid     2008/01/11
//

integer ItemType=INVENTORY_ANIMATION;
integer handle;
string animation;

default {
    
    state_entry() {
        llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
        handle = llListen(0,"",NULL_KEY,"");
        animation=llGetInventoryName(ItemType,0);
    }
    
    on_rez(integer int) {
        llResetScript(); 
    }
    
    listen(integer ch, string name, key id, string message) {
        if (message=="start") {
            llStartAnimation(animation);
            llWhisper(0,llKey2Name(llGetOwner()) + " " + animation + " " + message + ".");
        } else if (message=="stop") {
            llStopAnimation(animation);
            llWhisper(0,llKey2Name(llGetOwner()) + " " + animation + " " + message + ".");
        }
    }
}


「使用方法」
 1. プリムを地面に置きます。画像のような普通のプリムで構いません。
 2. プリムにスクリプトをドラッグします。
 3. プリムにアニメーションファイルをドラッグします。
 4. プリムをtakeし、装着します。
 5. チャットで、"start"と入力します。(ダンスを開始します)
   "stop"と入力するとダンスをストップします。

 * シンクロしたい人にオブジェクトを装着してもらいましょう~w


「スクリプトの説明」

  このスクリプトの中のポイントは、リッスンコマンドとllStartAnimationです。
 オブジェクトを装着するとstate_entry() が呼び出されます。この中で3つのコマンドを
 実行しています。最初にアニメーション実行のためのパーミションを要求します。

   llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);

 この中のllGetOwner()の部分は、パーミションの要求先です。アニメーションを実行
 されるのは、自分自身なのでllGetOwner()を指定します。
 PERMISSION_TRIGGER_ANIMATIOは、アニメーションの実行許可を得るための
 定数ですね。次の行では、リッスンコマンドを実行しています。
   
   llListen(0,"",NULL_KEY,"");

 0は、通常のチャット入力のチャンネル番号を表します。そのあとの引数は、"",NULL_KEY,""
  となっていますので、全てのアバターの全ての発言をリッスンする意味になります。
 詳しくは、llListenを参照ください。
 次の行では、コンテンツの中のアニメーション名称を取得します。

   animation=llGetInventoryName(ItemType,0);

 ItemTypeというのは変数で、スクリプトの最初にINVENTORY_ANIMATIONを指定しています。
 最後の数字は、0なのでコンテンツの中の最初のアニメーションファイル名を取ってくる意味に
 なります。詳しくは、 llGetInventoryNameを参照ください。
  listenイベントでは、チャットの入力をリッスンし、"start"と入力されたら

    llStartAnimation(animation);

 を実行します。llStartAnimation()は、パーミションを取得したアバターに対して、括弧の中のアニ
 メーションを実行させるコマンドです。先ほどllRequestPermissionsで、llGetOwner()を指定しまし
 たので、実行するのは自分自身になります。括弧の中のanimationは、llGetInventoryNameで
 取得したコンテンツの中のアニメーションファイル名が入っています。
  チャット入力で"stop"と入力されたら

    llStopAnimation(animation);

 を実行します。これは、llStartAnimationで実行させたアニメーションをストップするコマンドです。
 こちらもllStartAnimationと同様で、パーミションを取得したアバターに対して有効なコマンドです。

 次回は、もう一つの方法(司令者だけがオブジェクトを装着)のスクリプトを紹介する予定です。
 こちらは、今回のスクリプトとは違い、少し工夫が必要になります。お楽しみに~w



リンデンスクリプト Tips Intexへ



_uacct = "UA-3027217-1";
urchinTracker();




                
        
リンデンスクリプトTips