FireBall 스킬 공격 시 피격 처리하기
FireBall 스킬 발사하여 Enemy와 Overlap이벤트 발생 시, 본인이 피격되는 것을 방지하기 위해 Instigator와 Owner가 아닌
Actor일 때에만 AnyDamage를 발생하도록 조건을 추가하였다.
Projectile Damage 변수를 하나 만들어서 적절한 데미지 값을 설정하였다.
Apply Damage로 데미지를 준 뒤, Destroy Actor로 바로 삭제하였다.
지형에 충돌했을 때 FireBall이 뚫고 계속 날아가는 문제
우리가 만들었던 지형(Room)을 선택 후, 콜리전 - Generate Overlap Events를 활성화 시켜주어야 FireBallProjectile의 ActorBeginOverlap 이벤트가 발생할 수 있다.
Damage 변수
BP_FireBallProjectile의 ProjectileDamage 변수의 설정을 바꿔주었다.
인스턴스 편집 가능과 스폰시 노출을 활성화시켜 주었다.
기본값은 다시 0.0으로 바꾸어 주었다.
만약 아이템이나 레벨을 통해 올라가는 데미지 증가 발생 시, Damage의
기본값으로 고정시켜둔 것이 문제가 생길 수 있기 때문에 Projectile에서
Damage를 결정해두는 것은 바람직하지 않다.
따라서 BP_FireBallProjectile의 Damage 변수를 위와같이 설정해둔 뒤, BP_FireBall의 이벤트그래프에 SpanwActorFromClass 노드를 보면 이와같이 새로운 Damage 핀이 생긴 것을 볼 수 있다.(스폰시 노출 옵션)
따라서 BP_FireBall에 Damage 변수를 생성해두고 해당 Damage 변수를 핀에 연결해주어 Projectile에 Damage 값을 직접
넘겨줄 수 있게 됬다.
FireBall의 스플래쉬 데미지 구현
FireBall이 DestroyActor로 사라질 때, 스플래쉬 데미지와 이펙트를 추가해줄 것이다.
BP_FireBallPorjectile에서 RadialDamageScale 변수 추가(블루프린트 읽기 전용) - 기본값 : 0.5 설정해주었다.
이벤트 그래프에서 오버라이드 함수 중에 Destroyed 이벤트를 추가하여 DestroyActor가 불릴 때 오도록 했다.
Apply Radial Damage
- Base Damage : 스플래쉬 데미지의 값을 말하며 기본 대미지의 0.5배 들어가도록 해주었다.
(Projectile Damage * Radial Damage Scale 값 연결)
- Origin : 현재 충돌한 위치를 넣어주면 된다. (Get Actor Location)
- Damage Radius : 스플래쉬 데미지를 줄 범위를 말한다.
* 변수 승격하여 RadialDamageRadiusScale 변수(기본값 : 10.0)를 만들고 Projectile의 Sphere Collision의 Radius와
곱한 값을 연결해주었다.
- Ignore Actors : 제외할 Actor들을 말한다. (배열 만들기로 Get Instigator를 받아왔다)
- Damage Causer : 대미지 유발자 Self
- Instigated by Controller : 컨트롤 주인을 말한다 (Instigator Controller)
- Do Full Damage : 범위와 관계없이 모두 동일한 데미지를 준다.
Spawn Emitter at Location
- Emitter Template : 생성할 이펙트를 말한다. (P_Hit_Fire)
- Location : 생성 위치를 말한다. (Get Actor Location)
- Auto Destroy : 파티클 재생 완료 시 자동 삭제 여부
- Pooling Method : 오브젝트 / 메모리 풀과 같은 것을 말함 (Pooling 활성화 시 Auto Destroy는 무시됨)
ㄴ Auto : 이 옵션을 선택하면 Auto Destroy 활성화한 것은 자체적으로 비활성화 됨
ㄴ Manual : Release to Pool을 통해 직접 해제
- Auto Activate System
FireBall 일정 시간 이후에 소멸시키기
BP_FireBallProjectile에서 설정해줄 것이다. 3가지의 방법이 있다.
1. BeginPlay 이벤트에서 Delay를 걸어 DestroyActor로 삭제하기
2. 디폴트에 있는 Actor / Inital Life Span 기능 활용하기(엑터의 수명을 정함)
3. BeginPlay 이벤트에서 Set Timer by Event 사용하기(이벤트 생성에서 K2_DestroyActor() 선택)
'언리얼엔진' 카테고리의 다른 글
42. CrossHair / 위젯 블루프린트 (0) | 2023.07.04 |
---|---|
41. Camera의 Zoom In / Out 구현하기 (0) | 2023.07.03 |
39. FireBall 발사 / ProjectileMovement 컴포넌트 (0) | 2023.06.29 |
38. FireBall(원거리 공격) / LineTraceForObjects (0) | 2023.06.29 |
37. Dot, Cross Product / 삼각함수 atan2 (0) | 2023.06.27 |