캐릭터의 공격에 따라, 상대방의 체력을 감소 시키는 것까지
구현이 되었다고 가정하고 쓰는 글입니다.
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)
해당 글을 참고하면 된다. 위 글에 언리얼 공식문서로 연결되는 링크가 있는데 거기서 더 자세히 볼 수 있다.
다른 곳에서 호출할 것이므로, 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 과 연결되면 된다.
이제 총을 맞아줄 대상을 설치하고 제대로 동작하는지 확인해 보겠다.
정상적으로 사망 애니메이션이 동작한다.
'언리얼5 & C++' 카테고리의 다른 글
[Unreal 5, C++] 적 AI 생성하기 : 2 / 적이 나를 조준하게 하기 (0) | 2022.06.28 |
---|---|
[Unreal 5, C++ & Blueprint] 적 AI 생성하기 : 1 (0) | 2022.06.28 |
[Unreal 5, Blueprint & C++] 캐릭터 점프 구현과 오류 해결 Animation Transition (0) | 2022.06.28 |
[Unreal 5, C++] 언리얼5 C++ 로그 찍는법 (0) | 2022.06.18 |
[Unreal 5, C++] 언리얼 C++에서 변수를 에디터에 보이게 하는법 / C++ 변수 블루프린트에서 호출하기 : UPROPERTY, UFUNCTION (2) | 2022.06.18 |