Hip Aim Offset
지금은 위아래 또는 좌우로 돌렸을 때 aim이 해당 방향을 향하지 않는다.
이번엔 이에 대한 조정을 해줄 것이다.
먼저 이를 위한 Aim Offset을 생성해주자.
다음으로 Axis 값을 설정해주자.
Yaw 해당 하는 값은 -180 ~ 180으로, Pitch에 해당 하는 값은 -90 ~ 90으로 값을 설정해주자.
다음으로 애니메이션을 할당해주자.
AO를 검색해보면 Idle에 대한 애니메이션이 나온다.
CC의 경우 센터의 센터, CD의 경우 센터의 다운, CU의 경우 센터의 업이다.
LBC의 경우는 left back center이다.
이러한 약자를 참고하여 애니메이션 위치를 할당해주자.
이제 해당 AimOffset을 이용해 Yaw 값을 적용시켜보자.
Root Yaw Off set 값을 얻고, 반대값인 -1을 곱해준다.
이는 Root Yaw Off Set 값이 만약 양수 일때, Root Bone은 오른쪽으로 회전하지만 카메라는 정면을 보기 위해 왼쪽으로 보정을 해주는 행위이다.
음수의 경우도 마찬가지로 Root Bone은 왼쪽으로 회전하지만 카메라는 정면을 보기 위해 오른쪽으로 보정을 해주어야 하기 때문에 -1을 곱하여 양수로 만들어준다.
이를 통해 시야는 유지하면서 회전하는 동작을 만들게 된다.
다음으로 Pitch 값 설정을 위해 AnimInstance 클래스에서 해당 변수를 생성해주자.
그리고 GetBaseAimRotation() 함수를 통해 Pitch 값을 얻어주자.
이제 해당 Pitch 값을 할당하고 컴파일 해주자.
이 상태에서 좌우 또는 상하 회전 시 그에 맞게 Aim을 두는 것을 볼 수 있다.
하지만 회전하면서 재장전을 할 때 클립 배치가 이상해지는 모습이 생길 수 있다. (클립 이동 실습을 했을 경우)
이를 고치기 위해 재장전에 대한 변수를 선언하고 초기화해주자.
재장전인지를 알려먼 CombatState를 알아야 한다.
따라서 ShooterCharacter 클래스에서 Getter() 함수를 생성해주자.
이제 애니메이션 속성 업데이트 함수에서 재장전 여부를 체크해주자.
해당 값을 가지고 Blend Poses by bool 함수를 이용하여 재장전 일떄와 아닐 때 다른 애니메이션을 재생시켜주자.
이제 컴파일 하고 실행해보면 재장전 중일 때는 Aim Offset이 동작하지 않아 클립 배치가 이상해지지 않는다.
여기서 추가적으로 탄약이 꽉 찼을 때는 재장전 하지 않도록 기능을 Weapon 클래스에서 생성해주었다.
간단하게 Ammo가 최대 용량보다 크거나 같은지 체크한 값을 return 해준다.
이를 무기 교체 함수에서 체크해주는 부분을 넣어주자.
다음으로 현재 회전 시 손과 총기가 제대로 일치하지 않는 점을 수정해주자.
기존 연결된 애니메이션을 회전하지 않는 Cached Hip to Aim으로 바꿔주자.
새 스테이트 머신을 만들어서 위 내용들을 넣어줄 것이다.
해당 내용을 또 cached로 저장해주자.
그리고 회전하기 전에 해당 Aim Offset 을 할당해주자.
이렇게 기존의 회전 후 AimOffset을 AimOffset 후 회전으로 바꿔줌으로서 손과 Aim 조준이 많이 일치하게 된다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-7 (0) | 2024.09.02 |
---|---|
Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-6 (0) | 2024.09.02 |
Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-4 (0) | 2024.09.01 |
Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-3 (0) | 2024.08.31 |
Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-2 (0) | 2024.08.31 |