UDN
Search public documentation:

MOBAKitPCCameraKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > UDK 젬 > MOBA 스타터 키트 > PC 카메라 시스템

MOBA 스타터 키트 - PC 카메라 시스템


문서 변경내역: James Tan 작성. 홍성진 번역. UDK 2012-05 버전으로 최종 테스팅

개요


PC 카메라 시스템은 좀 더 전통적인 RTS 스타일의 카메라 시스템입니다. 마우스를 화면 가장자리에 놓으면 카메라를 이동시키는 기능, 플레이어의 영웅을 따라다니도록 하는 기능이 지원되며, 또한 고정 고도 위치 시스템을 사용합니다. 고정 고도 위치 시스템이란 카메라 아래 지형의 고도에 상관없이 항상 같은 높이에 위치시키는 시스템입니다. 이로써 덜거덕거리지 않고 주변을 돌아다닐 수 있습니다.

관련 클래스들은:

  • UDKMOBACamera - 게임에서 사용할 공용 인터페이스를 제공하는 기반 카메라 클래스입니다.
  • UDKMOBACameraProperties - 데이터 저장에 사용되는 아키타입 클래스 오브젝트입니다.
  • UDKMOBACamera_PC - 카메라의 PC 변종입니다.
  • UDKMOBACameraProperties_PC - 카메라 프로퍼티의 PC 변종입니다.

UDKMOBACameraProperties 와 UDKMOBACameraProperties_PC 를 사용하는 이유


UDKMOBACamera 와 UDKMOBACameraProperties_PC 가 데이터를 저장하는 데 아키타입을 사용하면, 프로퍼티의 변경내용이 게임에서 어때보이는지 실시간 피드백을 얻을 수 있으므로 언리얼 에디터 내에서의 변경 반복처리 작업이 훨씬 쉬워집니다.

UDKMOBACameraProperties 변수

  • Rotation 회전 - 상수 카메라 회전입니다. 이 프로퍼티는 카메라 고정 방향을 설정하며, 이 경우 보통 아래쪽을 향합니다.
  • BlendSpeed 블렌드 속도 - 카메라가 한 자리에서 다른 자리로 이동할 때의 블렌딩 속도입니다. 수치가 클 수록 카메라 블렌딩 속도가 빨라집니다.

UDKMOBACameraProperties_PC 변수

  • MovementPlane 이동 면 - 카메라가 고정 고도 기준점으로 사용할 면 상의 점입니다.
  • MovementPlaneNormal - 카메라가 고정 고도로 사용할 면을 나타내는 노멀입니다. 경사면을 지정하여 카메라 이동 방식을 다르게 하는 것도 가능합니다.

UDKMOBACamera


함수

  • SetDesiredCameraLocation() - 바람직한 카메라 위치를 설정합니다.

변수

  • DesiredCameraLocation 바람직한 카메라 위치 - 현재 바람직한 카메라 위치입니다.
  • IsTrackingHeroPawn 영웅 폰 추적중인지 - 참이면 카메라는 영웅을 따라다닙니다.

UDKMOBACamera_PC


함수

  • UpdateViewTarget() - 카메라가 있어야 하는 위치를 계산하는 데 주로 사용하는 함수입니다.

변수

  • CameraProperties 카메라 프로퍼티 - UDKMOBACameraProperties_PC 아키타입에 대한 레퍼런스입니다.

UDKMOBACamera_PC::UpdateViewTarget()


PC 버전에서 카메라를 어디에 둘 지를 담당하는 함수입니다.

먼저 함수는 CameraProperties 변수를 검사하여 None 이면 기본 구현만 반환하고 일찍 빠져나가도록 합니다.

다음으로 이 함수는 플레이어가 카메라를 움직이고자 하는지를 검사합니다. 먼저 8 픽셀 버퍼를 사용하여 하드웨어 마우스 위치가 화면 가장자리에 있는지를 검사합니다. 마우스가 가장자리 위치에 있으면 CameraMoveDirection 에 저장된 적합한 변수를 설정합니다. 그런 다음 플레이어가 WASD 키나 화살표 키를 사용할 때처럼 PlayerInput 공헌을 더합니다. 그런 다음 최종 이동 속력이 정해지도록 CameraDirection 을 정규화시킵니다.

CameraMoveDirection 이 0 이 아니라면, 즉 플레이어가 카메라를 움직였는데 카메라는 플레이어의 영웅을 따라다니고 있었다면, 따라다니기를 해제해야 합니다.

카메라가 플레이어의 영웅을 따라다니고 있다면, 카메라는 바람직한 카메라 위치로 그냥 플레이어 영웅 위치를 사용합니다. 그렇지 않으면 카메라의 바람직한 위치는 카메라 이동 방향과 속력을 가지고 계산합니다.

먼저 축을 확실히 잡습니다. 카메라의 방향에 따라 로컬 좌표를 구하기 위해서인데요. 그래야 플레이어가 카메라를 위쪽으로 움직이고자 할 때 화면상에서 위쪽을 나타내는 방향으로 카메라를 움직일 수 있습니다. Vect(0.f, 1.f, 0.f) 가 꼭 위라는 법은 없거든요. 먼저 위아래 이동을 처리해 줍니다. CameraDirectionY + Rot(0, 16384, 0) 를 사용한 이유는, CameraDirectionX 가 위아래를 나타내는 방향이 아니기 때문입니다. 대신 CameraDirectionY 를 90 도 틀어 그 축을 만들어 줘야 합니다. 엄밀히 말해 좀 더 정확한 결과를 내기 위해서는 쿼터니언을 사용하는 것이 맞겠지만, 이 방법도 충분히 정확한 데다 빠릅니다. 그 후 좌우축에도 비슷한 계산을 해 줍니다.

DesiredCameraLocation 를 계산하고 나면, 선 면 교차를 수행합니다. 면은 UDKMOBACameraProperties_PC 에 점과 노멀로 정의되어 있습니다. 선 면 교차를 통해 카메라 위치의 안정적인 고도를 확보할 수 있습니다.

그 후 거기에서 카메라를 CameraIntersectionPoint 로 블렌딩하여 카메라의 위치를 잡아냅니다.

카메라의 방향은 카메라 프로퍼티에 정의된 Rotation 값으로 설정합니다.