반응형
원래는 개발일지를 매일매일 써서 만들어지는 과정을 상세하게 보여주고 싶었는데 귀찮아서 그러진 못했다.
어쨋든 최근에 배운 싱글톤 패턴에 대해 작성해보겠다.
계속해서 개발을 하다보니 public 변수로 선언해서 inspector창에서 드래그앤 드랍으로 계속 참조해줘야되기도 귀찮고
이 오브젝트는 계속해서 참조할거 같은데 어떻게 하면 효율적으로 전역변수처럼 쓸수 있을까?? 하고 고민하다가 찾아낸게 싱글톤 패턴이다.
우선 씬의 GameManager라는 오브젝트와 스크립트를 만든다
그리고 그 GameManager라는 스크립트에 자주 참조되는 오브젝트들을 선언한다
그러면 어느 스크립트에서든 GameManager를 통해서 오브젝트들을 참조할 수 있다.
게임의 시작화면이다. 플레이어도 바뀌고 배경도 바뀌고 많이 바뀌었다.
어쨋든 저 시작화면에서 JUMP,ATTACK,일시정지 버튼과 Map이동속도등은 많은 스크립트에서 참조하기에 GameManager에서 싱글톤패턴으로 참조해준다.
기본적인 싱글톤패턴은 아래와 같다
public class GameManager : MonoBehaviour
{
public static GameManager instance=null;
public int level=3;
private void Awake()
{
instance=this;
}
}
위와같이 선언해준다면 어느 스크립트에서든 level이라는 변수에 쉽게 접근 할 수 있다.
Debug.Log(GameManager.instance.level);
어느 스크립트에서든 위와같이 작성하면 3이 출력된다.
아래는 내 GameManager 스크립트이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public static GameManager instance=null;
public Button[] Buttons;//버튼들
public GameObject StartScreen;//Start스크린
public GameObject Ground;//Ground Object
public MapMove MapMove;//Ground에 붙어있는 MapMove Script
public GameObject BestScore;
public SaveScore SaveScore;
public HowLong HowLong;
public GameObject NowDis;
private void Awake()
{
instance=this;
Time.timeScale=1;//ReStart할떄를 위해 계속 Time.timeScale은 1로 해준다
MapMove=Ground.gameObject.GetComponent<MapMove>();
SaveScore=BestScore.gameObject.GetComponent<SaveScore>();
HowLong=NowDis.gameObject.GetComponent<HowLong>();
}
}
댓글과 지적은 언제든지 환영입니다~!
반응형
'유니티 > 2D러닝액션(모바일)' 카테고리의 다른 글
유니티 모바일에서 네트워크 연결 확인 (0) | 2022.03.21 |
---|---|
유니티 2D 로딩씬 제작 (0) | 2022.01.05 |
현재점수 최고점수 (0) | 2021.11.03 |
유니티 리모트5 사용 및 기본 버튼생성 (0) | 2021.10.25 |