본문 바로가기

언리얼엔진

34. Sword Trail / Teleport Effect / Camera Lag

무기 Trail 구현

BP_Weapon를 상속한 BP_Sword에서 SocketOnTrailStarted / SocketOnTrailEnded 두 개의 변수에 각각 Sword의

SkeletalMesh 중 start / end 소켓을 지정해줬다.

BP_Sword의 디폴트 값


그리고 Trail 컴포넌트의 Particle Template에 사용하고자할 파티클을 선택했다.

BP_Sword / Trail Component

 

마찬가지로 Effect 컴포넌트의 Particle에도 원하는 파티클을 선택해준다.

그리고 해당 컴포넌트의 스케일을 통해 이펙트의 크기를 조절해줄 수 있다. (Effect 스케일 : 0.5)

BP_Sword / Effect Component

 

 Particle 컴포넌트의 Attachment의 Auto Manage Attachment를 활성화하고 소켓 이름 자동 어태치에 원하는 소켓 입력 시,

해당 파티클이 지정한 소켓에서 나오게할 수 있다. (Effect - Attachment)

BP_Sword / Effect Component / Attachment


Begin Trails

BP_Weapon의 Activate Attack 함수

- In First Socket Name : Trail의 시작지점이 될 첫 소켓의 이름

- In Second Socket Name : Trail의 끝지점이 될 두번째 소켓의 이름

- In Width Mode : Trail의 너비가 어떻게 적용될지 여부

  ㄴ From Centre : 센터

  ㄴ From First Socket : 지정한 첫번째 소켓

  ㄴ From Second Socket : 지정한 두번째 소켓

- In Width : 너비에 대한 비율(%)


Activate

BP_Weapon의 Activate Attack 함수

- Reset : 다시 해당 함수의 기능 호출 시, Reset 여부


Teleport 스킬 이펙트 구현

BP_Teleport 이벤트그래프에서 EndAction A 이벤트 호출 후, SetActorLocation으로 순간이동 후,

Spawn Emitter Attached 함수를 추가하여 이펙트를 표현할 것이다.


Spawn Emitter Attached

BP_Teleport의 이벤트그래프

지정한 컴포넌트에 따라 Emitter Template로 지정된 이펙트를 재생시켜주는 함수이다.

- Emitter Template : 본인이 지정한 파티클

- Attach to Component : Scene Component 오브젝트 레퍼런스

- Attach Point Name : 원하는 소켓에서 파티클을 붙혀서 표현할 수 있음

- Auto Destroy : 재생 끝나면 Emitter 삭제 여부

- Auto Activate : 생성 시 컴포넌트 활성화 여부


이후 BP_Character의 BeginPlay이벤트에서 스킬 생성과 동시에 캐릭터에 붙혀주어야 Teleport 이펙트가 캐릭터 위치에서

나타날 수 있다.

따라서 Skill 생성 후, AttachActorToMesh를 통해 스킬의 기본 위치를 지정해주었다.

 

* SocketName을 따로 지정해주지 않으면 기본으로 대상의 Root 본에 붙는다.

BP_Character의 이벤트그래프


Teleport 이후의 카메라 무빙 수정

Camera가 조금의 딜레이를 두고 Character를 추적하는 효과를 표현하고자 한다.

BP_Player의 SpringArm에 있는 Enable Camera Lag를 활성화해주면 된다.

 

- Enable Camera Lag : 카메라 무빙에 조금의 딜레이를 거는 것과 비슷하다.

- Camera Lag Speed : 설정에 따라서 무빙 딜레이가 달라진다. (한 프레임마다 따라붙을 퍼센트)

- Camera Lag Max Distance : Speed를 너무 낮춰 카메라의 추적이 느려질 경우를 대비하여, 카메라와 캐릭터 사이의

                                                거리에 최대값을 고정하는 것

BP_Player의 SpringArm 디테일


Wizard 블렌드 스페이스(BS_Wizard) 적용시키기

ABP_Character에서 매 초마다 계속 스킬의 활성화 여부를 검사하기엔 비효율적이므로, BP_CharacterAnimationInterface에서 함수 SetSkillActivated를 하나 추가해주었다. (함수 입력에 bSkillActivated(Boolean) 추가)

그리고 ABP_Character 이벤트그래프에 SetSkillActivated 이벤트를 추가한 후, SkillActivated를 변수로 승격하여 

만들어진 bSkillActivated 변수에 값을 저장한다.

BP_CharacterAnimationInterface에 함수 추가 / ABP_Character에 함수 이벤트 구현


BP_Character의 Skill 로직 부분에서 SkillNow를 결정해줌과 동시에 Mesh - Get Anim Instance - Set Skill Activated를

호출시켜준다. 여기서 받아오는 Boolean 값은 입력한 Skills와 SkillNow가 일치하는지의 결과값을 받아오게 된다.

BP_Character의 이벤트그래프 - Skill 구현 로직


이제 ABP_Character의 AnimGraph에서 bool로 포즈 블렌딩을 사용한다.

bSkillActivated 변수 값을 Activate Value로 가져와서, True 포즈라면 BS_Wizard를, Flase 포즈라면 기존 블렌드 포즈가

나오도록 설정하였다. (True / False 블렌드 시간 : 0.25)

ABP_Character의 AnimGraph