Chapter 7-7. UI : 인벤토리 실습
카테고리: Unity Lesson 2
태그: Unity Game Engine
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
Chapter 7. UI
🚀 인벤토리(고정UI)
📜UI_Inven_Item
UI_Inven
캔버스 UI 프리팹의 아이템 하나하나를 이루는 그 아이템에 붙는다.
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 컴포넌트로 관리한다.
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
해줘도 된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기