게임을 만들때 전역변수로 사용하며 UI, 네트워크, 사운드, Scene관리 등의 기능을 넣어줄 managers가 필요하다. 다른 매니저들을 포함해야하기에 s.
game manager는 scene에 한개만 존재해야 하므로 singleton pattern을 이용해 구현해줘야 한다.
일단 빈 게임오브젝트를 생성해주고 이름을 @Manager
라고 지어준다.
Managers
Script를 만들어 컴포넌트에 추가해준다.
public class Managers : MonoBehavior
{
void Start()
{
}
void Update()
{
}
}
기본 C# 스크립트 코드이다. 여기서 singleton 적용을 위해 static한정자의 Managers 타입의 intance 변수를 생성해준다.
public class Managers : MonoBehavior
{
static Managers instance;
public static Managers GetInstance() { return instance; }
void Start()
{
}
void Update()
{
}
}
앞으로 다른 클래스에서 Managers에 접근하려면 GetInstance()
를 사용하도록 한다.
처음 Manager를 생성하거나 접근할 때마다 하나의 instance에만 접근하도록 하자
일단 manager가 없으면 만들어서, 있으면 있는걸로 초기화 시켜주는 init()
메소드를 만든다.
public class Managers : MonoBehavior
{
static Managers instance;
public static Managers GetInstance() { return instance; }
void Start()
{
}
void Update()
{
}
void Init()
{
if(instance == null)
{
//@Managers 가 존재하는지 확인
GameObject go = GameObject.Find("@Managers");
//없으면 생성
if(go == null)
{
go = new GameObject { name = "@Managers" };
}
if(go.GetComponent<Managers>() == null)
{
go.AddComponent<Managers>();
}
//없어지지 않도록 해줌
DontDestroyOnLoad(go);
//instance 할당
instance = go.GetComponent<Managers>();
}
}
Init()
을 호출하는 경우는
- @Managers가 생성되었을 때
- GetInstance()가 호출되었을 때 -> null확인을 해야되니까
따라서 코드는
public class Managers : MonoBehavior
{
static Managers instance;
public static Managers GetInstance() { Init(); return instance; }
void Start()
{
Init();
}
void Update()
{
}
void Init()
{
if(instance == null)
{
//@Managers 가 존재하는지 확인
GameObject go = GameObject.Find("@Managers");
//없으면 생성
if(go == null)
{
go = new GameObject { name = "@Managers" };
}
if(go.GetComponent<Managers>() == null)
{
go.AddComponent<Managers>();
}
//없어지지 않도록 해줌
DontDestroyOnLoad(go);
//instance 할당
instance = go.GetComponent<Managers>();
}
}
이렇게 된다.
만약 다른 Object에서 Manager를 사용한다면
public class Player : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Managers mg = Managers.GetInstance();
}
// Update is called once per frame
void Update()
{
}
}
Ethan had never considered himself much of a gambler. The occasional poker night with friends was as far as his experience went, and he https://yonibet-casino-france.com/ was content with that. But after discovering a new blackjack platform, his curiosity got the better of him, and he decided to dive in. His first few games were shaky, filled with hesitations and second-guesses, but he was determined to understand the intricacies of the game.