2013년 5월 10일 금요일

ARMA 커맨드 그룹 Camera Control

ARMA 커맨드 그룹 중 Camera Control에 관련된 내용에 대한 수박 겉핥기식 이해를 마치고 정리한 내용들이다. 아직ARMA 3가 완전하지 않아서 제대로 구현되지 않은 부분도 있고, 내가 생각한것처럼 움직이지 않아서 당황스러운 스크립트들도 있었다.

ARMA가 단순히 유저간의 게임이 아니라 훗날 영역을 넓히는데 있어서 중요한 부분이 이 카메라 컨트롤 부분이라고 생각하기때문에 의외로 꽤 중요한 부분이라고 생각한다.



http://community.bistudio.com/wiki/Category:Command_Group:_Camera_Control


camCreate

객체를 이 방식을 이용해서 만들 수 있지만 차량의 경우 탈 수 없다. 이 방식으로 생성된 유닛은 STATIC으로 받아들여진다.createVehicle로 만들어진 것과의 차이는 다른 객체와의 충돌에 대한 고려없이 그 위치에 바로 생성된다는 점이다. 그리고 후에 설명될 camCommit 명령을 기다리지 않고 바로 작동된다.

설명에는 멀티플레이 상황에서 이 함수로 만들어진 객체는 근접했을때만 보이는 클라이언트적 효과에 불과하고 나와있는데 이게 ARMA 3에서도 적용되는건지, 그리고 사라지는 거리가 어느정도인지는 모르겠다

Object = type camCreate position

  • type : camera, seagull 을 포함한 OFP 차량 클래스명




camDestroy

말 그대로 생성된 캠을 삭제하는 스크립트이다.
camDestroy object




camSetPos

카메라의 위치를 설정한다.
camera camSetPos position

  • camPreparePos
    뒷부분에 나올 camPreload를 위한 설정이다.

camera camPreparePos position


camCommand

카메라나 camCreate로 생성된 것들에게 명령을 수행시키는 스크립트로, manual on/off는 모든 타입에서 활용할 수 있고, camera타입에서는 inertia on/off를, seagull에서는 landed와 airborne을 사용할 수 있으며, landed를 명령하면 비행중이던 seagull은 바닥에 내리앉고,airborne은 반대로 수행된다.

seagull에게 그냥 명령을 실행하면 안되고 manual on을 해준 뒤에 airborne이던 landed던 실행해줘야 반응하는 것 같다.

camera camCommand command

  • command : String - "manual on", "manual off", "inertia on", "inertia off", "landed", "airborne"


camCommit

지정된 시간내에 자연스럽게 카메라가 전환되도록하고 시간이 0이면 즉시 전환된다.만약에 설정이 안되어있으면 camSetTarget, cameraEffect등의 내용을 무시하고 특정 방향만 바라본다.
camera camCommit time

기본 예제 실행시
cam1 = "camera" camCreate (position this);
cam1 camSetTarget player;
cam1 cameraEffect ["internal", "BACK"];
cam1 camCommit 0;
cam1 camsetPos (position player);
cam1 camCommit 6;




camera camCommitPrepared time



camCommitted

카메라에 지정된 마지막 camCommit이 끝났는지 여부에 따른 참/거짓값을 출력한다.
Boolean = camCommitted camera

cam1 = "camera" camCreate (position this);
cam1 camSetTarget player;
cam1 cameraEffect ["internal", "BACK"];
cam1 camCommit 0;
cam1 camsetPos (position player);
cam1 camCommit 6;




showCinemaBorder
영화와 같은 외곽테두리를 출력할 것인지를 true/false로 지정해준다.

showCinemaBorder show
  • show : Boolean
showCinemaBorder false;




cameraEffect
카메라나 객체의 다른 효과로 전환한다. 만약 1인칭 조준에서 3인칭으로 바꾸고 싶으면 switchCamera를 사용하라고한다.

camCreate후에 최소한 이 cameraEffect는 지정해줘야 카메라가 작동한다.
camera cameraEffect [name, position]
  • name : String - the Effect Type
    • Internal
    • External
    • Fixed : 타겟을 지정해도 바라보지 않는다.
    • FixedWithZoom : 고정된 상황에서 좀더 줌인해서 본다
    • Terminate : 현재 카메라 화면에서 벗어나서 플레이어 시점으로 전환한다. 다시카메라로 돌아가고 싶으면 camCommit을 사용하면 된다.

  • position : String - position of the effect
    • TOP
    • LEFT
    • RIGHT
    • FRONT
    • BACK (주로 쓰임)
cam1 = "camera" camCreate (position this); 
cam1 camSetTarget player;
cam1 cameraEffect ["Internal", "BACK"];
cam1 camCommit 0;




cameraOn
카메라가 지정되어있는 객체의 값을 리턴
Object = cameraOn



camPreload

카메라를 일정시간 이전에 미리 준비시켜두는 스크립트로, 현재 카메라위치와 많이 떨어져있는 곳에 카메라를 설치 후 이동시키면 렌더링등의 문제가 발생할 수 있으므로, 이를 막기 위한 방편이다.
camera camPreload time


  • camPreloaded
    미리 설정해둔 카메라가 준비되었는지를 확인하는스크립트. camPreload로 시간을 많이 대기시켜 놓았어도 준비가 되었으면 참값을 넘겨준다.
Boolean = camPreloaded camera
cam1 = "camera" camCreate (position this);
cam1 camSetTarget player;
cam1 cameraEffect ["Internal", "BACK"];
cam1 camCommit 0;

cam1 camSetPos (position spartan);
cam1 camSetTarget player;
cam1 camPreload 100;

nul = this spawn { while{!(camPreloaded cam1)}
do {sleep 1;}; cam1 camCommit 0;};
/*while문으로캠이 준비 됐는지 확인해서
준비가 되면 while문에서 벗어나 camCommit으로 카메라를 작동시킨다.*/




camSetBank

카메라 뱅크 앵글값을 설정한다.
camera camSetBank bank

camera camPrepareBank bank

camSetDir

카메라 방향을 설정한다.
현재 ARMA 3에선 버그라는 것 같다.
camera camSetDir direction
  • direction : Number - 각도 0~360




camera camPrepareDir direction

camSetDive

카메라 다이브 앵글을 설정한다.
camera camSetDive dive


camera camPrepareDive dive

camSetFocus
카메라 포커스와 블러를 설정해준다. commit을 지정해줘야한다.
camera camSetFocus focusRange
  • focusRange :[distance,blur]
cam1 = "camera" camCreate (position this);
cam1 setDir -90;
cam1 cameraEffect ["internal", "BACK"];
cam1 camSetFocus [0,0];
cam1 camCommit 0;
cam1 camSetFocus [1000,100];
cam1 camCommit 10;


camera camPrepareFocus focusRange

camSetFov
카메라의 줌 레벨을 정한다. commit을 지정해줘야한다.
camera camSetFov level
  • level :줌 레벨, 0.01 ~ 2

cam1 = "camera" camCreate (position this);
cam1 setDir -90;
cam1 cameraEffect ["internal", "BACK"];
cam1 camSetFov 2;
cam1 camCommit 0;
cam1 camSetFov 0.01;
cam1 camCommit 10;


camera camPrepareFov fieldOfView

camSetFovRange

자동 줌의 시작값과 끝값을 정한다. 기본 줌값은 0.7. 가장 가까운건 0, 가장 먼 줌값은 1이다.
camera camSetFovRange fovRange
  • fovRange :줌 레벨, 0 ~ 1


camera camPrepareFovRange fovRange


camSetTarget
카메라가 바라봐야할 타겟이나 포지션을 지정해주고 camCommit을 동반합니다.
camera camSetTarget target
  • camera : Object or type "camera"
  • target : Object - target Location


camera camPrepareTarget position


  • camTarget
    카메라의 타겟 객체를 리턴합니다.
camTarget camera

camSetRelPos
camSetTarget과 함께 사용해서 카메라의 타겟과 관련된 좌표를 설정해서 그 위치에 카메라가 위치하도록한다. camCommit을 동반해야한다.
타겟이 움직이면 따라 움직인다.
camera camSetRelPos position
cam1 = "camera" camCreate (position this);
cam1 setDir 120;
cam1 cameraEffect ["internal", "BACK"];
cam1 camSetTarget target;
cam1 camSetRelPos [2,2,4];
cam1 camCommit 10;


  • camPrepareRelPos
    camPreload를 위한 타겟에 맞춘 카메라 위치설정이다.

camera camPrepareRelPos position



camUseNVG
나이트비전 사용의 유무를 true / false로 지정합니다.
camUseNVG set


enableEndDialog

onPlayerKIlled.sqs에 삽입되어있는, 플레이어 사망 후의 카메라 동작을 실행하도록 합니다.




setCameraInterest
카메라가 주어진 값에 따라 관심도가 달라진다. 기본 관심도값은 0이고, 어떤 유닛이 말을 할경우 관심도는 50이 된다.
entity setCameraInterest interest


Number = cameraInterest entity



switchCamera
유닛의 카메라 모드를 바꾼다.
unitName switchCamera mode
cam1 = "seagull" camCreate (position this);
cam1 camCommand "manual on";
cam1 switchCamera "internal";

댓글 없음:

댓글 쓰기