언리얼 엔진 - Pawn 이동
카메라 회전에는 성공했으나 플레이어 캐릭터가 움직이지 않는다.
플레이어 캐릭터가 이동할 수 있도록 설정한다.
IA_Move
Content
└─Assets
└─Input
└─Actions
└─IA_Move (+)
- IA_Move 블루프린트를 추가한다.
- 블루프린트를 열어 Value Type 값을 Asix 2D 벡터로 선택한다.
- 상하좌우 축이 2개 필요함으로 Asix 2D로 선택하였다.
IMC_Default 편집
Content
└─Assets
└─Input
└─IMC_Default (*)
- 블루프린트를 편집할 수 있도록 IMC_Default 를 열어준다.
- Mappings 를 추가하여 IA_Move 등록한다.
- WSAD 각각 처리할 수 있도록 키를 등록한다.
- 추가로 Asix2D 등록으로 X,Y,Z = 1,0,0 이 기본 Double 값이다.
- D 키는 X축이 양수 이동이므로 1,0,0 으로한다.
- A 키는 X축이 음수 이동이므로 -1, 0, 0 으로 한다. Negero 부호만 바꿔도 된다.
- W키는 Y축이 양수 이동이므로 0, 1, 0 으로 한다. XYZ->YXZ 치환한다.
- S 키는 Y축이 음수 이동이므로 0, -1, 0 으로 한다.YXZ 치환하고 Negero 부호 변경한다.
BP_PlayerController 편집
다음으로 BP_PlayerController 블루프린트를 편집한다.
Content
└─Blueprints
└─BP_PlayerController (*)
PlayerController 에서 자신이 직접 조종하는 폰을 가져와야한다. GetControlledPawn 노드를 가져와 변수로 저장한다.
캐싱 - 캐스트한 BP_Player 새로운 변수(Promote As Variable)로 저장한다.
- PlayerController 에서 직접 조종하는 BP_Player 인스턴스를 가져와 변수로 캐스트한다.
플레이어 입력으로 회전하기
- BP_Player 캐스트한 변수를 설정하였으므로 Add Movement Input 노드를 가져와 연결한다.
- IA_Move 노드, GetControlRotation 노드를 추가한다.
- Right Vector, Forward Vector 노드도 각각 추가한다.
GetControlRotation
PlayerController의 Rotation 값을 가져온다.
GetRightVector
좌우 이동 용도로 사용할 것임으로 RightVector 로 Rotation 핀을 연겨한다.
Add Movement Input
이벤트처럼 입력 키와 스케일, 회전을 입력한 값으로 Pawn(BP_Player)의 CharacterMovement 컴포넌트로 실행하라고 전달한다.
인 게임
- 카메라가 바라보는 쪽으로 캐릭터가 회전하고 상하좌우 이동한다.
캐릭터를 움직이도록 하려면 BP_Player 컴포넌트 관련 CharacterMovement.OrientRotationtoMovement 활성화하여 캐릭터를 이동하도록 한다. 회전이 자연스럽지 않으면 위에 Z축 360도를 변경해보도록 한다.
CharacterMovement 에는 이동과 관련된 가속도 물리, 공중부양 등 폰과 관련된 여러 가지 옵션을 설정할 수 있다.
CharacterMovement 네트워크
Actor 가 레플리케이트 설정되어있다면 캐릭터무브먼트 컴포넌트 레플리케이트를 안켜도 멀티플레이어에서도 캐릭터가 움직인다.
또 한 캐릭터 이동과 관련된 네트워크 처리는 굉장히 까다롭다. 실시간에 가깝게 네트워크 처리를 해야하나 언리얼 엔진은 자동으로 무브와 관련된 것은 prediction 예측을 사용한다. 즉, 네트워크 처리는 서버가 검증하고 플레이어 캐릭터가 움직이도록 허락하지만. Prediction 예측 방식은 서버 검증을 받기 전에 먼저 플레이어 캐릭터가 움직이고 서버가 후 검증한다.