본문 바로가기

언리얼엔진

32. 캐릭터 스킬 로직 / 텔레포트 / 스킬 애니메이션

캐릭터 스킬 로직 만들기

BP_Character의 BeginPlay이벤트

BeginPlay이벤트에서 플레이 시 만들어둔 SkillClasses와 Skills에 사용할 스킬들을 생성해두었다.

Weapon 생성 시와 매우 비슷하다.


BP_Character의 Skill 이벤트

각각의 스킬에 인티저 Value를 설정하여 Local Variable에 담고 Skills 배열에 담아놓은 스킬 중 Value에 해당하는 스킬을 꺼내온다.

캐릭터의 상태가 Idle일 때에만 스킬 사용이 되도록 IsState로 검사를 추가해줬다.


이어서 IsSkillActivated 함수를 추가하여 사용하였는데, BP_CharacterInterface에서 생성하고 출력핀 bResult(Boolean)만

만들어 두었다.

만약 스킬을 장착하지 않았다면 False로 빠져서 선택한 스킬을 SkillNow 변수에 넣어주게되고,

스킬을 장착한 상태라면 먼저 SkillNow에 있는 스킬을 Deactivate하고 SkillNow를 비워주었다.

그리고 만약 선택한 스킬과 현재 SkillNow의 스킬이 다르다면 비활성화와 동시에 다음 스킬을 바로 활성화시켜줄 것이다.


IsSkillActivated 함수 내부

해당 함수 내부에서 SkillNow에 현재 활성화된 스킬이 있는지 확인하는 여부를 수행해줄 것이다.


OrientRotationToMovement를 통해서 스킬 활성화 시 카메라가 컨트롤러 방향을 바라보도록 설정해주었고,

IsArmed를 통해 현재 무기를 장착한 상태에서 스킬을 활성화 시 SetActorHiddenInGame을 통해서 무기를 잠시 감추었다.

 

※ Visible과 Hidden In Game의 차이

- Visible : 뷰포트 내에서도 아예 보이지 않음

- Hidden In Game : 뷰포트 내에서는 보이지만 플레이 시 보이지 않음


텔레포트 스킬 구현

BP_Teleport 이벤트그래프

만약 텔레포트 스킬이 활성화되면 매 Tick마다 텔레포트 위치 이펙트가 마우스 방향에 맞춰 이동해야하기 때문에 Tick 이벤트를 사용했다.

 

만약 스킬의 Activated 변수가 True라면 만들어 뒀던 Get Destination Data 함수를 통해서 현재 커서와 오브젝트 사이의 충돌 값들을 받아오게 된다.


SetWorldLocationAndRotation

Get Destination Data에서 받아온 결과값으로 Set World Location And Rotation 함수에서 Decal의 월드 위치와 회전값을

설정해준다.

 

- 타깃 : Decal 연결

- New Location : Get Destination Data의 Location 연결

- New Rotation : Get Destination Data의 Normal값을 Y와 Z를 제외한 X축만 기준으로 Rotater를 생성하여 연결

* 현재 커서와 충돌한 벽과 Decal의 X축이 일치해야되기 때문이다.

 

Set Visibility를 통해서 스킬의 활성화 비활성화에 맞춰 Decal의 Visibility를 켰다 꺼줄 것이다.

- Propagate to Children : 자식들에게 이 내용을 전하는 여부(자식 컴포넌트들에게도 영향을 미친다)


마지막으로 BP_Teleport 스킬의 Deactivate 호출 시, Decal의 Visibility를 꺼주면 된다.


스킬 애니메이션 구현

먼저 Wizard폴더 안의 Spell과 Attack 애니메이션을 몽타주로 생성해줬다.

그리고 블랜드 스페이스(BS_Wizard)를 추가하여 시점 고정 시, 캐릭터의 8방향 이동을 구현해줄 것이다.

 

BS_Wizard의 축 설정

Sword 장착 시 idle 애니메이션 만들 때와 같다고 보면 된다.

- 가로 축(Direction) : -180 ~ 180 / 4

- 세로 축(Speed) : 0 ~ 600 / 2

 

BS_Wizard 내부 축에 추가한 애니메이션

이렇게 방향과 속도에 따라서 각각 애니메이션들을 넣어주면 된다.


마지막으로 BP_Skill 클래스의 Get Montage Data 함수에서 반환 노드에 각각 설정해주었다.

- Montage : Wizard Spell Montage

- PlayRate : 1.0