카메라는 PTZ 카메라를 상정한다.
Socket/Ball/Camera 계층의 구조로, Socket에서 RotationZ (Yaw)-Pan-Azimuth
Ball에서 RotationY(Pitch)-Tilt-Elevation 을 하는 구조이다.
입력값은 ch1(Tilt) 과 ch6(Pan)을 주도록 하겠다.

감시 터렛예시

기본적인 제어 입력 체계

제어값이 AddLocalRotation에 입력되어서 Target의 Rotation 값을 변화시키고 이를 Azimuth 와 Elevation 변수에 저장시킨다.
--> 여기까지만 와도 카메라를 맘대로 이동시킬 수 있다.
이제 자동 감시 모드로 전환하는것을 하겠다.

1을 누르면 Task가 1이 할당되도록 한다. Task 1은 자동 감시
2를 누르면 Task가 2가 할당되도록 하고 Task 2는 수동 감시이다.

switch on int를 통해 task 값에 따라 자동감시-수동감시가 바뀌도록 했다.
custom event "AutoWatch" 를 만들어서 위와같이 구성하였다.
먼저 Task 할당 받을때 받는 입력값으로 고각, 방위각, 범위 가 있는데
먼저 SetWorldRotation을 통해 Yaw값에 Task_Azimuth, Pitch 값에 Task_Elevation 값을 매핑시킨다.
예를들어 초기 입력값이 a: 30, e:20이었다면 방위각 30, 고각 20도 인 상태로 시작하는 것이다.
그리고 범위값이 Task_range로 들어오는 것은 이것을 절반으로 쪼개서 더하고 빼면 해당 방위각에서 범위만큼 왔다갔다하게 할 수 있다.
본 프로젝트에서는 angle을 그냥 Clamp Angle로 최대 각도를 제한시켜버리고 주어진 range 범위안에서 t 값이 한 tick마다
값이 증가하면 이것을 sin(t)에 넣으면 -1에서 1을 왔다갔다 하는 주기함수가 되고 sin(t)값을 ch6에 매핑하면
위의 ch6-->AddLocalRotation(Socket):Delta Rotation Z(Yaw) 에 적용이되어 카메라가 왔다갔다 하게 된다.
나는 t=t+0.6으로 매 tick 마다 0.6 이 증가하도록 했는데 이거를 더 크게 키우면 회전 속도가 증가하는거라고 볼 수 있다.
t=t+10 으로 하면 더 빠르게 왔다갔다하는 것을 볼 수 있다. 그래서 t+a의 a 가 속도인자이다.
Task 2에 대해서는 Azimuth 값과 Elevation 값을 초기화하고, T를 0으로 초기화하여 수동 조작이 가능하도록 한다.
최종적으로

Tick 에다 붙여주면 된다.
정상 작동 시키다가 1번 2번 눌러보며 자동 감시가 되는지 수동 감시로 전환이 되는지 체크해보자.
| SceneCaptureComponent 2D 의 가동 개수와 렌더링 퍼포먼스로 인한 언리얼 프레임 변화 비교 (0) | 2023.10.28 |
|---|---|
| 카오스 비히클 자동 기어 vs 수동 기어 vs 토크 제어(전기차) (1) | 2023.10.27 |
| Unreal 에서 Array 값들 csv로 저장하여 데이터 로깅하기 (1) | 2023.10.07 |
| 장애물 배치 활성화/비활성화 (1) | 2023.10.04 |
| AI Car Navigation- Easy Car AI 어셋 활용법 (0) | 2023.08.16 |