부비새
부비새의 개발 일기
부비새
전체 방문자
오늘
어제
  • Category (70)
    • Project (7)
      • NightAtTheGallery (1)
      • GGWP - DEADLINE (6)
    • ToyProject (41)
      • RedCaped (33)
      • EcoA76 (2)
      • SkyTemple (6)
    • GAS (2)
      • 개인저장용 (2)
    • PCG (4)
    • UE5 (12)
      • 공부 (9)
      • C++ (1)
      • 놀이터 (2)
    • Houdini (3)
      • 공부 (3)
    • OpenGL (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
부비새

부비새의 개발 일기

[언리얼엔진 5] 6. FloatingDamage and Critical
ToyProject/RedCaped

[언리얼엔진 5] 6. FloatingDamage and Critical

2022. 12. 28. 00:42

공격기능이 추가 되었으니 가한 데미지를 표기해주어야 한다. 화면에 보여주기 위해 Widget Blueprint를 이용한다. 데미지를 받은 액터에서 함수를 호출하고 싶기에 다음과 같이 구성해주었다.

고정된 텍스트만 띄우면 밋밋할 수 있으니 텍스트에도 간단한 애니메이션을 추가해주었다. 

애니메이션 트랙
귀여운 100이 올라가는 모습

위젯을 만드는 겸 크리티컬 시스템도 만들기로 하였다. 플레이어에서 크리티컬 확률과 크리티컬 데미지를 조정할 수 있고 애님노티파이에 추가하였다.

크리티컬이 발동하면 크리티컬 데미지비율만큼 추가로 데미지를 주고 데미지타입을 설정

순조로운 개발중 처음으로 문제가 발생하였다. 크리티컬이 발생하면 Damage Type Class로 Critical Type 오브젝트 레퍼런스를 넘겨주었다. 그렇기에 데미지를 받는 액터 Any Damage 이벤트의 Damage type 핀으로 ==을 사용하여 구별하려고 하였다. 

CriticalType 오브젝트를 넘겨주었기에 True를 반환할 줄 알았다

하지만 크리티컬이 발생해도 해당 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
    부비새
    부비새
    언리얼엔진과의 싸운 흔적입니다

    티스토리툴바