IT/UE5
[UE5] 착지 시점 감지 [2단점프구현 - 2]
u149_cinderella
2025. 3. 21. 14:02
현재 지상인지 검사하기 위해서 IsFalling을 매틱마다 검사해야하면 비용측면에서 꺼려진다.
그래서 다른 방법을 물어봤는데
나에게 제일 적절한걸 찾았다.
바로 공식문서를 봐보자
(Landed함수 공식문서)
HitResult를 매개변수로 넣어줘야한다.
정확히는 착륙을 했을때 호출된다기 보다는 떨어지는중에 어딘가에 부딪히면 호출되기에 내가 원하던 함수랑은 살짝 다르고 파란색으로 링크되어있는 OnMovementModeChanged를 봐보면 될거같다.
(OnMovementModeChanged)
오버라이딩 하면 캐릭터의 상태관리를 쉽게 할 수 있을듯 하다.
void ARunner::OnMovementModeChanged(EMovementMode PrevMovementMode, uint8 PreviousCustomMode)
{
Super::OnMovementModeChanged(PrevMovementMode, PreviousCustomMode);
if (GetCharacterMovement()->IsFalling())
{
CharacterState = ECharacterState::ECS_Jumping;
}
else
{
if (GetVelocity().Size() == 0.f)
{
CharacterState = ECharacterState::ECS_Idle;
}
}
그래서 이런식으로 작성했는데(ECharacterState는 내가 만든 enum class이다.)
아쉽게도 onmovementmodechanged는 단순히 속도가 0이 될때는 호출되지않는다.
따라서 평지에서 걷다가 정지했을때는 다른 방식이 필요하다.
Tick함수 내에서 velocity를 검사하는 것 말고는 다른 방법은 없을 듯 하다.(그려면 그냥 처음부터 isfalling을 tick에서 할걸그랬네)
화면에 로그찍는건 bp에서 만들었다.
상태관리는 이쯤하면 될것같고 다음으로는 밟으면 튕겨나는 발판을 만들어보자