▶▷ 계획
이번 프로젝트는 최종 프로젝트 전 마지막 프로젝트로 지금까지 배우면서 쌓아온 나의 능력치를 확인해보고 가다듬는 프로젝트이다.
장르는 3D RPG이고 내가 이번에 맡은 역할은 UI와 각종 아이템 데이터 관리이다.
UI는 앞에서 진행했던 인벤토리와 동일하게 캔버스를 통해 제작할 것이고 아이템 데이터는 SO(Scriptable Object)로 생성하려고 한다.
▶▷ UI
UIManager
public class UIManager : MonoBehaviour
{
// 싱글톤 인스턴스
private static UIManager instance;
public static UIManager Instance { get { return instance; } }
// 항상 활성화 되는 UI 참조
private BaseUI baseUI;
public BaseUI BaseUI
{
get { return baseUI; }
private set { baseUI = value; } }
// 상점 UI 참조
private ShopUI shopUI;
public ShopUI ShopUI
{
get { return shopUI; }
private set { shopUI = value; }
}
private void Awake()
{
// 중복 방지
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(gameObject);
}
DontDestroyOnLoad(gameObject);
}
// 기본 UI 연결
public void SetBaseUI(BaseUI baseUI)
{
BaseUI = baseUI;
}
// 상점 UI 연결
public void SetShopUI(ShopUI shopUI)
{
ShopUI = shopUI;
}
}
BaseUI
public class BaseUI : MonoBehaviour
{
void Start()
{
// UIManager에 BaseUI 연결
UIManager.Instance.SetBaseUI(this);
}
}
ShopUI
public class ShopUI : MonoBehaviour
{
void Start()
{
// UIManager에 ShopUI 연결
UIManager.Instance.SetShopUI(this);
}
}
먼저 클래스 구조를 어떻게 할지 생각해보았고, UI들을 관리하는 UIManager를 싱글톤으로 구현하여 이를 통해 항상 띄워져있을 BaseUI와 상점 화면을 띄우기 위한 ShopUI를 위와 같이 연결하면 될 것 같다.
▶▷ Item Data
아이템 데이터의 경우 enum을 이용하여 각 아이템이 어떤 아이템인지에 대한 타입을 정하고
CreateAssetMenu를 통해 유니티 에디터 상에서 데이터를 만들 메뉴를 추가하였다.
public enum ItemType
{
Equippable,
Consumable,
Other
}
[CreateAssetMenu(fileName = "NewItem", menuName = "Item/ItemData")]
public class ItemData : ScriptableObject
{
[SerializeField] private Sprite icon;
[SerializeField] private string itemName;
[SerializeField] private ItemType type;
[SerializeField] private string description;
}
아래와 같이 아이템 정보에는 이미지, 이름, 타입, 설명 등이 들어간다.
▶▷ 트러블 슈팅
막히는 점
1. UIManager의 Instance를 각 UI 스크립트들이 인식을 못하는 현상
원인
1. 개체 참조를 하지 않아서 생긴 문제
해결
1. 선언부에서 static을 붙여 해결
'게임 개발 공부 기록' 카테고리의 다른 글
47일차 - RPGProject 팀 프로젝트 3 (0) | 2025.03.31 |
---|---|
46일차 - RPGProject 팀 프로젝트 2 (0) | 2025.03.28 |
44일차 - UI 복습 3 (0) | 2025.03.26 |
43일차 - 최적화 1 (0) | 2025.03.25 |
42일차 - UI 복습 2 (0) | 2025.03.24 |