[unrealengine4]

2023-06-30 언리얼(FireBall 스킬 피격처리, 스플래쉬 데미지, Actor삭제, 스폰시 노출)

롤링페이퍼 2023. 7. 4. 03:26
FireBall 스킬 공격 시 피격 처리하기

 

FireBall 스킬을 사용하여 Enemy에 Overlap이 발생 시, 해당 스킬이 본인이 피격되는 현상을 방지하기 위해 Instigator와 Owner가 아닌 Actor일 때에만 AnyDamage를 발생할 수 있도록 조건을 추가한다.

BP_FireBallProjectile의 ActorBeginOverlap이벤트

이후 앞 조건을 완료 후 피격이 성공할 시 대미지를 넣을 수 있도록 추가한다.

 

BaseDamage에는 ProjectileDamage변수를 추가해 기본값을 넣어주면 기본값으로 대미지가 들어갈 수 있다.

이후 피격이 성공하면 ApplyDamage로 대미지를 넣어주고, 이후 DestroyActor로 FireBall을 삭제하도록 한다.

 


FireBall이 지형에 충돌해도 무시하고 뚫는 경우

 

맵(Room)을 지정해 콜리전을 설정해 준다.

Generate Overlap Event를 true로 설정한다.

Room의 콜리전


스폰 시 노출

 

BP_FireBallProjectile의 ProjectileDamage 변수의 설정을 바꿔주자.

인스턴스 편집가능 : true

블루프린트 읽기 전용 : true

스폰 시 노출 : true

기본값은 : 0

차후 아이템이나 레벨을 통해 올라가는 대미지 증가 발생 시, Damage의 기본값으로 고정시켜 준 것이 문제가 생길 수 있기 때문에 Progectile에서 Damage를 결정해 두는 것은 옳지 못할 수도 있다.

그래서 BP_FireBallProjectile의 Damage 변수를 위처럼 설정한 뒤, BP_FireBall의 이벤트 그래프에 SpanwActorFromClass 노드를 보면 새로운 Damage핀이 생긴 것 을 확인할 수 있다.

이 것이 스폰 시 노출 옵션의 기능이다.

따라서 BP_FireBall에 Damage 변수를 생성해 두고 해당 Damage 변수를 핀에 연결해 주어 Projectile에 Damage 값을 직접

넘겨줄 수 있게 됐다.

BP_FireBall의 Damage  기본값 : 10.0


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() 선택)