Skip to content

develop LevelUpUISystem

pianop edited this page Feb 19, 2023 · 17 revisions

레벨업 UI 시스템을 관리

image
레벨업 UI는 총 3개로 나뉜다.

  1. 소지한 장비와 장비의 레벨을 나타내는 ItemUI
  2. 현재 스탯을 보여주는 StatUI
  3. 뽑기 목록을 보여주는 PickUpUI
  • tempLevelUp은 아직 경험치에 의한 레벨업이 연결되지 않았기에 임시로 레벨업 시키는 버튼을 만들어 놓은 것입니다.

TODO: 아이템 이미지들을 연결할 필요가 있음(WeaponImages, AccessoryImages, EtcImages)
image
(Hierarchy의 LevelUpUI의 Inspector창)

목차

Summary

  1. ItemUI: 유저의 무기, 악세서리를 받아와서 현재 레벨과 함께 이미지로 출력
  2. StatUI: 유저의 Stat 데이터를 받아와서 텍스트로 출력
  3. PickUpUI: 뽑기 목록에 들어갈 장비 데이터들을 받아와서 유저가 선택할 수 있도록 버튼으로 출력
  4. 위의 레벨업 UI들 등장할 때 애니메이션 추가
  5. 일시정지

Start_UnloadLevelUpUI

image
image
image
레벨업 할 때만 보여야하는 UI이므로 비활성화 처리를 미리 해줍니다, 추가로 나중에 활성화 했을 때 모든 세부 UI들(위의 이미지의 레벨을 나타내는 이미지 참고)이 활성화되면 안 되므로 해당 세부 UI들도 추가로 비활성해 해줍니다.

  • image
  • image
  • Image들은 .enabled = false로, GameObject들은 .SetActive(false)로 비활성화 처리를 해주었습니다.

LoadLevelUpUI

image
LoadLevelUpUI: 레벨업 했을 경우 호출되는 함수로 캐릭터의 스탯, 랜덤 뽑기로 추출된 아이템들, 캐릭터 소지 장비들을 넘겨 받아서 UI에 표시한다.
뽑기 목록을 클래스 변수로 따로 저장하는 이유는(mPickUps 부분) 이후에 유저가 선택한 레벨업 보상을 적용할 때 사용하기 위해서이다. (ClickPickButton에서 설명)

SetPickUpUI

image
image 제목 없음
각 버튼마다 해당하는 뽑기로 나온 아이템을 배치해주는 함수이다. (pickUp의 각 Tuple은 <Item type, Item index, 0: new/ 1: old>를 의미한다. 해당 아이템의 이미지, 이름, 설명, New를 연결해준다.

  • image
  • getSprites: pickUp의 Type(item1)을 넣어주면 해당 타입의 이미지 배열을 반환해주는 함수
  • image
  • transPickIndexToEnumString: 장비 타입(무기, 악세, 기타)와 해당 타입의 index번호를 받아서 아이템의 이름을 반환해주는 함수이다. index 번호를 Enums의 해당 타입으로 캐스팅한 후 .ToString으로 해당하는 장비의 이름을 호출

SetStatUI

image
image
StatVarText에 character의 Stat값들을 한 줄씩 스트링 형식으로 저장해줍니다. (스탯 값이 0인 경우는 '-'로 예외처리)

SetItemUI

image
image
(SetAccessoryUI도 위의 Weapon과 동일)
해당 장비의 이미지를 연결한 후 현재 레벨까지 MiniLevelImage[1]을, 아직 채우지 못한 레벨은 MaxLevel까지 Mini...[0]으로 연결해준다.
image
위처럼 Unity Inspector 창에서 2차원 이상의 배열을 표시하기 위해서는 아래 사진에서 처럼 클래스 외부에 1차원으로 사용할 배열 타입을 새로운 class로 선언해주고 내부에서 해당 타입을 사용해 배열을 선언해주면 된다. 외부에 새로운 타입 선언 시에 [System.Serializable]을 붙여주어야 한다.
image

ClickPickButton

image
각 PickUp 버튼마다 index가 할당되어있음(버튼마다 index를 변수로 갖는 스크립트를 연결해놓음, PickButton.cs), 해당 index는 mPickUps에 들어있는 아이템의 index와 동일하므로 버튼의 index를 mPickUps에 넣어주면 선택된 아이템을 선별할 수 있게된다.
클릭된 버튼의 index는 EventSystem.current.currentSelectedGameObject를 통해 가장 최근에 클릭된 오브젝트를 가져오는 방식으로 가져와준다.
이후 장비 획득에 따른 뽑기 테이블 갱신을 진행해준 후 일시정지한 게임을 재개해준다.

GamePause_Resume

image
GameManager.cs에 작성한 함수, timeScale을 0, 1로 변경해줌에 따라 일반적인 시간 관련 변수가 들어간 update들을 모두 업데이트 해줄 수 있다. 관련 자료는 아래의 reference의 링크를 참조

UIEffect

LevelUpUI 등장 시 연출
image
IsOnLevelUp은 레벨업 UI가 나와있는 경우에만 true인 변수
mRotSpeed는 PickUpUI 등장시 회전하는 속도
mTime은 PickUpUI, StatUI, ItemUI 등장시 Scale 조정에 사용하는 변수 (0 부터 1까지 선형 증가함) image
PickUpUI는 회전과 크기 조정을 동시에하고 남은 두 UI는 크기조정만 해준다.
Time.deltaTime 대신 Time.unscaledDeltaTime를 사용한 이유는 현재 UI가 나오며 일시정지(TimeScale=0)인 상태이기에 해당 TimeScale에 영향을 받지 않는 변수를 사용해줌(자세한 내용은 reference 참조)
mTime이 1이 되었다는 건 UI들이 제자리를 찾아갔다는 뜻이므로 해당 함수가 호출이 되지 않도록 if문에 mTime < 0.99f를 추가해주었다.
추가로 PickUpUI도 mTime이 1이 될 때 rotation이 (0, 0, 0)이 될 수 있도록 마지막에 if문을 넣어주었다.

reference

Unity GamePause

Clone this wiki locally