※ 저번에 Get Hit Result Under Cursor for Objects 함수를 사용하여 Teleport의 Decal을 이동시켰었는데, 이러한 기능은
보통 탑 다운 뷰 게임에서 많이 사용한다고 한다.
텔레포트 구현하기
BP_Skill 클래스에서 자식 클래스에서 오버라이드하여 사용할 커스텀 이벤트들을 생성해줬다.
BeginActionA / EndActionA / BeginActionB / EndActionB
이후 BP_Skill을 상속하고 있는 BP_Teleport에서 아까 만든 BeginActionA와 EndActionA 이벤트를 생성해준다.
- BeginActionA : 스킬 활성화 후, 클릭했을 때 일어날 부분
- EndActionA : 클릭 후, 실제 스킬 기능이 수행될 부분
스킬 활성화 후, 클릭한 시점에 Decal의 위치를 어딘가에 캐싱해두고(BeginActionA),
스킬 캐스팅 애니메이션이 끝났을 때 이동시킬 것이다(EndActionA).
나중을 대비하여 각각 이벤트의 부모 함수로의 호출 추가를 붙혀놓았다.
BeginActionA 이벤트에서 GetDestinationData 함수를 통해 Decal의 위치를 캐싱해둔다.
그리고 해당 Result의 값으로 EndActionA에서 True일때만 SetActorLocation을 통해 이동시키게 된다.
그런데 여기서 이동 시 캐릭터의 중점을(CapsuleCollision의 중점) 옮기는데 벽에 끼이게되는 문제가 발생할 수 있다.
따라서 GetDestinationData 함수에서 Normal을 받아와서 캐릭터를 Normal 방향으로 살짝 떨어진 곳에 이동하도록
해줄 것이다.
Normal값에 * 150.0f 한 값을 Location과 합쳐서 넘겨주게된다.
이로인해 캐릭터는 Location에 Normal * 150.0f 한 위치만큼 떨어진 곳으로 이동하게 된다.
이제 스킬 활성화 후, 공격 키 입력 시 Skill이 발동되도록 BP_Character의 BeginActionA 이벤트 부분을 수정해주었다.
IsSkillActivated 함수를 이용해 True일 때에는 스킬 발동, False일 때에는 무기 공격이 나가도록 분기를 나누었다.
만약 IsSkillActivated가 True라면 State를 Acting으로 바꿔주고, 현재 SkillNow의 BeginActionA를 부른다.
이어서 SkillNow의 GetMontageData를 받아온다. (저번에 Wizard Spell 몽타주로 설정해놨음)
이제 받아온 몽타주를 재생시켜주고, OnBlendOut(끝나갈 때 쯤) 다시 State를 Idle로 바꿔준다.
그리고 만들어둔 Wizard_Spell 몽타주에서 Montage Notify를 추가함으로써 Notify 호출 시 SkillNow의 EndActionA가 호출되도록 만들어 두었다. (Wizard 몽타주 슬롯이 FullBody로 되어있는지 확인해줄 것)
무기 공격 시 이팩트(Trail / Effect)
무기 공격 시 효과를 주기 위해 BP_Weapon에서 ParticleSystem 컴포넌트를 추가해서 Trail / Effect 두 개를 만들었다.
※ Particle : 매우 작은 여러 개의 면들을 이용하여 표현함.
만든 Trail 컴포넌트에서 BeginTrails를 만든다.
- 타깃 : Trail
- In First Socket Name : 우클릭 - 변수로 승격하여 SocketOnTrailStarted 변수 만듬
- In Second Socket Name : 우클릭 - 변수로 승격하여 SocketOnTrailEnded 변수 만듬
- InWidth : 1.0
Effect 컴포넌트도 가져다가 Activate로 활성화 시켜준다.
'언리얼엔진' 카테고리의 다른 글
35. FireStorm 스킬 / 삼각함수를 이용한 회전 / RotateVectorAroundAxis (0) | 2023.06.22 |
---|---|
34. Sword Trail / Teleport Effect / Camera Lag (0) | 2023.06.22 |
32. 캐릭터 스킬 로직 / 텔레포트 / 스킬 애니메이션 (0) | 2023.06.20 |
31. Dodging, 원거리 무기 충돌 수정 / 스킬 구현 (0) | 2023.06.18 |
30. MatLayerBlend_Emissive / Delay 종류 / Time Dilation (0) | 2023.06.15 |