김펭귄 관찰일기
article thumbnail

1. 1. Today

 너무 슬프다. 도대체 어디가 문제인지 도통 모르겠다. 4시간 째 이 녀석만 붙들고 있었더니 머리가 아플 지경이다. 간단한 부분을 놓치고 있는 것 같다는 느낌이 들긴 하는데 역시나 모르겠다.

 

 문제는 UIManager에서 GameManager로 몇 줄의 코드를 옮기는데서 시작되었다.

 

아래는 UIManager 코드다. 여기서 GameObject인 Player과 characterStatsHandler, playerStatSO까지 이렇게 세 녀석을 GameManager로 옮기는 와중에 오브젝트가 null이라는 에러를 만났다.

<csharp />
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using System; public class UIManager : MonoBehaviour { public static UIManager Instance = null; [SerializeField] private GameObject player; [SerializeField] private GameObject playerPanel; [SerializeField] private GameObject menuPanel; [SerializeField] private GameObject buttonPanel; [SerializeField] public GameObject statusPanel; [SerializeField] public TextMeshProUGUI menuText; public CharacterStatsHandler characterStatsHandler; public PlayerStatSO playerStatSO; private void Awake() { if (Instance == null) { Instance = this; } Init(); } private void Init() { characterStatsHandler = player.GetComponent<CharacterStatsHandler>(); Debug.Log("characterStatsHandler" + characterStatsHandler.name); playerStatSO = characterStatsHandler.currentStats.playerStatSO; Debug.Log("playerStatSO" + playerStatSO.name); // characterStatsHandler = GameManager.Instance.characterStatsHandler; // playerStatSO = GameManager.Instance.playerStatSO; menuText = menuText.GetComponent<TextMeshProUGUI>(); } public void TurnOnStatusPanel() { SetMenuText(Menu.Status); buttonPanel.SetActive(false); statusPanel.SetActive(true); } public void TurnOffStatusPanel() { SetMenuText(Menu.Menu); statusPanel.SetActive(false); buttonPanel.SetActive(true); } private void SetMenuText(Menu menu) { switch (menu) { case Menu.Menu: menuText.text = "메뉴"; break; case Menu.Status: menuText.text = "상태창"; break; case Menu.Inventory: menuText.text = "인벤토리"; break; case Menu.Shop: menuText.text = "상점"; break; } } private enum Menu { Menu, Status, Inventory, Shop } }

 

 이상하다. 분명 인스펙터 상에서도 같은 Player 오브젝트를 맵핑해두었고, 심지어 코드 오타가 있나 해서 그대로 복붙해도 똑같은 상황이다.

 

<csharp />
using UnityEngine; public class GameManager : MonoBehaviour { public static GameManager Instance = null; [SerializeField] private GameObject player; public CharacterStatsHandler characterStatsHandler; public PlayerStatSO playerStatSO; private void Awake() { if (Instance == null) { Instance = this; } Init(); } private void Init() { characterStatsHandler = player.GetComponent<CharacterStatsHandler>(); Debug.Log("characterStatsHandler" + characterStatsHandler.name); playerStatSO = characterStatsHandler.currentStats.playerStatSO; Debug.Log("playerStatSO" + playerStatSO.name); } }

 



 

 너무나도 어지럽다.. 도대체 무엇이 문제인가. 으아아아아 해결하고 싶어 미치겠다.

 

profile

김펭귄 관찰일기

@Penguin.Kim