
먼저 UI 프리셋 중 대화창 UI를 개조하여 레벨업 UI를 만들었다.
--@ BeginProperty
--@ SyncDirection=None
table skillInfo = "{}"
--@ EndProperty
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void OnBeginPlay()
{
self:SetSkillInfo()
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void SetSkillInfo()
{
--임의의 값, 수정 필요
self.skillInfo = {}
self.skillInfo[1] = {img = "54d4ea4403c743f58ebf1249b686ef5b", name = "문라이트 슬래시",
script = "원을 그리며 전후방의 적들을 벤다.\n강화시 쿨타임이 감소하고 데미지가 증가한다."}
self.skillInfo[2] = {img = "8d112a3096834b51a4a590d937d21133", name = "블레이드 토네이도",
script = "검붉은 태풍을 생성하여 전방을 초토화시킨다.\n강화시 쿨타임이 감소하고 데미지가 증가한다."}
self.skillInfo[3] = {img = "421f87aef8f04a7c9fefd861cc24c5b8", name = "소울 시커",
script = "영혼을 추적하는 힘의 정수를 날린다.\n강화시 쿨타임이 감소하고 데미지가 증가한다."}
self.skillInfo[4] = {img = "be38b7bde7634491a5eec7c3bf4a5ac6", name = "캐논 바주카",
script = "화약이 압축된 포탄을 탑재한 대포를 발사한다.\n강화시 데미지가 증가한다."}
self.skillInfo[5] = {img = "2a5995a2c84f40968bae7ddb19f60d55", name = "스톰",
script = "에테르 소드를 몸 주위에서 폭풍과 같이 움직이게 한다.\n강화시 데미지가 증가한다."}
}
--@ EndMethod
그리고 스킬의 정보를 저장하기 위해 SkillManager 엔티티와 컴포넌트를 만들었다.

--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void OnBeginPlay()
{
self:SetTable()
self:ConnectEvents()
self:LevelUp()
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void SetTable()
{
for i = 1, 3 do
self.imgs[i] = self.imgParent.Children[i]
self.names[i] = self.nameParent.Children[i]
self.scripts[i] = self.scriptParent.Children[i]
end
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void ConnectEvents()
{
self._T.handlers = {}
for i = 1, 3 do
self._T.handlers[i] = self.imgs[i]:ConnectEvent(ButtonClickEvent, function() self:UpgradeSkill(self.skills[i]) end)
end
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void LevelUp()
{
self.skills = self:GetRandomSkills()
self:UpdateUI()
self.Entity.Visible = true
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
table GetRandomSkills()
{
math.randomseed(os.time())
local randTable = {}
for i = 1, #self.skillManager.skillInfo do
randTable[i] = i
end
local randSkills = {}
for i = 1, 3 do
local r = math.random(#randTable)
randSkills[i] = randTable[r]
table.remove(randTable, r)
end
return randSkills
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void UpdateUI(number skillIdx)
{
for i = 1, 3 do
local skill = self.skillManager.skillInfo[self.skills[i]]
self.imgs[i].SpriteGUIRendererComponent.ImageRUID = skill.img
local name = skill.name.."\n(LV 0 → 1)"
self.names[i].TextComponent.Text = name
local script = "\n"..skill.script
self.scripts[i].TextComponent.Text = script
end
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void UpgradeSkill(number skillIdx)
{
self.Entity.Visible = false
log("upgrade"..skillIdx)
}
--@ EndMethod
--@ BeginMethod
--@ MethodExecSpace=ClientOnly
void OnEndPlay()
{
for i = 1, 3 do
self.imgs[i]:DisconnectEvent(ButtonClickEvent, self._T.handlers[i])
end
}
--@ EndMethod
UILevelUp 컴포넌트도 만들었다.
LevelUp() 함수가 호출될 때 SkillManager에서 스킬 정보를 불러와 그 중 3개의 스킬을 UI에 표시한다.

각 스킬 이미지에 ButtonComponent를 추가하면 잘 작동하는 것을 확인할 수 있다.
'Game > MSW' 카테고리의 다른 글
메이플스토리 월드로 게임 만들기 - 6 (0) | 2022.10.27 |
---|---|
메이플스토리 월드로 게임 만들기 - 5 (0) | 2022.10.26 |
메이플스토리 월드로 게임 만들기 - 3 (4) | 2022.10.22 |
메이플스토리 월드로 게임 만들기 - 2 (0) | 2022.10.22 |
메이플스토리 월드로 게임 만들기 - 1 (0) | 2022.10.20 |