공격기능이 추가 되었으니 가한 데미지를 표기해주어야 한다. 화면에 보여주기 위해 Widget Blueprint를 이용한다. 데미지를 받은 액터에서 함수를 호출하고 싶기에 다음과 같이 구성해주었다.
고정된 텍스트만 띄우면 밋밋할 수 있으니 텍스트에도 간단한 애니메이션을 추가해주었다.
위젯을 만드는 겸 크리티컬 시스템도 만들기로 하였다. 플레이어에서 크리티컬 확률과 크리티컬 데미지를 조정할 수 있고 애님노티파이에 추가하였다.
순조로운 개발중 처음으로 문제가 발생하였다. 크리티컬이 발생하면 Damage Type Class로 Critical Type 오브젝트 레퍼런스를 넘겨주었다. 그렇기에 데미지를 받는 액터 Any Damage 이벤트의 Damage type 핀으로 ==을 사용하여 구별하려고 하였다.
하지만 크리티컬이 발생해도 해당 boolean은 False를 반환하였다. 데미지타입을 사용하지 않고 다른 변수를 추가하면 똑같은 기능을 구현할 순 있겠지만 효율적이지 않고 의미없이 지저분해질 수 있다. 그렇기에 여러 방법을 동원하던 중 하나의 해결책을 찾았다.
==으로 원하는 기능이 구현할 수 없으니 cast to노드로 구현해보았다. 파라미터의 DamageType을 CriticalType로 캐스팅하여 성공할 경우 크리티컬이라고, Cast Failed하면 크리티컬이 아니라고 판단하여 작성하였다. 이후 크리티컬이면 크리티컬 위젯을 띄우고 아니면 일반 데미지 위젯을 띄운다.
캐스팅으로 구현이 되나 ==으로 구현이 되지 않는 이유는 알아본 후 이후 공부 카테고리에 추가하겠다. 일단은 해결되었으니 개발을...
데미지위젯의 폰트나 효과는 이후 강화할 것이다. 역시 공부할 것이 많다.
'ToyProject > RedCaped' 카테고리의 다른 글
[언리얼엔진 5] 8. Particle and Collision Attack (0) | 2023.01.02 |
---|---|
[언리얼엔진 5] 7. Current Player State + Error Handling (0) | 2022.12.30 |
[언리얼엔진 5] 5. Player Attack (0) | 2022.12.27 |
[언리얼엔진 5] 4. AI Attack (0) | 2022.12.27 |
[언리얼엔진 5] 3. AI Movement (0) | 2022.12.27 |