Chapter 7-7. UI : 인벤토리 실습

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

Chapter 7. UI

🚀 인벤토리(고정UI)

📜UI_Inven_Item

UI_Inven 캔버스 UI 프리팹의 아이템 하나하나를 이루는 그 아이템에 붙는다.

image

public class UI_Inven_Item : UI_Base
{
    enum GameObjects // 구성 UI 오브젝트가 2개 뿐이라 그냥 GameObjects 한 곳에 묶음
    {
        ItemIcon,
        ItemNameText,
    }

    string _name;

    void Start()
    {
        Init();
    }

    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects)); // ItemIcon, ItemNameText 오브젝트 바인딩하여 상속받은 Dictionary _objects에 저장.
        Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name; // ItemNameText 텍스트 UI의 텍스트를 _name 으로 변경

        Get<GameObject>((int)GameObjects.ItemIcon).BindEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}"); }); // 확장 메소드 BindEvent 사용. ItemIcon 클릭시 해당 람다함수 실행하게 이벤트 바인딩
    }

    public void SetInfo(string name)
    {
        _name = name;
    }
}


📜UIManager

	public T MakeSubItem<T>(Transform parent = null, string name = null) where T : UI_Base
	{
		if (string.IsNullOrEmpty(name))
			name = typeof(T).Name;
         
		GameObject go = Managers.Resource.Instantiate($"UI/SubItem/{name}");
		if (parent != null)
			go.transform.SetParent(parent);

		return Util.GetOrAddComponent<T>(go);
	}

인벤토리 슬롯 프리팹 생성하는 함수


📜UI_Inven

UI_Inven 캔버스 UI 프리팹에 붙는다.

  • UI 에셋도 에셋스토어에 많다. 참고하자.
  • 📜UI_Inven 인벤토리는 고정 UI 라는 설정이라 📜UI_Scene
  • 인벤토리 UI는 아이템 슬롯들을 GridPanel로 묶어 Grid Layout Group 컴포넌트로 관리한다.

image

public class UI_Inven : UI_Scene
{
    enum GameObjects
    {
        GridPanel
    }

    void Start()
    {
        Init();
    }

    public override void Init()
    {
        base.Init();

        Bind<GameObject>(typeof(GameObjects)); // GridPanel 오브젝트 바인딩

        GameObject gridPanel = Get<GameObject>((int)GameObjects.GridPanel);
        foreach (Transform child in gridPanel.transform) // 모든 아이템 슬롯들 파괴 (미리 파괴하고 시작)
            Managers.Resource.Destroy(child.gameObject);

        // 실제 인벤토리 정보를 참고해서
        for (int i = 0; i < 8; i++)
        {
            GameObject item = Managers.UI.MakeSubItem<UI_Inven_Item>(gridPanel.transform).gameObject; // GridPanel의 자식으로하여 인벤트리 슬롯들 프리팹 생성           
            UI_Inven_Item invenItem = item.GetOrAddComponent<UI_Inven_Item>(); // 📜UI_Inven_Item 도 붙여줌
            invenItem.SetInfo($"집행검{i}번");
        }
    }
}


📜PlayerController

Managers.UI.ShowSceneUI<UI_Inven>();


🚀 Instantiate으로 생성되는 오브젝트의 이름에서 뒤에 붙는 (Clone) 빼기

📜ResourceManager

        GameObject go = Object.Instantiate(prefab, parent);
        int index = go.name.IndexOf("(Clone)"); // string의 IndexOf
        if (index > 0) // 발견했다면
            go.name = go.name.Substring(0, index); // (Clone)전까지만을 name으로 설정

        return go;

그냥 go.name = prefab.name 해줘도 된다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 2 카테고리 내 다른 글 보러가기

댓글 남기기