ソラマメブログ

2008年03月15日

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

こんばんは。ぺんです。

これまでに書いてきたスクリプト講座を
読みなおして思ったこと・・・

それは・・・

こんなアイテムほしくねぇ・・・

です。

と、そんなことを思いながら
スクリプト講座第2期のモットーは
そこそこ魅力的なものってことにしようかと思います。

それでは、スクリプト講座のはじまりです~

今回作るものはタイトル通り、ポーズボールです。
ちまたには普通にあるスクリプトですけど、
内容はとても勉強になるいいものだと思います。

それでは、今回の材料は・・・

どーん!!

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

箱w

またこれかよって感じですけど、
これだけで十分なんだよね・・・
(スクリプトって色気ないんだよ・・・)

あとは、箱の中に使いたいポーズと、
以下のスクリプト(一番先頭の行にある"hmn-sit02-Seesaw"ってところを
"使いたいポーズ名"に変えてね)を組み込めば出来上がり。

こんな感じでかわいらしいポーズをとることができますw

第10回 スクリプト講座 ポーズボールを作ろう(1)
(カイラスちゃんとふたりで夕日を拝む)
このポーズは::MCH::さんの物をつかわせてもらいました。

今回のスクリプトとその詳しい解説が読みたい人は
続きを読む を押してくださいね。

以下、スクリプトです。


// 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.同時に箱を表示する

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

今回のスクリプト講座で重要な点は

・どうやって座ったか、立ち上がったかを検知するのか (今回やります)
・ユーザーに許可をもらうにはどうすればいいのか (次回やります)

です。

まず、どうやって座ったか、立ち上がったかを検知するのかという
点ですが、上に記したスクリプトの中のこの部分に相当します。

changed(integer change) {
    if (change & CHANGED_LINK) {
        if (llAvatarOnSitTarget() == NULL_KEY) {

        }else{

        }
    }
}


それでは、この部分について細かく説明します。
まずはこれ

changed(integer change) {
}


何かというと、オブジェクト(この場合は箱)に何らかの変化があったときに
{} の中身が実行されます。
変化の内容にはいろいろありますが、色が変化した場合、
大きさが変化した場合などいろいろあります。
今回はその変化の中でもリンクの状態が変化した場合という物を利用します。
どういうことかといいますと、座った、立ち上がったというのは
箱から見れば新たに別のものがリンクされたかどうかといった感じで
認識されるということです。以下がここまでに説明した内容です。

changed(integer change) {    //箱に何らかの変化が起これば
    if (change & CHANGED_LINK) {    //リンクに変化がおこれば

    }
}


しかしながら、この状態ではリンクの変化はわかっても
座ったのかそれとも立ち上がったのかということがわかりません。
これを付け加えたのが以下のものです。

changed(integer change) {
    if (change & CHANGED_LINK) {
        if (llAvatarOnSitTarget() == NULL_KEY) {    //誰も座っていなければ

        }else{    //座っていれば

        }
    }
}


付け加えられたのは

if (llAvatarOnSitTarget() == NULL_KEY) {

}else{

}


この部分になります。llAvatorOnSitTarget()は
座っているアバターのユニークなID(これをkeyといいます)を教えてくれます。
もし、だれも座っていないならそんなkeyはないよっといった意味の
NULL_KEYを教えてくれます。誰も座ってないので、教えるkeyがないという
意味ですね。これを誰も座っていないという状態を知るのに
利用するわけです。もし、誰かが座っているなら
llAvatorOnSitTarget()はNULL_KEYではない、ユーザのkeyを返すわけです。

さて、少し長くなってきたので
今日はここまでとします。

今日、解説したことは
・どうやって座ったか、立ち上がったかを検知するのか
でした。

次回は
・ユーザーにアニメーションを実行する許可をもらうにはどうすればいいのか
と その他について解説します。

それでは。また次回。


同じカテゴリー(超初心者用 スクリプト講座)の記事画像
第10回 スクリプト講座 ポーズボールを作ろう(2)
初心者用 スクリプト講座 再開します
第9回 超初心者用スクリプト講座 タイマーを使おう
第8回 超初心者用スクリプト講座 stateを使おう
第6回 超初心者用スクリプト講座 ステートエントリー?
第5回 超初心者用スクリプト講座 タッチイベントを使おう
同じカテゴリー(超初心者用 スクリプト講座)の記事
 第10回 スクリプト講座 ポーズボールを作ろう(2) (2008-03-21 01:20)
 初心者用 スクリプト講座 再開します (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)

 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。