●関数解説
| 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