본문 바로가기
유니티 공부

Scene변환시의 주의점

by g-builder 2024. 10. 14.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class NameInput : MonoBehaviour
{
    public InputField playerNameInput;
    private string playerName = null;
 
    //마우스
    public void InputName()
    {
        playerName = playerNameInput.text;
        if (playerName.Length >= 2)
        {
            GameManager.name = playerName;
            SceneManager.LoadScene("SampleScene");
        }
    }
}
 
cs

 

TitleScene에서 이름값을 입력받고 그다음 씬에있는 GameManager의 Instance의 텍스트에 넣어준뒤 그 값을 표시하려고 했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    public Text nametext;
    public static string name;
    private void Awake()
    {
        nametext = GetComponentInChildren<Text>();
        nametext.text = name;
        if (instance == null)
        {
            instance = this;
        }
    }
}
cs

 

위에는 이미 다 수정해서 안보이지만 처음엔 GameManager을 싱글톤패턴으로 해서 Instance를 선언해준뒤 거기에 넣으려고하는데 오류가 발생했다.

 

처음엔 인스턴스 참조가 안된다는 오류를 보고 Instance를 사용못하고 있다는건 알았지만 정확한 문제를 인지 하지못했고 어떻게 대응해야할지 몰랐다.

 

그리고 튜터님께 질문한결과 


여기서 Instance는 SampleScene(GameManager가 있는 씬)에 넘어와야지만 Awake가 실행되면서 값을 넣어주기때문에 TitleScene에서는 Instance가 null인 상태이므로 값을 넣어줄 수 가 없는것과.

 

그리고 TitleScene에서 받아놓은 string playerName은 씬이 변경되면서 파괴가 되는것을 배웠다.

 

 

그래서 string name을 static으로 선언해줬다.(이것도 튜터님 조언..)

static string name도 null이지만 참조를 해야하는 Instance와는 달리 변수 그자체에 값을 넣어주는것이기때문에 

TitleScene에서도 값을 넣어줄 수 있었고 씬이 변경되도 이미 넣어준 값으로 문제없이 SampleScene에서 변수를 활용할 수 있었다.