[unrealengine4]

2023-06-23 언리얼 (다단히트 ,Set Timer by Event, 스킬 생성 시작지점 설정)

롤링페이퍼 2023. 6. 27. 01:30
BP_FireStorm에 다단히트 추가하기

 

BP_FireStorm에 다단히트 로직을 추가하기 위한 변수를 추가해 준다.

 

- Damage Tick : 어느 정도 간격으로 대미지를 입힐지 결정하는 변수 / 기본값 0.125
- DamagePerTick : 틱당 입힐 데미지 변수 / 기본값 : 5.0
- Duration : 스킬 지속시간을 결정하는 변수 / 기본값 : 4.0
- OverlappedActors( Actor 오브젝트 클래스 배열) : 대상이 Overlap 되었을 때, 들어온 모든 대상들을 담을 배열

BP_FireStorm의 변수

 

데미지를 주기 위해서 ActorBeginOverlap / ActorEndOverlap에서는 Overlap 충돌로 받아온 Other Actor들을 OverlappedActors에 ADD / REMOVE 해준다.

BP_FireStorm의 이벤트 그래프

파티클 storm의 Activation의 Auto Activate를 꺼둔다.

이후 BP_Character에서 Spell 몽타주의 Notify가 호출되면서 EndActionA 이벤트를 부르게 될 것이고,

EndActionA이 불러진 난 후 BP_FireStorm에서 꺼둔 Auto Activate와 Generate Overlap이 활성화되게 한다.

BP_FireStorm의 이벤트 그래프

이후 불기둥이 생긴 시점에서 대미지를 주어지록 하게 될 텐데 Overlap만큼 overlappedActors에 저장하게 될 것이며 for Each loop로 반복할 것이다.

그다음 Apply Damage로 대미지를 줄 것이며 DagamePerTick의 기본값만큼 데미지를 줄 것이다.


Set Timer by Event

Set Timer by Event

- Event : 특정 이벤트를 연결해 주는 핀(DamageEvent)

- Time : 타이머 간격(DamageTick)

- Looping : 계속 반복될 것인지(True)

 

 

Set Timer by Event을 사용한 예시

EndActionA 이벤트가 호출되면 불기둥과 충동이 활성화되면서(Auto Activate, Generate Overlap) DamageEvent를 Set Timer by Event에 있는 DamageTick간격만큼 실행하게 된다. Looping을 체크하면 계속 반복하게 될 수 있다.


이제 BP_FireStorm이 변수 Duration값이 지나면 사라질 수 있도록 해보자.

 

위를 위해 OnTimeOver 함수를 생성해 둔다.

OnTimeOver함수는 FireStorm을 Deactivate 하고 overlapEvents도 꺼주면서 OverlappedActors안에 쌓여있는 값들도 clear로 초기화시켜줄 것이다.

이후 Event로 생성을 생성하고 OnTimeOver로 지정하도록 한다.

이벤트 생성은 Void로 취급한다.

BP_FireStorm의 이벤트 그래프

- 시그너처 : (입력) [출력]을 뜻함

- 함수 선택 : 필요한 함수 선택(OnTimeOver)

 

* 선택해 놓은 함수 이름 변경 후 컴파일 시, 이벤트 생성의 선택한 함수의 이름도 자동으로 바뀐다


생성 시작지점 지정

 

이후 불기둥 생성되는 시작지점을 캐릭터 바라보는 앞에서 시작할 수 있도록 getInstigator의 값을 가져와 GetActorRotation의 z를 추출해 angle에 넣어주면 된다.