2024. 1. 8. 23:03ㆍ카테고리 없음
팀과제로 횡스크롤 게임 제작 프로젝트를 진행했다.
3D 게임으로 AD키를 활용하여 좌우로만 움직이며 몬스터와의 전투, 장애물을 피해서 점프하며 진행하는 것이다.
플레이어와, 몬스터를 제작하는 과정이 매우 복잡했다.
스크립트를 작성함에 있어서 싱글톤 개념이 잘 잡혀있지 않아서, 이해하기가 어려웠다.
외부에서 호출하는 것이 혼자만의 값을 갖는다? 라는 개념인 것 같은데, 무슨 소리인지 모르겠다 ㅋㅋ
유일한 인스턴스 보장 : 특정 클래스의 인스턴스가 하나만 필요한 경우 싱글톤을 사용하면, 그 클래스의 여러 인스턴스가 생성되는 것을 방지할 수 있다.
전역 접근성 : 싱글톤 객체는 전역적으로 접근 가능해야 하므로, 어디에서든 쉽게 참조할 수 있게 된다.
자원의 효율적 관리 : 공유 리소스에 대한 중앙화된 관리가 필요한 경우 싱글톤을 사용하면 효율적이다.
public class GameManager : MonoBehaviour
{
// 싱글톤 만들기, 전체 게임 매니저는 싱글톤으로 만들자
public static GameManager instance;
// Game이 종류 되었는가 확인되는 bool 변수(기본 상태는 false)
public bool isGameOver = false; private void Awake()
{ // 처음 인스터스가 null인 경우(시작되는 경우), 현재 인스턴스를 지정
if (instance == null)
{
instance = this;
} // 만약 중복되는 instance가 존재한다면, 파괴
else if (instance != null)
{
Destroy(this.gameObject);
}
}
}
유니티의 경우 씬이 전환 될 때 오브젝트들이 사라지게 되는데 이를 방지하기 위해서 DontDestroyOnLoad 함수를 사용하면 된다.
private void Awake()
{
if (_instance == null)
{
_instance = this;
} // 인스턴스가 존재하는 경우 새로생기는 인스턴스를 삭제한다.
else if (_instance != this)
{
Destroy(gameObject);
} // 아래의 함수를 사용하여 씬이 전환되더라도 선언되었던 인스턴스가 파괴되지 않는다. DontDestroyOnLoad(gameObject);
}
[출처] [Unity3D] 싱글톤을 이용한 게임매니져 구현|작성자 유알
매니저 클래스의 인스턴스를 static으로 선언하여 어디서든 접근이 가능하게 한다.
따라서 객체를 따로 생성하지 않아도 GameManager의 인스턴스 변수를 사용하여 어디서든 접근이 가능하다.
이는 객체(인스턴스)가 하나임이 보장되는 싱글톤 패턴을 사용하였기 때문이다.
또한 DontDestroyOnLoad를 이용하여 씬이 전환되더라도 처음 생성되었던 매니저 클래스가 유지되도록 한다.
만일 이렇게 하지 않을 경우, 씬이 전환될 때 데이터가 초기화될 가능성이 있다.
public class Example : MonoBehaviour
{
void Start()
{
GameManager.Instance.StartNewGame();
}
}
게임매니저의 인스턴스를 생성하여 StartNewGame() 함수를 실행한다. 게임매니저에게 함수 실행을 명령하는 느낌인 것 같다....