본문 바로가기

언리얼 BluePrint 정리

06/30 학습 정리 ( Apply Radial Damage, Memory Pool )

Apply Damage

 

BP_FireBallProjectile 이벤트그래프 ActorBeginOverlap이벤트

 

FireBall스킬을 구현했으니 데미지도 적용 시켜줘야 하는데 스폰 되는 위치가 플레이어의 손이기 때문에 시전자인 플레이어가 데미지를 입지않게 OtherActor가 Instigator, Owner와 일치하지 않을때만 데미지를 적용 시켜주고 데미지를 준 파이어볼은 Destroy Actor를 이용해 사라지게한다.

나중에 총같은 무기를 구현할 때 Projectile Movement가 들어갈 곳은 총알, Owner는 총, Instigator는 총을 쏘는 플레이어라서 위처럼 나누어주는것이 좋다.

 

 

위 방식은 파이어볼이 적에게 닿아야 사라지기에 허공에 발사 했을 때도 사라지게 하기위해 딜레이를 주거나 DestroyActor를 타이머로 작동시키거나 파이어볼의 LifeSpan을 조정한다.

 

스폰시 노출

 

FireBall 스킬을 위해 FireBallProjectile을 만들었지만 나중에 하늘에서 FireBall들이 10개가량 떨어지는 스킬을 만들었다고 하면 BP_FireBall의 데미지의 10배가 들어가게되고 Projectile을 똑같은걸 또 만들어야하는 번거로움이 있어 재활용 할 수있게 ProjectileDamage 변수를 인스턴스 편집가능으로 Public으로 만들고 스폰시 노출을 체크하여 Projectile이 아닌 스킬BP에서 데미지를 설정 해주게 한다.

 

 

Spawn Actor from Class에서 Projectils Damage 입력핀이 생성된다.

 

방사형 데미지 ( Radial Damage ) 구현

 

디아2 소서 스킬인 화염구 처럼 날아가서 폭발할 때 방사형 데미지 ( 스플래시 데미지 )를 구현해보자

 

Apply Radial Damage

 

방사형 데미지를 주는 노드

특정 Location에서 Radius값을 가지는 구를 생성하여 그범위 안에 있는

Actor에 데미지를 준다.

 

Base Damage : 데미지값

Origin : 공격 범위인 구의 중심 위치 값

Damage Radius : Origin을 중심으로 공격범위를 만들 구의 반지름

Do Full Damage : 데미지가 구의 테두리로 갈수록 데미지가 감소 되는데

감소없이 적에게 Base Damage를 전부 적용시키고 싶으면 체크

Damage Prevention Channel : 데미지를 차단할 오브젝트 설정

예를들어 폭발범위에 플레이어가 있어도 폭발지점과 플레이어 사이에

벽같은게 있어서 데미지를 안받게 하고 싶을 때 사용

 

 

 

화염구가 Destroy되면 방사형 데미지 발생

데미지는 화염구의 데미지의 반(Radial Damage Scale : 0.5)

발생 지점은 화염구가 터질 때의 위치(Get Actor Location)

데미지 범위는 Sphere Collision의 10배(Radial Damage Radius Scale)

플레이어가 휘말리면 안되니 Ignore Actor에 추가

폭발 범위 전체에 같은 데미지를 주기위해 Do Full Damage 체크

Spawn Emitter at Location으로 폭발이펙트도 추가해준다.

 

메모리 단편화 , 풀링

 

객체의 동적할당이 자주 일어날 경우 수많은 메모리들이 생성, 삭제를 반복하여 틈이 발생하는데 그 틈들을 합치면 메모리가 할당이 될수 있음에도 불구하고 할당을 못시키는 현상을 메모리 단편화에서 외부 단편화라고 한다.

 

이러한 현상을 해결하는 방법중 하나가 풀링(Pooling) 기법이다.

풀링기법은 필요한 메모리 공간을 필요한 크기, 개수를 사용자가 직접 지정하여 미리 할당하고 필요할 때 꺼내쓰고 다 사용하면 반납하는 기법으로 탄막슈팅의 탄막이라던지, 반복되는 이펙트 같은 오브젝트들은 생성되고 필요없으면 삭제되야하지만 미리 오브젝트를 생성하고 오브젝트가 생성되야할때 풀에서 꺼내고 삭제되어야 할때 다시 풀로 반납하는 형태로

메모리 단편화를 방지한다

 

Spawn Emitter at Location 노드를 보면 Pooling Method가 있는데 이게 풀링기법의 사용 여부를 정한다.

Auto Release로 하면 재생완료 된 파티클들이 풀에 저장되고 다시 꺼내서 재생한다.

Manual Release로 하면 Release to Pool이라는 노드를 연결 시켜줘야 한다.