Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2009年7月7日火曜日

タッチでポーズチェンジする椅子のスクリプト

今度ソファーを作ってみたいなって思ってる千尋です。。。そう思ってからもう何週間も経ってますけどねwww

タッチしたりUp、Downキーなどを押すとポーズが切り替わる椅子とかソファーってよくありますよね。そこで今回は座ってからタッチするとポーズチェンジするスクリプトです^^

ポーズ入りの椅子のスクリプトに、タッチイベントでアニメーションの変更を付けてるだけって感じなので特別難しい部分はないと思います。

sitアニメーションはヒップの位置が同じものを数種類コンテンツ内に入れてくださいね。デフォルトのsitと同じくらいの位置に合わせて作ってあるポーズだったらいいんですけど、それとは全然違う位置になってるポーズも時々ありますね。前ゲットしたフリーのAOに入ってたポーズには位置の違うものが混じってましたw


// タッチでポーズの変わる椅子
string anim;
integer total;
integer count;

default
{
    state_entry()
    {
        vector pos=<0,0.2,0.55>;  // 座る位置
        vector ang=<0,0,90>;  // 座る角度
        llSitTarget(pos,llEuler2Rot(ang*DEG_TO_RAD));  // 座る位置と角度を設定
        total=llGetInventoryNumber(INVENTORY_ANIMATION);  // コンテンツ内のアニメーション数
    }

    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー取得
        if (id == llAvatarOnSitTarget()) {  // 座ってるアバターだったら
            if (total > 1) {  // アニメーションが複数あったら
                count++;  // カウンタ加算
                if (count >= total) count=0;  // カウンタがトータルの数を超えたら0
                llStopAnimation(anim);  // 実行中のアニメーション停止
                anim=llGetInventoryName(INVENTORY_ANIMATION,count);  // 次のアニメーション名
                llStartAnimation(anim);  // 次のアニメーション実行
            }
        }
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {  // リンクが変わったとき
            key id=llAvatarOnSitTarget();  // 座ったアバターのキー取得
            if (id) llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);  // アバターが座ってたらアニメーションの権限を要求
            else if (llGetPermissionsKey()) llStopAnimation(anim);  // そうじゃないときはアニメーション停止
        }
        else if (change & CHANGED_INVENTORY) total=llGetInventoryNumber(INVENTORY_ANIMATION);  // コンテンツ内が変わったときアニメーション数取得
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {  // アニメーションの権限を得たら
            count=0;  // カウンタ初期化
            anim=llGetInventoryName(INVENTORY_ANIMATION,count);  // countからアニメーション名取得
            llStopAnimation("sit");  // 通常のsitアニメーションを停止
            llStartAnimation(anim);  // アニメーション実行
        }
    }
}

count=0; // カウンタ初期化
ってなってる行を
count=llFloor(llFrand(total));
に書き換えると、座ったとき乱数を発生してランダムにポーズを選ぶようになります。

0 件のコメント:

コメントを投稿