2023-06-30 언리얼(FireBall 스킬 피격처리, 스플래쉬 데미지, Actor삭제, 스폰시 노출)
FireBall 스킬 공격 시 피격 처리하기
FireBall 스킬을 사용하여 Enemy에 Overlap이 발생 시, 해당 스킬이 본인이 피격되는 현상을 방지하기 위해 Instigator와 Owner가 아닌 Actor일 때에만 AnyDamage를 발생할 수 있도록 조건을 추가한다.
이후 앞 조건을 완료 후 피격이 성공할 시 대미지를 넣을 수 있도록 추가한다.
BaseDamage에는 ProjectileDamage변수를 추가해 기본값을 넣어주면 기본값으로 대미지가 들어갈 수 있다.
이후 피격이 성공하면 ApplyDamage로 대미지를 넣어주고, 이후 DestroyActor로 FireBall을 삭제하도록 한다.
FireBall이 지형에 충돌해도 무시하고 뚫는 경우
맵(Room)을 지정해 콜리전을 설정해 준다.
Generate Overlap Event를 true로 설정한다.
스폰 시 노출
BP_FireBallProjectile의 ProjectileDamage 변수의 설정을 바꿔주자.
인스턴스 편집가능 : true
블루프린트 읽기 전용 : true
스폰 시 노출 : true
기본값은 : 0
차후 아이템이나 레벨을 통해 올라가는 대미지 증가 발생 시, Damage의 기본값으로 고정시켜 준 것이 문제가 생길 수 있기 때문에 Progectile에서 Damage를 결정해 두는 것은 옳지 못할 수도 있다.
그래서 BP_FireBallProjectile의 Damage 변수를 위처럼 설정한 뒤, BP_FireBall의 이벤트 그래프에 SpanwActorFromClass 노드를 보면 새로운 Damage핀이 생긴 것 을 확인할 수 있다.
이 것이 스폰 시 노출 옵션의 기능이다.
따라서 BP_FireBall에 Damage 변수를 생성해 두고 해당 Damage 변수를 핀에 연결해 주어 Projectile에 Damage 값을 직접
넘겨줄 수 있게 됐다.
FireBall의 스플래쉬 대미지 구현(Apply Radial Damage)
FireBall이 충돌 일어 날씨 소멸이 돼지만 사라지는 효과를 넣지 않아 밋밋할 수 있다.
그러므로 소멸(DestroyActor)이 일어날 때 스플레쉬에 대미지를 넣고 소멸하는 이펙트도 추가해 보자.
BP_FireBallPorjectile에서 RadialDamageScale 변수 추가(블루프린트 읽기 전용) - 기본값 : 0.5 설정해 준다.
그리고 이벤트 그래프에서 오버라이드 함수 중에 Destroyed 이벤트를 추가하여 DestroyActor가 호출 시 Destroyed 이벤트를 사용할 수 있도록 한다.
- 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이 일정 시간 이후 소멸시키기
생성된 FireBall 소멸시키는 것은 BP_FireBallProjectile에서 설정을 해줄 것이며 소멸시키는 데는 3가지 방법이 있다.
1. BeginPlay 이벤트에서 Delay를 걸어 DestroyActor로 삭제하기
2. 클래스 디폴트에 있는 Actor / Inital Life Span 기능 활용하기(엑터의 수명을 정한다)
3. BeginPlay 이벤트에서 Set Timer by Event 사용하기(이벤트 생성에서 K2_DestroyActor() 선택)