본문 바로가기
카테고리 없음

[TRW] 인벤토리 UI 작업 끝내기

by mazayong 2024. 7. 22.

 

 

0. 인벤토리 UI 기능 및 역할

1. 이전까지 작업한 내역

2. 오늘 작업한 내역

3. 고민되었던 부분

 

 

 

 

 

 

 

 

0. 인벤토리 UI 기능 및 역할

전체적인 기능은 다음과 같다.

= 플레이어가 소지한 아이템을 보여줌.

= 아이템이 포함된 슬롯을 클릭한 경우, 아이템 슬롯이 클릭된 표시가 뜨면서 해당 아이템에 대한 표시가 출력된다.

= 해당 인벤토리가 켜질 경우 뒷배경이 블러처리.

 

그 외 추가로 개발적인 부분에서 구현해야 할 부분을 정리하면 다음과 같다.

= 인벤토리를 활성화시켰을 때 플레이어 이동과 같은 인풋은 막아야 한다.

= 아이템 배경을 활성화시켰을 

 

 

 

 

 

 

 

 

 

 

 

1. 이전까지 작업한 내역

= 인벤토리 오브젝트 활성화되었을 때 아이템 슬롯 출력.

=> 아이템 종류가 상황별로 달라지므로 동적으로 처리했다.

 

 

 

 

 

 

2. 오늘 작업한 내역

* 플레이어 Input과 연결

= 플레이어 input system을 연결해서 OnInventory()로 인벤토리를 확인할 수 있게 하였다.

++ FindObjectOfType이 유효한 오브젝트만 해당해서 해당 방법으로는 찾을 수 없었다..

그래서 InventoryUI를 생성될 때 Count해서 생성된 UI 오브젝트의 개수를 기준으로 판단해 오브젝트의 재생성을 막았다.

 

* Inventory 타이틀 UI 추가

 

* 해당 인벤토리 슬롯 클릭시 아래와 같이 출력

= 여기서 필요한 모든 UI 요소들이 생성되어야 하므로 해당 요소들을 전부 CreateUIComponent()함수를 만들어서 라이프사이클 중 Start() 과정일 때 수행되도록 하였다.

++ 이 때 클릭했을 때 나타나는 초록색 상자의 경우 이미지에서 scale값 조정이 필요했으므로 CreateUIComponent()를 매개변수만 추가하는 식으로 오버로딩해서 생성했다.

= UI 위치 변동성을 줄이기 위해 RectTransform을 사용하고, SetParent()를 사용해 부모 오브젝트를 설정했다.

= 여기 표시된 오브젝트 및 아이템 설명, 아이템 제목 등의 데이터도 InventoryUI를 생성할 때 생성하고 아이템 슬롯 클릭시 해당 오브젝트의 위치만 변경되도록 설정했다.

 

 

 

++ 아이템 데이터를 가져와야 하는데 아이템이 구현이 안되어서 아직 가져오지 못했다..

 

 

 

 

 

 

3. 고민하는 부분  및 리팩토링해야 할 부분.

= UI들의 위치 좌표를 스크립트별로 저장하고 있어서 관리해야 할 UI 데이터에 추가하는 것이 고민이다.

=> 추후 게임 오브젝트를 에디터 상에서 가져와서 스크립트별로 설정하는 것이 아닌, ResourceManager에서 필요한 오브젝트들을 가져오려고 생각하고 있어서 Instantiate하는 UI들의 위치값을 선언해서 저장하고 있는데, 사용도가 한정된 UI는 Rect Transform에 저장해서 그대로 받아오면 될 것 같은데, 범용적인 UI의 경우 어떻게 관리하는지 고민이다.

 

= 각 오브젝트별로 오브젝트가 존재하지 않을 때, 오브젝트 내부의 값이 존재하는지(텍스트의 경우) 설정해야 한다.

 

= 해당 인벤토리의 UI 데이터들을 전부 InventoryUI.cs에 넣으니 비효율적으로 보인다. 따로 GameObject-position와 같은 데이터를 기본으로 하는 배열을 선언해서 해당 배열에서 값을 가져와 처리하는 것이 코드가 좀 더 깔끔할 것 같다.

 

= OnInventory()를 실행할 때 1초정도 시간이 걸리는데 해당 부분에 대해 좀 더 고민해 리팩토링해야겠다. UI 렌더링때문에 시간이 걸리는지 잘 모르겠다..

 

 

++ 전반적으로 기능 자체 구현에는 시간이 많이 걸리지 않았는데 코드를 계속 수정하다보니 시간이 더 걸려버린 것 같다..계속 공부해서 효율적인 코드를 짜는 시간이 좀 더 줄었으면 좋겠다.