전략게시판

전략게시판 [스튜디오]
[루아스크립트] #5 SyncValue를 통해 ui.lua 에서 시각적 피드백 제공하기
2023.01.29 07:29 조회 : 2825
Lv. 494토게피 CosyClimbing 작성자 게시물 더보기
4편: https://csonline.nexon.com/Community/Strategy/View/6099?cp=1

API에 대한 설명의 비약이 꽤나 크고 알려주지 않은 문법들도 다수 나왔지만,
4편과 5편의 내용은 루아스크립트의 문법과 API의 내용보다는
이 글의 내용을 따라가면서 게임의 스크립트를 어떻게 구현하는지에 대한
전반적인 논리흐름이 어떻게 진행되는지에 집중해주세요.

가장 추천하는 방법은 그냥 무작정 이 글을 따라 만들어보면서 생기는 의문점을
해소하는 과정에서 스크립트의 이해도를 높이는 것입니다.

이번 편에서는 동기화 변수, Syncvalue를 이용하여
game과 ui간 정보를 주고받고, 주고받은 정보를 이용하여
UI를 통해 사용자에게 시각적인 피드백을 줄 수 있도록 해 봅시다.

#0 어떻게 만들고 싶은가?

좀비 관련 UI에서 보여주고 싶은 정보는 좀비 처치수, 좀비 체력 입니다.
업그레이드 관련 UI에서 보여주고 싶은 정보는 현재 코인 수,  강화비용 입니다.

따라서 필요한 동기화 변수는 좀비 킬카운트, 좀비 체력과 최대체력,
현재 코인 갯수, 무기강화 레벨, 신체강화 레벨입니다.
(전 편에서 무기 강화 비용을 레벨로 계산하게끔 만들어 놓은 이유이기도 합니다.)

#1 좀비 관련 UI 만들기


>>game.lua

UI를 보여주기 위한 동기화 변수를 만들어주고,
Game.Rule:OnRoundStartFinished () 이벤트 콜백에서 초기화 값을 설정해 줍니다.
게임이 시작되면 의도한 방향대로 변수가 바뀔 수 있도록 길을 잡아주는 역할을 할 것입니다.


그 다음, 각 변수들이 어떤 상황에서 값이 바뀌는지 파악하고,
알맞은 이벤트 콜백에 동기화 변수들을 동기화 해줍시다.

가령, 좀시의 체력을 담은 동기화변수인 zombieHealth
는 좀비가 타격을 받거나, 좀비가 죽고 다시 부활하면 그 값이 변동될 것입니다.

비슷하게 좀비의 최대 체력과 좀비 킬 카운트는
좀비가 죽고 강화되는 Game.Rule:OnTakeDamage 콜백에서 값이 변경되겠죠.


>> ui.lua

game.lua에서 만든 동기화 변수를 받을 수 있게끔 UI쪽 동기화 변수도 생성해줍시다.
사진에 보이는 초록색 문자열 부분이 같기만 한다면 서로 동기화가 될 것입니다.

좀비의 체력바와 좀비 처치 횟수를 보여줄 UI 박스와 텍스트 개체도 생성해줍시다.
여러가지 해상도를 지원하기 위해 UI.ScreenSize() 를 사용하여 화면 비율로 사용하는 것을 주목하세요.


잘 따라오셧다면, UI의 상태는 이렇습니다.


game.lua에서 값이 동기화가 되었을 때 이를 반응하는 이벤트 콜백을 써서
값이 바뀔 때마다 눈으로 확인 가능하게 만들어봅시다.

여기서는 체력이 줄어들 때 마다 빨간 바가 줄어드는 효과를 넣어주었습니다.
UI 효과보다는 UI.SyncValue:OnSync() 이벤트 콜백은
game.lua 쪽에서 해당하는 동기화 변수의 값을 바꾸면 호출된다는 점을 기억해주세요.


제대로 따라오셧다면, 좀비를 타격함에 따라 체력바가 감소하고,
좀비를 죽이면 좀비 넘버가 증가하는 것을 확인할 수 있습니다.
잘 작동하네요.


#2 업그레이드 관련 UI 만들기


>>game.lua

좀비 UI를 만들 때랑 비슷하게, 동기화 변수를 생성하고
Game.Rule:OnRoundStartFinished () 이벤트 콜백에서 초기화 값을 설정해 줍니다.


그 다음, 각 변수들이 어떤 상황에서 값이 바뀌는지 파악하고,
알맞은 이벤트 콜백에 동기화 변수들을 동기화 해줍시다.

코인 변수의 경우,
좀비를 타격/킬의 경우에도 변화하지만, 업그레이드를 실행하여도 변화할 것입니다.
업그레이드의 경우,
무기 업그레이드는 무기를 새로 줍거나 업그레이드를 하면 변화할 것이며,
신체 업그레이드는 업그레이드를 할 때만 변화할 것입니다.

알맞은 콜백을 찾아 동기화 값을 바꿔주는 스크립트를 넣어줍시다.


참고로, 무기를 새로 주울 때 호출되는 이벤트 콜백은
Game.Rule:OnGetWeapon (player, weaponid, weapon) 입니다.
무기를 강화하는 것이므로, 무기 레벨을 무기 객체에다가 집어넣었습니다.



>>ui.lua


좀비 UI 제작과 동일한 방향으로 제작합니다.
game.lua에서 만든 동기화 변수를 받을 수 있게끔 UI쪽 동기화 변수도 생성해줍시다.
또한 코인 상태와 업그레이드 가격을 보여줄 UI 텍스트 개체도 생성해줍니다.


UI는 눈으로 보기 쉽고 스크립트상으로 보기 어려움으로,
테스트를 해가며 마음에 들게 구성되엇는지 눈으로 직접 확인하는 것이 중요합니다.


훌륭하네요.
마지막으로 UI.SyncValue:OnSync() 콜백을 통해 변수 동기화에 UI가 반응하게끔 만들어줍시다.


자, 이로써 기능구현에 따라 만들어진 게임 진행도를
UI를 통해 실시간으로 확인이 가능해졌습니다.

간단한 게임이지만 꽤 짜임새 있게 구성되었네요.


제작된 스크립트는
스튜디오맵 '루아작업준' 에서 확인 및 복사가 가능합니다.






추천 : 3
댓글을 남기시려면 로그인 해주세요
댓글 : 5
  • 거듭 느끼지만 이 게임은 운영자가 하는게 없고 죄다 유저들이 일해야 함. 운영자들 걍 사퇴하고 이런분들이 대신 운영해야함 Lv. 657모바일에서 등록샤나 2023.06.15
  • 👍👍👍👍👍👍👍👍👍👍👍👍 Lv. 887모바일에서 등록전갈 2023.02.01
  • 이 글을 보고 타임머신을 개발하는데 성공했습니다. Lv. 127버니합 2023.01.30
  • 그는 신이야! Lv. 551아존느덥다 2023.01.29
  • 맵공개 및 스크립트 복사가 가능하고, API의 여러 부분을 복합적으로 사용했으니, 공부에 도움이 많이 될 것 같음...화이팅 Lv. 494토게피 2023.01.29