Unity3D_MMO - 인벤토리 실습

k_hyun·2022년 10월 13일
0

Unity_MMO_Project

목록 보기
13/33

UI_Inven & UI_Inven_Item (Prefabs)


UI_Inven은 GridPanel과 UI_Inven_Item으로 이루어졌다.

UI_Inven_Item은 이미지 아이콘과 텍스트로 이루어졌다.

PlayerController.cs

public class PlayerController : MonoBehaviour
{
    
    void Start()
    {        
        // TEMP
        Managers.UI.ShowSceneUI<UI_Inven>();
    }    
    
	...
    
}

UI_Inven 팝업을 띄운다.

해당 과정에서 오브젝트가 생성되고 스크립트가 삽입된다.

UI_Inven.cs

public class UI_Inven : UI_Scene
{
    enum GameObjects
    {
        GridPanel,
    }

    void Start()
    {
        Init();
    }
    
    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects));

        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.Resource.Instantiate("UI/Scene/UI_Inven_Item");
            item.transform.SetParent(gridPanel.transform);

            UI_Inven_Item invenItem = Util.GetOrAddCompoent<UI_Inven_Item>(item);
            invenItem.SetInfo($"총 {i}");

        }
    }
}

UI_Inven을 바인드한다.

처음에는 인벤토리를 비우는 작업을 실시한다.

이후 예시로, 8개의 Inven_Item을 생성한다.

SetInfo는 생성된 아이템의 텍스트 변경을 위한 함수이다.

UI_Inven_Item.cs


public class UI_Inven_Item : UI_Base
{
    enum GameObjects
    {
        ItemIcon,
        ItemNameText,
    }

    string _name;

    void Start()
    {
        Init();
    }
    
    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects));

        Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;
        Get<GameObject>((int)GameObjects.ItemIcon).AddUIEvent((PointerEventData) => Debug.Log(_name));
    }

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

여기서도 처음에 바인드를 실시한다.

이후 텍스트 게임오브젝트의 텍스트 컴포넌트에 접근해 이름을 바꾸는 과정을 적용하였다.

실행 결과

총 8개의 아이템이 생성되었으며, 각각의 텍스트가 적용된 것을 확인하였다.

0개의 댓글