LSL関数の使い方 第78回 カメラ制御編(1)カメラ制御の許可(llRequestPermissions)

PR
カメラ制御の許可を申請するには、llRequestPermissionsを使用します。

●関数解説
llRequestPermissions
・概要
LlRequestPermissions関数は、アバターに対して許可を申請します。
カメラ制御(llSetCameraParams関数)の許可申請は、パラメーターに PERMISSION_CONTROL_CAMERA を指定することにより許可申請を行います。
・書式
llRequestPermissions(key agent, integer perm)
・パラメータ
key agent
アバターのキーを指定します。
例:llGetOwner()

integer perm
パラメータを定数で指定します。
例:PERMISSION_CONTROL_CAMERA

llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA)

・戻り値
なし
・使い方
カメラを制御するllSetCameraParams関数を使う時には、LlRequestPermissions関数を用いてアバターの許可を事前に取得します。

●サンプル
アバターの正面にカメラを移動させるサンプルです。
サンプルを実行した時にカメラが移動しない場合は、Alt + Zoom などで、カメラコントロールが支配されている状態にあります。
ESCキーを2回押して、カメラコントロールを解放すると、正常動作します。
この動作は、カメラコントロールの仕様なので、覚えておきましょう。

set_camera(vector vPos, vector vFwd){
    integer perm = llGetPermissions();
    if (perm & PERMISSION_CONTROL_CAMERA) {
        llSetCameraParams([
            CAMERA_ACTIVE, TRUE,
            CAMERA_POSITION, vPos + vFwd, 
            CAMERA_POSITION_LOCKED, TRUE,
            CAMERA_FOCUS, vPos,
            CAMERA_FOCUS_LOCKED, TRUE
        ]);
    }   
}

front_camera(){
    vector vFwd = llRot2Fwd(llGetRot());
    vFwd += vFwd;
    vector vPos = llGetPos();
    set_camera(vPos,vFwd);
}

default
{
    state_entry(){
        if (llGetAttached() != 0){

            // オーナーにカメラ制御の許可申請
            llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
            front_camera();
        }
    }

    attach(key agent){
        if (agent != NULL_KEY){
 
            // アタッチしたアバターにカメラ制御の許可申請
            llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
            front_camera();
        }else{
            integer perm = llGetPermissions();
            if (perm & PERMISSION_CONTROL_CAMERA){
                llClearCameraParams();
                llReleaseCamera(llGetPermissionsKey());
            }
        }
    }

    on_rez(integer param){
        llResetScript();
    }
}

■参照

llGetOwner
llGetPermissions
llSetCameraParams
llGetAttached
llGetRot
llRot2Fwd
llClearCameraParams
llGetPermissionsKey
Ads by Google

SLguide.jp 最新スポット情報