이동과 회전
🌝 공지 사항 이 포스트는 인프런의 입문자를 위한 UE5-Part3. 언리얼 엔진 3D 게임 개발 입문 강의를 통해 학습한 내용의 요약입니다. 자세한 내용은 해당 강의를 참고해주세요.
Input 받아서 캐릭터 이동
강의를 들어가기 전에 구현한 앞뒤 이동 로직은 아래와 같다.
- MoveForward value를 받아서 0이 아닐 때 실행한다.
- MoveSpeed와 Delta Seconds를 곱해서 틱당 이동할 속도를 구한다.
- 틱당 이동속도에 MoveForward value를 곱해서 최종적으로 이동하는 값을 계산
- Actor의 Location X축에 값을 더해서 Set Actor Location으로 처리
이 경우 문제는 아래와 같다.
- 직접 계산하는 코드가 너무 길다
- 좌우 이동까지 같은 로직으로 구현한다면 normalize가 되지 않아 대각선 이동이 더 빨라질 것으로 추측
이를 Character Movement Component를 이용하면 Add Movement Input 노드를 활용해 아래와 같이 구현할 수 있다.
해당 노드를 이용하면 모든 Input을 받아 이동할 방향벡터(normalized)가 구해지고, 해당 방향으로 Character Movement Component가 가진 최대속도 및 가속도에 영향을 받아 움직이게 된다.
Input 받아서 캐릭터 회전
회전을 구현하라고 해서 아무 생각없이 Add Controller Yaw Input으로 해결했다.
(근데 이 함수는 Player controller Actor의 Yaw를 변경하는 함수였음.) 강의에서는 왜 다른 방법으로 했을 때 안되는지 설명함. 직접 계산하는 코드는 아래와 같다.
- Axis Value * Turn Rate(360.0f) * Delta Seconds = 틱당 회전해야 하는 각도
- 이를 Get Actor Rotation으로 얻어온 Yaw값에 더해준다.
- Set을 실행
이렇게 하면 작동하지 않는다. 애초에 내가 Add Controller Yaw Input 으로 했을 때 작동했던 이유가 있었는데, 아래와 같다.
- BP_Player -> Details -> Pawn -> Use Controller Rotation Yaw 가 True 상태.
- 즉, 콘트롤러를 통해서 Yaw를 조정하겠다고 이미 강제되어 있기 때문에 다른 방법으로는 Yaw를 조정할 수 없게 되어있음.
결론
- Add Controller Yaw Input은 runtime 시 레벨에 배치되는 Player Conroller라는 Actor의 Yaw(Y)값을 변경해주는 함수이다.
- Player BP의 옵션 중 Use Controller Rotation Yaw는 콘트롤러의 Yaw값을 플레이어의 Yaw값으로 하고, 다른 Yaw 값 변경사항은 무시한다.
- Value는 변경할 값을 바로 꽂아주는 것이기 때문에, 올바른 사용법은 Axis Value를 꽂아주는 것이 아니라, Turn Rate와 Delta Seconds를 곱한 값을 넣어주는 것이다. (arg가 “Val”인 것에 주목)
댓글남기기