ソラマメブログ

2008年03月21日

第10回 スクリプト講座 ポーズボールを作ろう(2)

こんばんは。ぺんです。

前回の講座 ポーズボールを作ろう(1)の続きになります。

第10回 スクリプト講座 ポーズボールを作ろう(2)

さて、今回も前回と同様に座るだけでこんなポーズが簡単にとれる
ポーズボールを作っていきましょう(ポーズは別売り)。

以下、入れるだけでOKなスクリプトとその解説記事です。
読みたい方は 続きを読む を押してくださいね。

以下スクリプトです。


// Set deafult animation here
string sitting_animation = "hmn-sit02-Seesaw";

// Set Position to sit on chair
vector pos = <0, 0, 0.1>;
// Set Rotation to sit on chair
vector rot = <0, 0, 0>;

//-----------------------------------------------------------------------

default{
    state_entry(){
        llSitTarget(pos, llEuler2Rot(rot * DEG_TO_RAD));
    }
    
    on_rez(integer i){
        llResetScript();
    }
    
    run_time_permissions(integer permission){
        if(permission>0){
            llStopAnimation("sit");
            llStartAnimation(sitting_animation);
        }
    }
    
    changed(integer change) {
        if (change & CHANGED_LINK) {
            if (llAvatarOnSitTarget() == NULL_KEY) {
                llStopAnimation(sitting_animation);
                llSetAlpha(1.0, ALL_SIDES);
            }else{
                llRequestPermissions(llAvatarOnSitTarget(),
                    PERMISSION_TRIGGER_ANIMATION);
                llSetAlpha(0.0, ALL_SIDES);
            }
        }
    }
}


まず、前回と同様スクリプトの処理の流れです。

1.着席位置と方向の設定を行う
2.もし誰かが座れば
3.その誰かに設定されているアニメーションを実行してもよいかどうかの許可を
 もらいにいく。
4.許可がされれば
5.現在のデフォルトの座るアニメーションを止めて
6.箱に入れたアニメーションを実行する
7.同時に箱を透明にする
8.もし誰かが箱から立ち上がれば
9.箱に入れたアニメーションをとめる
10.同時に箱を表示する

といった流れになります。

さて、前回と今回の2回に渡って解説しているポーズボールですが、
覚えておいて欲しい重要なポイントは二つと書きました。

・どうやって座ったか、立ち上がったかを検知するのか
・ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか

前回に「どうやって座ったか、立ち上がったかを検知するのか」を解説しましたので、
今回は後者「ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか」について
解説していきます。

この許可をもらうという部分ですが、上記のスクリプト内では

llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);




run_time_permissions(integer permission){
    if(permission>0){

    }
}


の部分にあたります。

最初の部分

llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);


対象に対して何らかの許可をもらいに行く関数です。
今回のスクリプト講座はポーズボールに関してなので、座った人にアニメーションを実行して
良いかどうかの許可をもらいに行くようになります。座った人の指定は前回にも利用した
llAvatarOnSitTarget()という関数を使います。これは座った人のID(key)を教えてくれます。
また、アニメーションのための許可というのを二つ目に指定します。
これはPERMISSION_TRIGGER_ANIMATIONと指定しておけばいいです。
さて、これで座った人にアニメーションの実行を許可するかどうかの
ダイアログをおくることができました。

(ここで、ユーザーにダイアログで許可するかしないかを促すと書きましたが、
アニメーションの実行の場合はダイアログはでません。
アニメーションの実行許可に限った場合、座ったと装着したというイベントの際は
自動的に座った人、装着した人の意思を無視して許可が下されます。)

さて、それでは相手が許可したかどうかを知って、それを元に次の処理を
していく必要があります。その部分が先ほど示した

run_time_permissions(integer permission){
    if(permission>0){

    }
}


の部分になります。

まず、

run_time_permissions(integer permission){

}


の部分で座った人が許可ボタンまたは不許可ボタンを押すという
イベントを感知
します。許可したかどうかは変数のpermissionという箱に
許可なら1以上の値を不許可なら0という値を入れて知らせてくれます。

その変数permissionを元にユーザーが許可した場合に
アニメーションの実行を行えばよいだけです。

それが先ほども示した

run_time_permissions(integer permission){
    if(permission>0){

    }
}


になります。

ここまでがスクリプトしての流れになります。

残るはアニメーションを実行する・停止するという方法と
座ったときにボールを透明にする・非透明にする方法がわかれば
スクリプトとして利用できるものになります。

それではアニメーションを実行・停止するにはどうすればよいでしょう?
それが以下のコマンドです。

llStartAnimation("animation");    //アニメーションをスタート
llStopAnimation("animation");    //アニメーションを停止


ここでanimationには実際に利用するアニメーションまたはポーズの名前を
入れてください。ただし、今回の講座で利用したスクリプトは
以下のように変数を使ってアニメーション名を指定しています。

string sitting_animation = "hmn-sit02-Seesaw";    //変数を指定

llStartAnimation(sitting_animation);
llStopAnimation(sitting_animation);


実は直接アニメーションを書いても良いのですが、
アニメーションが別のものに変わったときに書き換える手間が
減るので、こうしています。

さて、最後に透明・非透明ですが以下のコマンドを利用します。

llSetAlpha(0.0, ALL_SIDES);     //透明に
llSetAlpha(1.0, ALL_SIDES);     //非透明に


()内の一つめに書かれたのが透明度です。0に近づくほど透明になります。
また二つ目のALL_SIDESとかかれたものですが、オブジェクトのすべての面を
対象にするという意味です。普段はこれしか使わないと思うので
いつもALL_SIDESにしておくとよいです。

さて、今回は2回にわたってポーズボールを作るためのスクリプトについて
解説しました。利用者に許可をとるという作業はスクリプトを書いていると
結構よくでてきます。やや難解な部分ではありますが、しっかり理解しておきましょう。

それでは。また次回。


同じカテゴリー(超初心者用 スクリプト講座)の記事画像
第10回 スクリプト講座 ポーズボールを作ろう(1)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第6回 超初心者用スクリプト講座 ステートエントリー?
第5回 超初心者用スクリプト講座 タッチイベントを使おう
同じカテゴリー(超初心者用 スクリプト講座)の記事
 第10回 スクリプト講座 ポーズボールを作ろう(1) (2008-03-15 04:26)
 初心者用 スクリプト講座 再開します (2008-03-11 14:08)
 第9回 超初心者用スクリプト講座 タイマーを使おう (2007-07-05 22:25)
 第8回 超初心者用スクリプト講座 stateを使おう (2007-07-03 15:23)
 第7回 超初心者用スクリプト講座 出したら実行する (2007-06-30 16:22)
 第6回 超初心者用スクリプト講座 ステートエントリー? (2007-06-28 20:47)

この記事へのコメント
はじめまして!
超初心者用講座、大変勉強になりました!
これからも楽しみにしています!!
Posted by Treva SladeTreva Slade at 2008年06月13日 10:30
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。