본문 바로가기
언리얼5 & C++

[Unreal 5, C++] 캐릭터 사망 & 애니메이션 : C++ 변수, 함수를 블루프린트에서 사용하기

by 17번 일개미 2022. 6. 28.
728x90

캐릭터의 공격에 따라, 상대방의 체력을 감소 시키는 것까지

구현이 되었다고 가정하고 쓰는 글입니다.

 

STEP 1 : 애니메이션 블루프린트 설정

 

 

먼저, 위와같은 상태를 만들어 준다.

죽음은 언제 어떤 상황에서도 발생할 수 있으므로 가급적 웬만한 상황에서 다 연결시켜 준다.

(유니티의 AnyState 같은 기능이 언리얼에 있는지 아직 공부하지 못 한 상태)

 

 

Dead상태로 들어가 Dead 애니메이션을 선택하고,

Detail 패널의 Loop를 반드시 꺼주도록 하자. 죽는 모션이 반복되면 안되기 때문.

 

 

그리고 IsDead 변수를 만들어 조건으로 넣어준다.


STEP 2 : C++ 스크립트 설정

 

public :
	UFUNCTION(BlueprintPure)
	bool IsDead() const; // 사망 함수

 

UFUNCTION 에 대해서는 [Unreal 5, C++] 언리얼 C++에서 변수를 에디터에 보이게 하는법 / C++ 변수 블루프린트에서 호출하기 : UPROPERTY, UFUNCTION (tistory.com)

 

[Unreal 5, C++] 언리얼 C++에서 변수를 에디터에 보이게 하는법 / C++ 변수 블루프린트에서 호출하기 :

변수 선언 시에 UPROPERTY를 사용하면 에디터에서 내가 선언한 변수를 볼 수 있다. UPROPERTY(EditAnywhere) // 에디터에서 수정가능 int32 HP; UPROPERTY(VisibleAnywhere) // 에디터에서 보기만 가능 float Spee..

wildgoosechase.tistory.com

해당 글을 참고하면 된다. 위 글에 언리얼 공식문서로 연결되는 링크가 있는데 거기서 더 자세히 볼 수 있다.

 

다른 곳에서 호출할 것이므로, Public: 이하에 작성하고

UFUNCTION() 에 BlueprintPure 옵션을 넣어주고,

C++ 에서 캐릭터가 죽는지를 확인할 bool형 함수인 IsDead()를 const 로 선언한다.

 

캐릭터의 사망여부 판단은 게임 내에 어떠한 변화도 주지 않는 기능이기에 블루프린트에서 Pure, ,C++에서

const로 선언할 수 있다. 이를 통해 안정적인 코드를 만들 수 있다는 이점이 존재한다고 한다.

 

// PlayerCharacter.h
float Health = 100;

// 죽는지 확인하기 PlayerCharacter.cpp
bool APlayerCharacter::IsDead() const
{
	return Health <= 0; // 현재 체력이 0 이하로 떨어지면 True
}

현재 체력을 담을 Health는 헤더 파일에 선언해주고,

아까의 IsDead함수를 구현해 준다.

 

' Health == 0 ' 으로 하지 않는 이유는, 체력은 무언가에 의해 특정 값(데미지)이 계속 감소 될 것인데,

남은 체력이 10이라고 할 때, 20의 데미지가 들어오면 체력은 -10 이 되기에 '0' 이라는 조건을 피해갈 수도 있기 때문이다.

(물론 체력 변수가 0 이하라면 항상 0 이 되도록 고정할 수도 있지만, 안전한 코딩을 위해 둘 다 할 것이다.)

 

여기까지 하고, 에디터에 반영되도록 꼭 컴파일 & 빌드를 해준다.


STEP 3 : 애니메이션 블루프린트 Event Graph 설정

 

 

TryGetPawnOwner 에서 PlayerCharacter 로 Cast 해준다.

 

 

이 과정은 C++ 에서 만든 IsDead 함수를 가져오기 위한 것이므로, BP_PlayerCharacter 가 아닌

C++ PlayerCharacter로 Cast 해야한다.

 

 

 

 

Cast 후 As Player Character 를 드래그해 스크립트 안의 IsDead를 불러와 준다.

 

 

그 후 해당 함수의 return 값으로 애니메이션 블루프린트의 Is Dead 변수값을 변경해주도록 한다.

Cast 함수의 연결 부분은 이전에 작업한게 있다면 마지막 작업에서 이어지도록,

없다면 Event Blueprint Update Animation 과 연결되면 된다.


 

이제 총을 맞아줄 대상을 설치하고 제대로 동작하는지 확인해 보겠다.

 

 

정상적으로 사망 애니메이션이 동작한다.

728x90