ソラマメブログ
< 2024年05月 >
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 31  

2008年01月04日

ポーズスタンド(リンデンスクリプト Tips)

 ポーズスタンド用のスクリプトです。ポーズ台の三角のボタンを押すと
ポーズが切り替わり、そのポーズのアニメーションの名称を表示します。
アニメーションファイルは、オブジェクトのコンテンツの中にドラッグするだ
けでOKです。

ポーズスタンド(リンデンスクリプト Tips)
ポーズスタンド(リンデンスクリプト Tips)
「スクリプト内容」

1. ポーズ本体用スクリプト

// // PoseStand script v1.1 // // Created by Zero2000 Kid 2008/01/04 // 2008/01/12(modified) // integer itemType=INVENTORY_ANIMATION; vector posePos=<0,0,1.5>; integer itemCount; integer counter=0; string animation; key sitavakey=NULL_KEY; stopAnimation() { list anims = llGetAnimationList(llGetPermissionsKey()); integer aminct = llGetListLength(anims); integer i; for (i = 0; i < aminct; i++){ llStopAnimation(llList2Key(anims, i)); } } startAnimation(integer num) { if (itemCount==0) return; stopAnimation(); counter+=num; if (itemCount<=counter) counter=0; else if (counter==-1) counter=itemCount-1; animation=llGetInventoryName(itemType,counter); showText(); llStartAnimation(animation); } showText() { itemCount = llGetInventoryNumber(itemType); string msg; if (sitavakey==NULL_KEY) msg="-- PoseStand --\n" + (string)itemCount + " styles animation"; else msg="-- PoseStand --\n" + animation + "(" + (string)(counter+1) + "/" + (string)itemCount + ")"; llSetText(msg,<1,1,1>, 1.0); } default { state_entry(){ llSetSitText("Pose"); llSitTarget(posePos,ZERO_ROTATION); showText(); } on_rez(integer int) { llResetScript(); } changed(integer change) { if (change & CHANGED_LINK) { sitavakey = llAvatarOnSitTarget(); if( sitavakey != NULL_KEY ) { if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && llGetPermissionsKey() == sitavakey) { startAnimation(0); } else { llRequestPermissions(sitavakey, PERMISSION_TRIGGER_ANIMATION); } } else { animation=""; counter=0; showText(); } } else if (change & CHANGED_INVENTORY) { showText(); } } run_time_permissions(integer perm){ if(perm & PERMISSION_TRIGGER_ANIMATION){ startAnimation(0); } } link_message(integer sender_num, integer num, string str, key id){ if (llGetPermissionsKey() == sitavakey) { // add 2008/01/12 startAnimation(num); } // add 2008/01/12 } }
2. ポーズ切り替えボタン①用スクリプト
// // button1 script v1.0 // integer i = -1; default { touch_start(integer detected) { llMessageLinked(LINK_ROOT,i,"", NULL_KEY); } }
3. ポーズ切り替えボタン②用スクリプト
// // button2 script v1.0 // integer i = 1; default { touch_start(integer detected) { llMessageLinked(LINK_ROOT,i,"", NULL_KEY); } }
「作成方法」 ポーズスタンド(リンデンスクリプト Tips) 1. ポーズ本体用のオブジェクトを作成します。 2. ポーズ切り替えボタン①用のオブジェクトを作成します。 3. ポーズ切り替えボタン②用のオブジェクトを作成します。 4. 本体用オブジェクトにポーズ本体用スクリプトをドラッグします。 5. ポーズ切り替えボタン①オブジェクトにポーズ切り替えボタン①用スクリプトをドラッグします。 6. ポーズ切り替えボタン②オブジェクトにポーズ切り替えボタン②用スクリプトをドラッグします。 7. 作成した3つのオブジェクトを本体オブジェクトがルートプリムとなるようにリンクします。 以上です。 「使用方法」 1. ポーズスタンドを右クリックし、コンテンツの中にアニメーションファイルをドラッグします。 2. ポーズスタンドを右クリックし、パイメニューからPoseをクリックします。 * ポーズ位置の調整は、ポーズ本体用スクリプト2行目のvector posePos=<0,0,1.5>で調整できます。  括弧の中の数字を変更してください。数値は、X,Y,Zの順番で並んでいます。<0,0,1.5>の場合、  Z軸方向に1.5m上にポーズ位置を取ります。 「スクリプトの説明」  こまかい説明は、割愛させて頂きますが・・^^;、このスクリプトで重要なポイントは、リンクメッセージを 利用している点でしょうか。ポーズスタンドのボタンがクリックされると    llMessageLinked(LINK_ROOT,i,"", NULL_KEY); を実行して、ルートプリムに対してメッセージを送信します。このコマンドのLINK_ROOTというパラメータが ルートプリムへ信号を送る意味になります。(詳しくは、llMessageLinkedを参照ください)ここでは、変数i の数値をメッセージとして送信しています。  ルートプリム側では、link_messageイベントを利用して、メッセージを受信します。このスクリプトの例では、 ボタン1の場合 1、ボタン2の場合 -1 という数値をルートプリム側で受信します。ルートプリム側では受 信した数値に応じて、変数であるcounterをプラス1したりマイナ1したりします。counter変数は、アバター に実行させるアニメーションを選択する際に利用している変数です。実際にアニメーション名称を取得して いる箇所は、    animation=llGetInventoryName(itemType,counter); という行になります。このコマンドは、コンテンツの中にある指定したタイプのcounter番目のアイテム名称 を返す関数です。itemTypeは、一行目で    integer itemType=INVENTORY_ANIMATION; と指定していますのでアニメーションファイルとなります。つまりこのコマンドは、コンテンツの中にあるcounter 番目のアニメーション名称を返すことになります。(詳しくは、llGetInventoryNameを参照ください)  あとは、llStartAnimation()コマンドを利用して、取得したアニメーションを実行させます。   * リンクメッセージコマンドは、HUD等を作成する際には、必須のコマンドとなりますので覚えておくととても便利です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)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。