Site search

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

2009年8月3日月曜日

視界を切り替えるスクリプト

いつの間にかブログ書くの結構さぼり気味になってる千尋です^^;;

今回はタッチで視界(カメラ)を切り替えるスクリプトです。乗り物とかオブジェクトに座る場合はllSetCameraAtOffsetllSetCameraEyeOffsetで簡単に設定する方法もありますが、今回は装着用なのでllSetCameraParamsを使いました。

llSetCameraParamsはパラメータがたくさんあってややこしいですけど、いろいろ細かい設定とかできそうですね。あと、アバターにアニメーションさせるのと同様に事前にパーミッションの要求が要ります。


装着してタッチすると、低めの視界、真上からの視界、通常の視界の順で切り替わるようにしました。HUDなどに組み込んで使用してくださいね^^
// 視界切り替え
integer cam=1;  // 最初は1(低め)

cam1()
{  // 低めの位置になるカメラ設定
    llSetCameraParams([
        CAMERA_ACTIVE, TRUE,
        CAMERA_BEHINDNESS_ANGLE, 5.0,
        CAMERA_DISTANCE, 3.0,
        CAMERA_FOCUS_OFFSET,<2,0,0>]);
    llOwnerSay("Under");
}

cam2()
{  // 真上から見えるカメラ設定
    llSetCameraParams([
        CAMERA_ACTIVE, TRUE,
        CAMERA_BEHINDNESS_ANGLE, 0.0,
        CAMERA_PITCH, 80.0,
        CAMERA_FOCUS_THRESHOLD, 0.0,
        CAMERA_DISTANCE, 20.0,
        CAMERA_FOCUS_OFFSET,<0,0,0>]);
    llOwnerSay("Over head");
}

set_cam()
{
    llClearCameraParams();  // カメラ設定を初期化
    // camの値によって処理を分ける
    if (cam == 0) llOwnerSay("Normal");  // 普通
    else if (cam == 1) cam1();  // 低め
    else if (cam == 2) cam2();  // 真上
}

default
{
    state_entry()
    {
        // 装着されてたらカメラコントロールの権限を要求
        if (llGetAttached()) llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
    }

    attach(key id)
    {
        // 装着したらカメラコントロールの権限を要求
        if (id) llRequestPermissions(id, PERMISSION_CONTROL_CAMERA);
    }

    touch_start(integer total_number)
    {
        if (llGetPermissionsKey() == llDetectedKey(0)) {
            // タッチしたアバターのパーミッションが有効になってたら
            cam++;  // camの値を1増やす
            if (cam > 2) cam=0;  // camの値が2を超えたら0にする
            set_cam();  // set_camへ
        }
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_CONTROL_CAMERA)
        {  // カメラコントロールが許可されたらset_camへ
            set_cam();
        }
    }
}

0 件のコメント:

コメントを投稿