안녕하세요 '언리얼로 만들어보는 RPG'의 필자입니다. 저번 글 마지막 부분에서 Drag&Drop이 잘 되는 것과 함께 스킬 사용을 확인했었습니다. 이번 글에서는 FSkillData::Use함수를 사용했을 때의 코드와 애니메이션 처리를 좀 하겠습니다. 그리고 여유가 좀 된다면 스킬의 이펙트와 사운드 처리를 위한 Actor 또한 만들어서 이용해 보겠습니다.
그러면 시작하기전에 앞으로 어떤 식으로 작업할지에 대해서 간략하게 구상을 하도록 하겠습니다. 필자는 스킬 애니메이션을 (*)AnimationMontage(이하 몽타쥬)로 사용해서 코드로 관리하려 합니다.
주로 코드를 통해서나 '블루프린트 비쥬얼 스크립트'안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있습니다.
출처 : http://api.unrealengine.com/KOR/Engine/Animation/AnimMontage/index.html
이를 위해서 우선 AnimInstance를 상속받아서 필자 입맛대로 작성을 좀 해야합니다.
AnimSwordMan.h
필자는 스킬을 사용하면 해당 데이터를 상속받아 만든 AnimSwordMan에 SkillData포인터 형으로 들고 있게 해주어서 스킬을 사용했는지 검증하는 과정을 거칠 것입니다. 그리고 Player로 부터 받아올 데이터가 있을 수 있기때문에 마찬가지로 포인터를 만들어 둡니다.
AnimSowrdMan.cpp
위 코드에서 눈여겨 보아야 할 부분은 빨간색 박스로 테두리를 감싼 부분입니다. NotifyQueue는 실행중인 몽타쥬에서 감지된 Notify들을 담아두는 배열입니다. 저희는 해당 배열에서 Notify들의 이름을 검사하여 원하는 동작을 수행할 것입니다. 필자의 경우 Action이라는 이름을 가진 Notify를 이용할 예정입니다.
AnimSwordMan.cpp
필자는 이런식으로 Action이라는 이름을 가진 Notify가 감지될 경우 위 함수를 호출하여 들고있던 현재 사용한 SkillData로부터 Type을 확인하여 무언가 작업을 하려 합니다. 지금은 딱히 할게 없으니까 비워두었습니다.
PlayerBase.h
PlayerBase.cpp
AnimP(애니메이션 BP)
여기까지 작업을 하셨다면 몽타쥬에서 발생하는 Notify를 감지할 수 있는 준비가 끝났습니다. 이제 다음으로는 스킬 Actor를 만들어 보고 SkillData에 해당 Actor형을 받아서 사용시 스폰시켜줄 수 있도록 준비해보겠습니다.
SkillBase.h
SkillBase클래스는 스킬이 사용될때 원하는 타이밍에 맞춰서 스폰시킬 액터입니다. 지금은 이펙트와 사운드 두가지만 필요합니다. 그외에 AutoKill라는 불변수와 LifeTime 변수를 이용해서 일정 시간이 지나면 사라지게 만들것 입니다.
SkillBase.cpp
SkillBase.cpp
InGameData.h(SkillData)
TestSkill(블루프린트)
BpP(블루프린트)
이제 SkillData::Ues를 작성하면 완벽합니다.
InGameData.cpp(SkillData)
이제 정말로 준비는 끝입니다. 스킬을 사용하면 상속받아 만든 AnimationInstance의 PlaySome함수로 스킬 정보를 보내고 확인을 위해서 즉각적으로 해당 스킬액터를 생성해 줍니다.
이로써 스킬에 대한부분도 끝이났습니다. 아마 다음으로는 드디어 UI로부터 탈출하여 적을 만들고 AI를 구성할거 같습니다. 기다려주신 모든분들에게 감사의 말씀을 남기며 이만 물러가겠습니다.
'프로그래밍 > 언리얼' 카테고리의 다른 글
언리얼로 만들어보는 RPG - AI(2) (0) | 2020.08.28 |
---|---|
언리얼로 만들어보는 RPG - AI(1) (0) | 2020.07.05 |
언리얼로 만들어보는 RPG - 스킬창 구현(2) (0) | 2019.04.04 |
언리얼로 만들어보는 RPG - 스킬창 구현(1) (0) | 2019.03.27 |
언리얼로 만들어보는 RPG - 장비창 구현(2) (0) | 2019.03.07 |