ソラマメブログ
< 2025年04月 >
S M T W T F S
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

2008年01月12日

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

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







同じカテゴリー(リンデンスクリプトTips)の記事画像
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
同じカテゴリー(リンデンスクリプトTips)の記事
 サウンド再生スクリプト(リンデンスクリプト Tips) (2009-12-16 20:13)
 カメラコントロール(リンデンスクリプト Tips) (2009-11-21 21:26)
 標準時間表示スクリプト(リンデンスクリプト Tips) (2009-11-02 00:34)
 プリムカウンター2(リンデンスクリプト Tips) (2009-10-12 20:40)
 土地情報チェッカー(リンデンスクリプト Tips) (2009-10-11 21:33)
 SIM負荷チェッカー(リンデンスクリプト Tips) (2009-08-09 20:26)
この記事へのコメント
どんな脳みそしてるのぉぉぉw

あの時間でこの呪文かいてたの?ヽ(*'0'*)ツ ワァオォ!!

Zエロのオーナーとは思えないわぁ☆
(*゚-゚)ニコッ(*゚ー゚)ニヤッ(*゚ー+゚)キラッ
Posted by himea Noelhimea Noel at 2008年01月12日 13:43
おい!w
読み方間違ってるから
変なとこで区切るなw
Posted by ZEROZERO at 2008年01月12日 15:13
うっ。。。。。


読んでたらめまいが。。。。。。ww

俺にはむりだぁー^^
Posted by take at 2008年01月12日 21:07
一応読もうとしたんだw

えらい!w
Posted by ZEROZERO at 2008年01月13日 01:05
いつもスクリプトいただいております。今回も。これほしかったの。
早速友達と踊ってみました。
わーーーーって感じ。
一人で興奮しています。
Posted by ろんちゃん at 2008年01月16日 12:31
 ご利用頂きありがとうございます。
あと募金もして頂いたようでw
これからもいろんなtips書いていきますので
宜しくお願いします^^
Posted by ZEROZERO at 2008年01月16日 21:33
はじめまして。
ろったさんにこのサイトを教えて貰いました。

シンクロについて、ちょっとお聞きしたいのです。

スクリプトとアニメを入れたオブジェクトを3つ用意して、シンクロをさせたいんですが、startと打ってから各アニメが開始される時間をずらす事は可能でしょうか?
(たとえば1秒づつ遅れて開始させる。)

いきなりの質問で申し訳ありませんが、時間がありましたら、ご返答お願い致します。
Posted by takucon at 2008年06月12日 13:20
takucon さん

はじめまして^^
一番簡単なのは、llSleep()を使用して、
各オブジェクトのアニメーションの開示時
間に差をつける方法でしょうか。
llSleep()は、秒単位で指定可能なので
ご希望の処理も可能だと思いますw
Posted by ZERO at 2008年06月14日 10:14
ご親切に有難う御座います。

ちょっと勉強して、挑戦してみます^^
Posted by takucon at 2008年06月14日 13:25
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。