김펭귄 관찰일기
article thumbnail

1. Today

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

 

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

 

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

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 오브젝트를 맵핑해두었고, 심지어 코드 오타가 있나 해서 그대로 복붙해도 똑같은 상황이다.

 

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