カメラを制御する(llSetCameraParams,llClearCameraParams関数)
前回動画の再生をご紹介したので、もっとちゃんとした動画をとりたいなーと思い、
カメラ制御のスクリプトに興味をもったのでご紹介します。
下記のスクリプトでは、(カメラのつもり・・・です)装着して歩くとアバターの視点(カメラの視点)が変わります。
通常、カメラは自アバターの少し後ろをついてきます。自分の顔をみながら歩くことはできません。
このオブジェクト(カメラのつもり・・・です)を装着して歩くと、自分の正面をみながら歩くことが可能です。
default
{ state_entry() { if (llGetAttached() != 0){ llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA); } } attach(key agent) { if (agent != NULL_KEY){ llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA); }else{ integer perm = llGetPermissions(); if (perm & PERMISSION_CONTROL_CAMERA){ llClearCameraParams(); } } } run_time_permissions(integer perm) { if (perm & PERMISSION_CONTROL_CAMERA) { llClearCameraParams(); llSetCameraParams([ CAMERA_ACTIVE, TRUE, CAMERA_BEHINDNESS_ANGLE, 180.0]); } } } |
llGetAttached関数:llGetAttached()
どこに装着されているかを取得します。(0は装着してないということです。) 装着されている場合は例えば、 ATTACH_CHEST ATTACH_HEAD ATTACH_LSHOULDER ATTACH_RSHOULDER ATTACH_LHAND ・・・というように装着部位名称がATTACH_XXXXのXXXXの部分になった定数値が取得できます。定数の参考ページ |
llSetCameraParams関数:llSetCameraParams(list rules)
一番目のパラメータ : CAMERA_XXXXフラグ CAMERA_ACTIVE カメラをアクティブにするかどうか(TRUEまたはFALSE ) CAMERA_BEHINDNESS_ANGLE カメラが目標(アバター)の回転に変化によって抑制されない角度(0 to 180 ) CAMERA_BEHINDNESS_LAG ビハインドネスに反応する遅れ(0 to 3 ) CAMERA_DISTANCE カメラの距離(0.5 to 10 ) CAMERA_FOCUS カメラフォーカス CAMERA_FOCUS_LAG フォーカスに反応する遅れ(0 to 3) CAMERA_FOCUS_LOCKED フォーカスをロックするかどうか(TRUEまたはFALSE ) CAMERA_FOCUS_OFFSET フォーカス位置<-10,-10,-10> to <10,10,10> CAMERA_FOCUS_THRESHOLD フォーカスの動きで影響されない半径(0 to 4 ) CAMERA_PITCH カメラの回転角度(-45 to 80 ) CAMERA_POSITION_LAG ポジションに反応する遅れ(0 to 3) CAMERA_POSITION_LOCKED カメラ位置をロックするかどうか(TRUEまたはFALSE ) CAMERA_POSITION_THRESHOLD 対象の動きで影響されない半径(0 to 4 ) |
llClearCameraParams関数:llClearCameraParams()
カメラの設定値をデフォルトに戻します。 |
attachイベント:attach(key agent)
アイテムを装着するとき、または取り外した時に発生します。 装着したときにはアバターのキー、取り外した時にはNULL_KEYが、agentパラメータから取得できます。 |
<補足>
アバターのカメラを制御する為にはパーミッション(PERMISSION_CONTROL_CAMERA)が必要になります。
今回のサンプルでは、カメラをアクティブにして、
カメラが目標(アバター)の回転に変化によって抑制されない角度を180度に設定しています。
state_entryでは、オブジェクトを装着したままスクリプトがリセットされた場合も
カメラ制御を再セットするようにしています。
llSetCameraParams関数のパラメータを変えることによって、頭上から撮影したり、横から撮影したりも可能なので
セカンドライフで動画(マニシマ)をとるとき等に便利そうです。