티스토리 뷰

반응형

캐릭터의 상태를 앉기, 일어나기 상태로 변경하기위해 기능을 추가했다. (참고로, 언리얼 엔진에서는 캐릭터가 가지고있는 캐릭터 무브먼트 컴포넌트가 Crouch(), UnCrouch()라고 앉기, 일어나기 기능을 가지고 있다.)

DoCrouch()라는 함수를 만들고, Crouch가능한 상태이면 Crouch를 실행하고, 아니면 UnCrouch를 실행하도록 코드를 생성하고, 실행했지만 캐릭터가 반응하지 않았다.

void AMyPlayer::DoCrouch()
{
	UE_LOG(LogClass, Warning, TEXT("DoCrouch"));
	CanCrouch() ? Crouch() : UnCrouch();
}

혹시 몰라 로그도 찍어봤지만, DoCrouch함수는 잘 실행되고 있었다.

 

그래서 찾아봤더니, 캐릭터가 가지고있는 CharacterMovement의 CanCrouch값이 true로 설정되어 있어야 Crouch명령이 실행 가능했다.

CharacterMovement의 NavMovement

블루프린트에서 설정하게 되면 디폴트값이 false이기 때문에 개발도중 값이 날아갈 가능성이 있어서 C++코드를 이용해 디폴트 값을 true로 설정해주기로 했다.

CharacterMovement를 받고, 그 안에서 CanCrouch값을 찾으려 했지만, 보이지 않았고, 관련된 함수를 따라 들어갔을때 아래처럼 NavAgentProps의 bCanCrouch값을 이용하는것을 확인했다.

/** @return true if component can crouch */
FORCEINLINE bool CanEverCrouch() const { return NavAgentProps.bCanCrouch; }

그리고 조금 위를 살펴보니 

/** @returns the NavAgentProps */
FORCEINLINE FNavAgentProperties& GetNavAgentPropertiesRef() { return NavAgentProps; }

이 함수를 통해 NavAgentProps를 받아올수 있었고, AMyPlayer.cpp파일에서 그값에 접근하여 true값으로 설정해주는것이 가능했다.

GetCharacterMovement()->GetNavAgentPropertiesRef().bCanCrouch = true;

위의 코드를 AMyPlayer.cpp에 추가하여 빌드했더니 CharacterMovement의 CanCrouch값이 true로 디폴트 셋팅되었다.

반응형
댓글