20231214_프리펩,ItemSlot

2023. 12. 14. 22:23IT/TIL

오늘의 TIL은 개인과제를 진행하면서 공부했던 프리펩과 ItemSlot 에 관한 이야기이다.

 

 

개인과제를 스파르타 던전 유니티 버전으로 선정한 후에 작업을 하면서 경험한 내용인데,

 

프리펩에 스크립트를 연결한 후에, 그 스크립트에 게임 오브젝트 등을 연결하는 경우에,

 

자신의 하위에 있는 오브젝트들의 경우에는 연결이 가능하나,

 

자신 밖에 있는 오브젝트들은 기본으로 연결이 불가능하다.

 

아 이미지의 오른쪽 하단의 Item Button 스크립트를 보면,

Item Icon. Equip 오브젝트 등은 프리펩을 더블 클릭하여 나오는 창에서 수정할 수 있지만,

이 프리펩 외부에 있는 오브젝트 등은 연결이 불가능하다.

 

 

위의 이미지처럼 프리펩을 밖(Hierarchy 창)으로 꺼낸 후에 연결할 수 있지만,

이는 Project의 프리펩에는 저장되지 않고 밖으로 꺼낸 Hierarchy 창에 있는 프리펩에만 적용된다.

 

 

Project 창의 프리펩에 저장할 수 있는 데이터라면 Overrides에서 Apply All을 통해 저장할 수 있지만,

지금의 정보는 저장할 수 없어서 Apply All 버튼이 활성화되지 않는다.

 

 

이 문제로 개인과제를 진행하는데 어려움을 겪었는데,

가장 큰 문제는 해당 프리펩에서 프리펩의 버튼을 눌렀을 때,

외부에 있는 확인용 팝업창이 떠야되는데 뜨지 않는 문제였다.

또, 어떻게 팝업창을 띄운 뒤에는 Yes 버튼을 눌렀을 때,

이 결과물이 이 프리펩 하위에 있는 Equip 게임오브젝트에 영향을 주어야되는데

이 연결이 안되는 문제를 겪었다.

 

 

이후에 프리펩에 대해 공부하면서 위의 사실을 정리하였고,

개인과제 해설 강의를 보면서 ItemSlot을 이용하여 이 기능을 구현하였다.

 

우선 ItemSlot을 이용하면서 스크립터블 오브젝트를 관리하는 스크립터블 오브젝트를 만들었으며,

 

이 정보를 가지고 ItemPool을 만들어서 이 Pool에 있는 정보로

ItemSlot에 데이터를 전달하도록 만들었다.

 

 

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIManager : MonoBehaviour
{
    // 인벤토리를 열었을 때, 아이템 슬롯에 아이템 정보들이 들어가야함.
    public ItemSlot[] itemslots;

    public void SetInventory()
    {
        for (int i = 0; i < DataManager.instance.itemPool.myItems.Length; i++)
        {
            itemslots[i].Init(DataManager.instance.itemPool.myItems[i]);
        }

        for (int i = DataManager.instance.itemPool.myItems.Length; i < 9; i++)
        {
            itemslots[i].gameObject.SetActive(false);
        }
    }
}

위와 같이 코드를 작성했으며,

itemPool의 길이에 따라서 itemslots를 만들고, 비어있는 아이템은 버튼이 활성화되지 않게

아래의 for 문으로 게임오브젝트를 비활성화 시켰다.

 

즉, 프리펩을 이용하여 아이템 수 만큼 프리펩을 생성하려고 하였던 전략에서

미리 아이템 슬롯을 채워놓은 후에 실제로 갖고 있는 아이템 풀만큼 화면에 보이도록 전략을 수정했다.

 

만약 아이템 수가 9개가 넘어가는 경우에는 for문 안에 for문으로 1번 ~ 9번까지는 1페이지에,

10번 ~ 18번까지는 2페이지에, ... 으로 페이지로 나눠서 표현할 예정이었다.

(해설 강의에서는 페이지로 나눈 것이 아니라 스크롤 방식으로 만들어서, 이 방식도 테스트 해보았다)

 

이 과제를 진행하면서 실제 개발된 게임들에서는 아이템 창을 어떻게 구현하는지 알아보고 싶은 마음이 생겼다.

추후에 기회가 된다면 이 부분을 확인해보려고 한다.

 

또, 해설 강의에서 UI와 관련되어 앵커를 설명해주셨는데,

내일은 UI와 관련하여 앵커와 피벗을 공부해볼 예정이다.

'IT > TIL' 카테고리의 다른 글

20231218_OnTrigger,OnCollision  (0) 2023.12.19
20231215_데이터 저장  (0) 2023.12.16
20231213_Class  (0) 2023.12.14
20231212_ScriptableObject  (0) 2023.12.12
20231211_SOLID원칙, LayerMask, 싱글톤  (1) 2023.12.11