안녕하세요 '언리얼로 만들어보는 RPG'의 필자입니다. 저번글에 이어서 오늘은 스킬창 UI를 마무리 하고 퀵슬록에 등록해서 사용하기 위해 Drag&Drop 작업을 할 예정입니다.

 

SkillTree.h

<SkillTree 헤더>

SkillTree에서는 크게 해줄일은 없고 SkillSlot을 담아주기만 하면 됩니다. 현재 플레이어에게 스킬포인트가 얼마나 남았는지 보여주는것 정도만 해주면 SkillTree는 자신의 할일을 다 했다 보시면 됩니다. SkillPointChanged함수는 스킬을 투자하고나서 갱신해주는 용도의 함수입니다. 이걸 각 버튼에 delegate로 연결시킬 예정입니다.

 

SkillTree.cpp

<초기화함수와 SkillPoint갱신함수>

초기화에서는 다른 UI들과 마찬가지로 Player포인터를 대입해주고 해당 UI의 Init함수를 불러줍니다. 그리고 아까 언급한것처럼 SkillSlot이 가지고있는 버튼 두개에 delegate로 SkillPointChanged함수를 연결해줍니다. 해당함수는 버튼이 작동할때마다 UI상에서 남은 SkillPoint를 갱신해서 보여줄 것입니다.

 

보시면 뭔가 이상한점을 하나 느끼실 수 있는데 SkillPoint라는 변수를 선언한 기억이 없으실 겁니다. 네 필자가 실수를한 것 같군요. int형으로 SkillPoint라는 변수를 하나 만들어 주시면 됩니다.

 

SkillTree(UMG에디터)

<SkillTree UI의 최종적인 모습>

GameUI.h

<SkillTree변수를 BindWidget 메타태그를 지정해서 선언해준다>

GameUI.cpp

<여타 다른 UI들 처럼 Player포인터를 대입시키고 Init함수를 호출한다>

이정도면 UI는 준비가 다 됐습니다. 이제 Drag&Drop 처리를 해보러 가도록 하지요.

 

SlotDrag.cpp

<Drop함수>

Drop당시 Drag를 시작한 슬롯의 타입이 Skill이거나 Q_Skill인 경우에 대한부분을 추가해줍니다.

 

SlotDrag.cpp

<SetQuickSLot함수>

불필요한 중복코드가 좀 있는 것 같기는 하지만 정상적으로 작동하니 우선은 냅둡니다. 일단 돌아가게 만들면 나중에 수정해서 해결하면 되는것이니까요!

 

SlotDrag.cpp

<SwapQuickSlot함수>

이번글을 작성하면서 불필요했던 중복코드를 좀 정리하게 되었습니다. 역시 작업한걸 다시한번 보고 천천히 정리하면 해결할 방법을 찾게되는거 같습니다. 여기도 마찬가지로 슬롯의 Type이 Q_Skill인경우에 대한것만 추가해주면 별로 달라질것은 없습니다.

 

<잘 작동하는 QuickSlot과 Skill>

 

저번글로부터 텀이 꽤 길었던것 같은데 요즘따라 개인적인 일이 생겨서 집중할 시간이 부족하다보니 생기는 문제인것 같습니다. 너그럽게 이해해주시면 감사드리고 다음글을 마지막으로 Skill은 마무리가 될것 같습니다. 이번글은 여기까지 마무리하고 다음글에서 다시 찾아뵙겠습니다.

Posted by 별수집가
,