언리얼에서 기본적으로 제공하는 ThirdPerson Character를 보고 블루프린트로 캐릭터를 만들어 보겠습니다.
컨텐츠 브라우저에서 우클릭으로 블루프린트 클래스를 선택한 뒤 Character를 선택합니다.
Mesh에서 기본 ThirdPerson Character의 Mesh로 변경합니다.
뷰포트에서 보이는 캡슐에 맞게 메쉬에 트랜스폼을 조절합니다.
필자는 정면뷰를 이용해 위치 Z값을 -80으로 -90도 회전으로 수정하였습니다.
컴파일 후 저장을 합니다.
에디터로 돌아와 Character을 뷰포트로 드래그 하여 제대로 생성이 되는지 확인합니다.
기본적으로 존재하는 ThirdPersonCharacter을 월드아웃라이너 혹은 뷰포트에 클릭하여 삭제합니다.
만들어놓은 Character을 월드아웃라이너 혹은 뷰포트에서 클릭하고 디테일창을 쭉 내려서 Pawn의 AutoPossessPlayer을 Default -> Player0으로 변경해줍니다.
AutoPossessPlayer은 플레이어가 어디에서도 설정되있지 않을 경우 이 캐릭터로 빙의하게 됩니다.
그 이후 실행해봅니다.
캐릭터가 보이지도 않고 마우스로 카메라를 회전 시킬 수도 없습니다.
아직 만들지 않았기 때문인데 카메라를 먼저 만들어 보겠습니다.
캐릭터 블루프린트로 돌아와 SpringArm과 Camera 컴포넌트를 추가해줍니다.
이렇게 카메라를 두면 시점이 너무 낮으니 Spring Arm의 트랜스폼 위치 Z값을 150으로 수정하여 올려줍니다.
이대로 컴파일 후 실행하면 카메라가 캐릭터 뒤에 붙은 것을 확인할 수 있습니다.
하지만 마우스로 방향을 바꿀 수 없습니다.
이벤트 그래프를 키면 기본적으로 BeginPlay 이벤트와 ActorBeginOverlap, Tick 이벤트가 3개 존재하지만 사용되지 않고있는 것을 확인할 수 있습니다.
위 이벤트들은 노드를 끌어다 무언가 추가를 하면 활성화 되고 추가하지않으면 비활성화 상태로 존재하게 됩니다.
이벤트 그래프 빈 공간을 우클릭하여 Turn 이벤트와 LookUp 이벤트를 선택하여 추가합니다.
이 이벤트들은 프로젝트 셋팅->입력에서 특정한 키를 누르는 이벤트를 만들어 놓은 것입니다.
Turn은 마우스 X 움직임이 있을 시, LookUp은 마우스 Y 움직임이 있을 시 실행됩니다.
이벤트에서 우클릭으로 AddControllerYawInput과 AddControllerPitchInput을 추가해주고 연결해줍니다.
마우스 입력을 받으면 Pawn에게 변경된 값을 보내주고 Pawn에서 Controller의 회전값을 변경해주며 컴포넌트들이 Controller의 방향을 참조하여 회전 되게 됩니다.
Use Pawn Control Rotation을 체크하고 Roll은 체크를 취소합니다.
Use Pawn Control Rotation은 컨트롤러의 회전값을 사용하겠다는 것입니다.
Roll을 취소하는 이유는 Roll은 선풍기가 돌듯이 회전하는 방향이기 때문입니다.
컴파일 하고 에디터에서 실행해보면 카메라와 캐릭터가 회전합니다.
이번에는 MoveForward와 MoveRight에 각각 Add Movement Input을 추가해줍니다.
Add Movement Input은 각각 받은 값과 방향으로 타깃을 이동시키는 기능을 담당합니다.
World Direction에는 Vector Forward와 Vector Right를 추가해줍니다.
컴파일 하고 실행해보면 앞뒤좌우로 이동하지만 카메라의 방향으로 이동을 시켜야하기 때문에 방향이 잘못됬음을 알수있습니다.
구현해야하는 것은 화면에서 보고 있는 방향만 구해서 앞뒤 좌우만 움직이게 하면 됩니다.
컨트롤러의 로테이션, 액터의 로테이션, 카메라의 월드 로테이션, 스프링 암의 월드 로테이션, 메쉬의 월드 로테이션 중 아무거나 써도 방향을 구할 수 있습니다.
메쉬 로테이션을 받으면 이동하는 방향이 이상한데 그 이유는 처음에 -90도를 돌렸기때문에 방향이 -90만큼 돌아가서 계산이 되기 때문입니다.
그 중에서 정면, 우측 방향에서 Z축만 계산해줍니다.
Y방향은 위 아래이기 때문에 X 축은 화면을 시계방향으로 회전시키는 방향이기 때문에 로테이션을 계산할 필요가 업습니다.
이렇게 하면 방향이 전부 나왔는데요.
어째서 액터 자체,카메라,스프링암,메쉬 로테이션 전부 다 같은 결과가 나오는 지 의문을 가질 수 있는데요.
위에서 설명했다시피 화면 방향을 이동하는 것은 컨트롤러의 로테이션을 변경하는 것이었고 그 외 컴포넌트들은 컨트롤러의 방향을 참조하기 때문이였습니다.
즉 전부 컨트롤러의 방향이였던 거죠.
그래서 컴포넌트들은 나중에라도 로테이션을 고정시킬 수도 있기 때문에 항상 방향을 바꿔줄 컨트롤러의 로테이션을 받는 것이 낫겠습니다.
'Programming > 언리얼엔진' 카테고리의 다른 글
언리얼 엔진 노티파이 (0) | 2020.07.22 |
---|---|
#02) 언리얼 애니메이션 블루프린트 (0) | 2020.07.21 |
언리얼 액터 제작,배치하기 (0) | 2020.07.20 |
언리얼 엔진 카메라, 라이트 파일럿 기능 (0) | 2020.07.20 |
언리얼 엔진 라이트 추가 (0) | 2020.07.20 |