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();