IT/UE5

[UE5] 착지 시점 감지 [2단점프구현 - 2]

u149_cinderella 2025. 3. 21. 14:02

현재 지상인지 검사하기 위해서 IsFalling을 매틱마다 검사해야하면 비용측면에서 꺼려진다.

그래서 다른 방법을 물어봤는데

나에게 제일 적절한걸 찾았다.

바로 공식문서를 봐보자

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/GameFramework/ACharacter/Landed

(Landed함수 공식문서)

 

HitResult를 매개변수로 넣어줘야한다.

정확히는 착륙을 했을때 호출된다기 보다는 떨어지는중에 어딘가에 부딪히면 호출되기에 내가 원하던 함수랑은 살짝 다르고 파란색으로 링크되어있는 OnMovementModeChanged를 봐보면 될거같다.

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/GameFramework/ACharacter/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에서 만들었다.

 

상태관리는 이쯤하면 될것같고 다음으로는 밟으면 튕겨나는 발판을 만들어보자