안녕하세요 '언리얼로 만들어보는 RPG'의 필자입니다. 저번 글 마지막 부분에서 Drag&Drop이 잘 되는 것과 함께 스킬 사용을 확인했었습니다. 이번 글에서는 FSkillData::Use함수를 사용했을 때의 코드와 애니메이션 처리를 좀 하겠습니다. 그리고 여유가 좀 된다면 스킬의 이펙트와 사운드 처리를 위한 Actor 또한 만들어서 이용해 보겠습니다.

 

그러면 시작하기전에 앞으로 어떤 식으로 작업할지에 대해서 간략하게 구상을 하도록 하겠습니다. 필자는 스킬 애니메이션을 (*)AnimationMontage(이하 몽타쥬)로 사용해서 코드로 관리하려 합니다.

...더보기

주로 코드를 통해서나 '블루프린트 비쥬얼 스크립트'안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있습니다.

출처 : http://api.unrealengine.com/KOR/Engine/Animation/AnimMontage/index.html

이를 위해서 우선 AnimInstance를 상속받아서 필자 입맛대로 작성을 좀 해야합니다.

 

AnimSwordMan.h

<AnimSwordMan 헤더>

필자는 스킬을 사용하면 해당 데이터를 상속받아 만든 AnimSwordMan에 SkillData포인터 형으로 들고 있게 해주어서 스킬을 사용했는지 검증하는 과정을 거칠 것입니다. 그리고 Player로 부터 받아올 데이터가 있을 수 있기때문에 마찬가지로 포인터를 만들어 둡니다.

 

AnimSowrdMan.cpp

<생성자와 스킬사용, 노티파이 감지 함수>

위 코드에서 눈여겨 보아야 할 부분은 빨간색 박스로 테두리를 감싼 부분입니다. NotifyQueue는 실행중인 몽타쥬에서 감지된 Notify들을 담아두는 배열입니다. 저희는 해당 배열에서 Notify들의 이름을 검사하여 원하는 동작을 수행할 것입니다. 필자의 경우 Action이라는 이름을 가진 Notify를 이용할 예정입니다.

 

AnimSwordMan.cpp

<Action Notify를 감지할시 작동하는 함수>

필자는 이런식으로 Action이라는 이름을 가진 Notify가 감지될 경우 위 함수를 호출하여 들고있던 현재 사용한 SkillData로부터 Type을 확인하여 무언가 작업을 하려 합니다. 지금은 딱히 할게 없으니까 비워두었습니다.

 

PlayerBase.h

<PlayerBase에 AnimSowrdMan 포인터를 준비해둔다>

PlayerBase.cpp

<형변환을 통해서 AnimSowrdMan포인터에 대입한다>

AnimP(애니메이션 BP)

<원래 사용하고 있던 애니메이션 BP의 부모 클래스를 변경해준다>

여기까지 작업을 하셨다면 몽타쥬에서 발생하는 Notify를 감지할 수 있는 준비가 끝났습니다. 이제 다음으로는 스킬 Actor를 만들어 보고 SkillData에 해당 Actor형을 받아서 사용시 스폰시켜줄 수 있도록 준비해보겠습니다.

 

SkillBase.h

<스킬 사용시 나타날 이펙트, 사운드를 담당할 클래스>

SkillBase클래스는 스킬이 사용될때 원하는 타이밍에 맞춰서 스폰시킬 액터입니다. 지금은 이펙트와 사운드 두가지만 필요합니다. 그외에 AutoKill라는 불변수와 LifeTime 변수를 이용해서 일정 시간이 지나면 사라지게 만들것 입니다.

 

SkillBase.cpp

<생성자에서 필요한 컴포넌트를 만들어 준다>

SkillBase.cpp

<스폰되는 순간 LifeTime을 확인하여 자동적으로 지우는것을 결정한다>

InGameData.h(SkillData)

<SkillData에서 스폰시킬 Actor를 들고 있게 준비해준다>

TestSkill(블루프린트)

<기본 지원해주는 폭발 이펙트와 사운드를 적용했다>

BpP(블루프린트)

<방금 만든 TestSkill액터를 넣어주자>

이제 SkillData::Ues를 작성하면 완벽합니다.

 

InGameData.cpp(SkillData)

<스킬이 사용되는순간 바로 스폰시켜주자>

이제 정말로 준비는 끝입니다. 스킬을 사용하면 상속받아 만든 AnimationInstance의 PlaySome함수로 스킬 정보를 보내고 확인을 위해서 즉각적으로 해당 스킬액터를 생성해 줍니다.

 

<정상적으로 작동하여 액터를 스폰시킨다>

이로써 스킬에 대한부분도 끝이났습니다. 아마 다음으로는 드디어 UI로부터 탈출하여 적을 만들고 AI를 구성할거 같습니다. 기다려주신 모든분들에게 감사의 말씀을 남기며 이만 물러가겠습니다.

Posted by 별수집가
,