오늘의 학습 키워드
static 클래스
공부한 내용
MonoBehaviour를 상속받은 static 클래스 vs static 클래스
문제 : SceneManager.LoadScene으로 게임을 재시작했을 때 static 클래스인 WeaponManager의 다음 판에도 데이터가 계속 남아 있어 문제가 되었다.
public class WeaponManager
{
private static WeaponManager _instance;
public static WeaponManager Instance { get => GetInstance(); }
public List<UpgradeItem> WeaponPrefabs { get; private set; }
public List<WeaponData> WeaponDatas { get; private set; } = new List<WeaponData>();
[Header("Resource Path")]
private const string ITEM_UI_PATH = "UI/Weapons/";
public event Action<WeaponData> WeaponUpgradeEvent;
private static WeaponManager GetInstance()
{
if (_instance == null)
_instance = new WeaponManager();
return _instance;
}
}
원인으로 생각한 것 : SceneManager.LoadScene으로 게임을 다시 시작했을 때 MonoBehaviour를 상속 받은 GameManager 싱글턴의 데이터는 초기화 되는 것으로 보아 싱글턴을 여러 곳에서 관리 하는 것에서 문제가 생긴다고 생각했다.
해결 방안 : WeaponManager의 싱글턴을 제거한 후 GameManager 싱글턴이 WeaponManager까지 관리를 해서 게임을 재시작 할 때 GameManager 싱글턴이 파괴되어 WeaponManager까지 파괴될 수 있도록 했습니다.
public class GameManager : MonoBehaviour
{
public static GameManager instance;
private WeaponManager _weapon;
public WeaponManager Weapon { get => GetInstance(ref _weapon); }
private void Awake()
{
instance = this;
}
public T GetInstance<T>(ref T t) where T : new()
{
if (t == null)
t = new T();
return t;
}
}
오늘의 회고
오늘은 저번 주부터 진행한 팀 프로젝트를 마무리하고 발표하는 날이었다. 추석 연휴가 껴있어서 일정 맞추기도 어렵고 짬짬이 구현을 해야했지만 기한이 다가올수록 팀원들이 많이 도와주어서 급한 순서대로 작업을 잘 쳐낼 수 있었다. 다음엔 리팩토링도 신경써서 잘 해봐야겠다.
내일은 새로운 것을 공부할텐데 기대가 된다. 열심히 잘 해봐야겠다. 내일도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 41일차 TIL - Excel에서 데이터 읽어오기 (0) | 2023.10.06 |
---|---|
내일배움캠프 40일차 TIL - FSM (0) | 2023.10.05 |
내일배움캠프 38일차 TIL - 무기 2가지 구현 (0) | 2023.09.29 |
내일배움캠프 37일차 TIL - 원형으로 발사되는 투사체 (0) | 2023.09.27 |
내일배움캠프 36일차 TIL - UI 중복 없이 랜덤 뽑기 (0) | 2023.09.26 |