[HappyTools] GameBootstrapper, SingletonBehaviour

2023. 3. 21. 01:57코드 전시관/Unity

HappyTools 프로젝트

더보기

HappyTools는 Unity로 게임을 만들면서 자주 사용하게 되는 기능, 클래스 등을 모아두는 Utility 라이브러리입니다.

딱히 구조가 탄탄한 라이브러리는 아니고, 그냥 제가 개발하면서 썼던 기능들을 아카이브 해두는 용도입니다.

나중에 게임 프로토타이핑이나 게임 개발에 사용할 수 있도록 하는게 목표입니다.

 

HappyTools Github : https://github.com/HappyFaceFriend/HappyTools

 

GitHub - HappyFaceFriend/HappyTools: My own code base which consists of utilities and useful base classes.

My own code base which consists of utilities and useful base classes. - GitHub - HappyFaceFriend/HappyTools: My own code base which consists of utilities and useful base classes.

github.com

 

 

게임 구조를 설계할 때, 싱글턴 패턴으로 SoundManager이나 GameDataManager를 만드는 일이 자주 있습니다.

항상 이럴 때 모든 씬에 해당 오브젝트를 생성해둬야해서 불편했는데,

유니티의 RuntimeInitializeOnLoadMethod 기능을 알게돼서 게임을 어느 씬에서 시작해도 특정 prefab을 생성하는 기능을 만들었습니다.

사실 RuntimeInitializeOnLoadMethod만 붙여주면 되는 기능이지만, 그래도 나중에 쓰기 편하게 싱글턴과 함께 기능을 넣었습니다.

 

[Github]

 - Demo : https://github.com/HappyFaceFriend/HappyTools/tree/main/Assets/Demos/GameBootstrapperDemo

 - Script : https://github.com/HappyFaceFriend/HappyTools/tree/main/Assets/Scripts/GameBootstrapper

(SingletonBehaviour : https://github.com/HappyFaceFriend/HappyTools/tree/main/Assets/Scripts/Utils/Singleton )

 

간단한 구현 설명

RuntimeInitializer

GameBootstrapper prefab을 생성하는 함수를 BeforeSceneLoad에 실행하는 static 클래스 입니다.

이 파일의 BOOTSTRAPPER_PREFAB_PATH 값을 바꿔서 원하는 prefab을 선택하거나, 기능을 비활성화 할 수 있습니다.

GameBootstrapper

InitGame() 구현을 요구하는 abstract 클래스로, 이 클래스를 상속받아서 원하는 초기화 작업을 해주면 됩니다.

SingletonBehavour / SingletonBehaviourFixed

스크립트에 싱글턴 패턴을 구현하고, DontDestroyOnLoad로 유니티 하이아키 상에서도 싱글턴 역할을 합니다.

SingletonBehaviour은 새로운 싱글턴 인스턴스가 생기면 이전에 있던 인스턴스를 삭제하고,

SingletonBehaviour은 새로운 인스턴스를 삭제합니다.

Demo 설명

 

Demo는 코드가 길지 않기때문에 코드를 보면 사용방법을 금방 알 수 있습니다.

 

GameBootstrapper 오브젝트는 InitGame()에서 LogManager를 생성합니다.

LogManager는 SingletonBehaviourFixed로, 모든 스크립트가 접근할 수 있어, Simon:Says something이라는 로그를 찍었습니다.

 

이렇게 Bootstrapper를 사용하면 Singleton 여러개를 사용할 때와 다르게 초기화 순서를 정해줄 수 있고, 서로 레퍼런싱도 할 수 있어 훨씬 좋습니다.

 

이 기능을 키고 끄는 방법을 조사해보고 User code에서 수정할 수 있게 하려고 생각도 많이 해봤지만, 결국 static string 변수를 코드로 들어가 수정하는 방법밖에 없었습니다.

 

반응형