ソラマメブログ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
オーナーへメッセージ

2009年01月22日

今回は、スクリプトでアニメーションの再生を解説します。
みなさんは、HUDやジェスチャーなどにフリーや購入して得たアニメーションデーター
を登録して再生してると思いますがオブジェクトに入れてスクリで再生させる方法を
ご紹介します。

例題として3種類のモデルポーズのアニメーションを3秒間隔で繰り返し再生する
内容を載せますね。

・スクリプト内容
integer Number;

default
{

// 初期化
state_entry()
{
Number = 0;
}

// 装着時イベント
attach(key attached_person)
{
if(attached_person != NULL_KEY){llRequestPermissions(attached_person, PERMISSION_TRIGGER_ANIMATION);
llSetTimerEvent(3);
Number = 0;
}
else{llSetTimerEvent(0);
llStopAnimation("*MM* Model pose 1");
llStopAnimation("*MM* Model pose 2");
llStopAnimation("*MM* Model pose 3");
}
}

run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
// llStartAnimation("m stand05");
llSetText("Tomohiko Collection Start", <1,1,1>, 1.0);
}
}


timer()
{
Number++;
if(Number == 1){llStopAnimation("*MM* Model pose 24");llStartAnimation("*MM* Model pose 1");
llSetText("*MM* Model pose 1", <1,1,1>, 1.0);}
if(Number == 2){llStopAnimation("*MM* Model pose 1");llStartAnimation("*MM* Model pose 2");
llSetText("*MM* Model pose 2", <1,1,1>, 1.0);}
if(Number == 3){llStopAnimation("*MM* Model pose 2");llStartAnimation("*MM* Model pose 3");
llSetText("*MM* Model pose 3", <1,1,1>, 1.0);Number = 0;}


}

}

・解 説
1.integer Number;
  default{}の外に変数宣言をしています。外部変数となりますのでどの関数からも参照可能です。
  型はinteger 形なので-2147483648~2147483648まで表現できる整数です。

2.default{}
通常の標準ステートです。かならず書きましょう。

3. // 初期化
state_entry()
{
Number = 0;
}

  //以降はコメントとなり処理コードとはみなされません。自由に書きたい内容を書きましょう。
  あとからスクリをみて処理の流れがみやすくなります。
  Number = 0;では変数を0クリアしています。外部変数には最初、関係ない数字が入って
  いますので必ず数字の代入をし初期化するくせをつけると良いです。

4.// 装着時イベント
attach(key attached_person)
{}

  オブジェクトを装着した時呼び出される関数です。 key attached_personにはキー型と呼ばれる
  変数でインワールド内で一つしかない固有の数字を表せます。attached_personには装着した
  アバの固有のUUIDが入ります。変数名はこの場合attached_personですが何でも可です。

5.if(attached_person != NULL_KEY)
  オブジェクトを装着した時か外したときを判定します。
  装着した時はattached_person に0以外のUUIDが入りますがNULL_KEY状態のとき(0)は
  外した時となります。

6.{llRequestPermissions(attached_person, PERMISSION_TRIGGER_ANIMATION);
llSetTimerEvent(3);
Number = 0;
}

  アバに装着した時、処理されます。 
  llRequestPermissions(attached_person, PERMISSION_TRIGGER_ANIMATION);
  で装着したアバにアニメーションの再生許可を求めています。装着や椅子に座る場合では
  青いダイアログの表示なしに自動的にアニメーションの再生が許可されてしまいます。
  ご注意。
  llSetTimerEvent(3);では3秒ごとにタイマーイベントを発生させよという命令になります。
  後ほどでてくるtimer(){}の関数を3秒ごと繰り返し実行するとなりますね。
  Number = 0;ここでも初期化で0クリアしたNumber変数に0を代入しますがスクリはコンパイル後
  かリセットした時のみしかstate_entry(){}関数を実行しません。ですから装着した時行います。

7.else{llSetTimerEvent(0);
llStopAnimation("*MM* Model pose 1");
llStopAnimation("*MM* Model pose 2");
llStopAnimation("*MM* Model pose 3");
}
  アバからオブジェクトを外したとき実行されます。
  llSetTimerEvent(0);タイマーイベントを停止。ですがオブジェクト自体なくなるので
  自動的にタイマーイベントはなくなりますから書かなくても良い。
  llStopAnimation("*MM* Model pose 1");
  llStopAnimation("*MM* Model pose 2");
  llStopAnimation("*MM* Model pose 3"Number = 0;);
  それぞれ再生したアニメーションを停止します。*MM* Model pose 1がアニメーション名
  になります。ここでもオブジェクト自体なくなるので書かなくても良い。
  アニメーション自体はスクリと一緒にコンテンツフォルダにいれましょう。

  
スクリプト初歩3回目


8.run_time_permissions(integer perm)
{
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
// llStartAnimation("m stand05");
llSetText("Tomohiko Collection Start", <1,1,1>, 1.0);
}

  ここでは、アニメーション許可がされたとき実行されます。
  アニメーションばかりではなくいろんな許可体系があるのでif (perm & PERMISSION_TRIGGER_ANIMATION)
  でアニメーションのみ選択しています。
  通常ダンスボールなどでは、青いダイアログが出てOKした時この処理がされますが
  ここではオブジェクトを装着した時実行されます。アニメーション開始の命令を入れたり
  しますが、ここではllSetText("Tomohiko Collection Start", <1,1,1>, 1.0);関数でテキストを
  オブジェクト上に表示させています。

9. timer()
{
Number++;
if(Number == 1){llStopAnimation("*MM* Model pose 24");llStartAnimation("*MM* Model pose 1");
llSetText("*MM* Model pose 1", <1,1,1>, 1.0);}
if(Number == 2){llStopAnimation("*MM* Model pose 1");llStartAnimation("*MM* Model pose 2");
llSetText("*MM* Model pose 2", <1,1,1>, 1.0);}
if(Number == 3){llStopAnimation("*MM* Model pose 2");llStartAnimation("*MM* Model pose 3");
llSetText("*MM* Model pose 3", <1,1,1>, 1.0);}


}

  ここでタイマーイベントが3秒ごと実行されてNumber変数が1ずつ増分され前のポーズを停止し次の
  ポーズを再生させています。アニメーションは重ねて再生することもできるのですが強さが5段階あり
  売られているアニメはその強さがわからないケースが多いので次のアニメを再生させるときは前に再生
  させてたアニメを停止しましょう。
  停止の関数llStopAnimation("*MM* Model pose 24");
  再生の関数llStartAnimation("*MM* Model pose 3");
  llSetText("*MM* Model pose 3", <1,1,1>, 1.0);で再生中のアニメーション名をテキスト
  表示させます。""のダブルクオーテーションで囲まれた内容がアニメーション名やテキスト内容
  <1,1,1>はテキストカラーで最大1まで少数点つきで表現します左から赤,緑,青の度合いとなります。
  最後の1.0は、不透明度です。1が強く0で透明になります。

・後書き

  今回は透明な丸いオブジェクトにしてましたが、帽子や靴,メガネなどに応用すればアニメーション付きの
  アクセサリーになりますよ~^^ 
  

同じカテゴリー(スクリプト)の記事画像
ビーチボールバズーカ新型発売^^
ビーチボールバズーカ新発売~
ビーチボールバズーカ販売のお知らせ
オンラインチップジャー販売のお知らせ^^
カフェイメージムービーを撮ってみました^^
オンラインステータス&チップジャー販売のお知らせ^^
同じカテゴリー(スクリプト)の記事
 ビーチボールバズーカ新型発売^^ (2011-09-07 23:07)
 ビーチボールバズーカ新発売~ (2011-09-04 10:24)
 ビーチボールバズーカ販売のお知らせ (2011-09-04 04:36)
 オンラインチップジャー販売のお知らせ^^ (2011-08-26 23:07)
 カフェイメージムービーを撮ってみました^^ (2011-07-30 16:11)
 オンラインステータス&チップジャー販売のお知らせ^^ (2011-07-09 12:59)
Posted by tomochanapr27 at 23:56│Comments(0)スクリプト
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。