티스토리 뷰
간만의 언리얼 포스팅입니다! 중요한 일을 앞두고 있었어서 언리얼 프로젝트는 잠깐 쉬었어요. 이제 또 격일이나 매일 언리얼 공부를 할것 같습니다.
오늘은 우선 코드 리팩토링을 했습니다. 리팩토링은 좋은 습관이니 습관을 들이거나 의도적으로 하는게 좋습니다~
그 다음으론 전 단계에서 러프하게 잡아줬던 애니메이션들을 정교하게 잡아주었어요. 단순히 앞으로만 가는 애니메이션만 출력하는 것이 아니라 플레이어 이동 방향에 따라 다른 애니메이션을 출력하고 필요에 따라서는 블랜드 하는 방식을 사용했습니다.
이런 방식을 하기 위해서는 플레이어가 이동하는 방향을 알아야합니다. 플레이어가 보는 방향과 이동하는 방향의 벡터의 사이 값을 구하면 됩니다. 이는 다음과 같은 그림을 띄게 됩니다.
플레이어의 정면 방향이 무조건 각도 0이 된다고 하면 B방향으로 전진하는 플레이어는 -45도의 차이각이 있다고 판단합니다. 반대로 A방향으로 이동하면 + 각도가 되겠지요. 이 각도를 이용하여 플레이어가 어떤 애니메이션을 띄워야하는지를 판별합니다.
UKismetMathLibrary 클래스는 각도의 계산을 편히 하도록 도와줍니다. UKismetMathLibrary 클래스를 include 하고 적당히 계산해줍시다.
언리얼에서는 애니메이션 블랜드를 사용합니다. 다음 그림과 같습니다.
위 그림은 running 상태의 애니메이션 블랜드입니다. 하단의 빨간 가로선을 보면 가로축에 따라서 어떤 애니메이션을 출력할 것인지 토글을 잡아 뒀습니다.
이처럼 애니메이션 블랜드를 이용하여 달릴때, 멈출때, 달리기 시작할 때의 정면,좌우,후방이동까지 애니메이션을 잡아 뒀습니다!
아래는 영상입니다.
그런데 영상을 보면 플레이어가 멈출 때 조금 이상하게 느껴집니다. 그 이유는 플레이어가 멈출때의 플레이어 정면방향과 플레이어 이동 방향의 차이는 0입니다. 입력값이 없기 때문입니다.
그러면 어떻게 해야할까요?
이전의 상태를 받아오면 됩니다. 플레이어가 이동하는 힘인 velocity가 0.f 보다 클 때만 이전 상태를 현재 상태로 업데이트 해 줍니다. 그러면 이동하지 않을 때에 전의 상태가 어땠는지 알 수가 있겠죠. 코드는 아래와 같습니다.
캐릭터의 이동방향을 가져오고, 그 크기가 0.f 보다 커야만 이전의 움직임 각을 갱신해 줍니다.
이렇게 설정한 이전 상태각도는 캐릭터가 멈출때 사용됩니다.
오늘 완성한 동영상을 올리고 마치겠습니다.
'Unreal > Shooter Project (完)' 카테고리의 다른 글
[UE5] FPS 프로젝트 - 6 (0) | 2023.05.15 |
---|---|
[UE5] FPS 프로젝트 - 5 (0) | 2023.05.12 |
[UE5] FPS 프로젝트 - 3 (0) | 2023.04.26 |
[UE5] FPS 프로젝트 - 2 (0) | 2023.04.21 |
[UE5] FPS 프로젝트 - 1 (0) | 2023.04.20 |
- Total
- Today
- Yesterday
- 스택/큐
- 재귀
- 개인공부
- greedy
- 너비우선탐색
- 고득점 Kit
- 정렬
- 완전탐색
- 누적합
- 채팅서버
- 힙
- IMGUI
- level3
- Ue
- 고득점kit
- Heap
- FPS
- Unreal 5.1
- 데디케이티드
- 디자인 패턴
- 탐욕법
- BFS
- LV2
- DFS
- UE5
- 해시
- 프로그래머스
- LV3
- C++
- sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |