Unity/제로부터 구현
GameManager(싱글톤) + CanvasGroup으로 UI 컨트롤
휘게31
2023. 11. 22. 20:06
728x90
*틀린 점을 발견하신다면 꼭 댓글 남겨주시면 감사하겠습니다😢
- 오늘의 구현
1.GameManager 구현 ( 싱글톤)
2.CanvasGroup component를 이용한 GameOver UI 만들기 + Time out
싱글톤(Singleton) : 소프트웨어 디자인 패턴중 하나로, 단 하나의 인스턴스만을 사용하여 데이터나 리소스를 관리하고 공유할 수 있도록 하는 것입니다.
1.Gamemanager (Singleton)
public class GameManager : MonoBehaviour
{
private static GameManager instance;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public static GameManager Instance
{
get { return instance; }
}
// 추가적인 기능 구현
}
- 클래스 내에 유일하게 인스턴스를 저장하기 위한 정적 변수 생성.
- 해당 클래스의 인스턴스는 유일해야 하기 때문에 인스턴스의 유무를 확인하고, 현재 객체를 instance 변수에 할당하여 싱글톤 인스턴스를 생성해 줍니다.
- DontDestroyOnLoad(gameObject) :씬 전환 시에도 특정 게임 오브젝트를 파괴하지 않고 유지하기 위해 사용됩니다. 이 함수를 호출한 게임 오브젝트는 현재 씬에서 파괴되지 않고 다른 씬으로 이동할 때도 유지됩니다.
- Instance 는 GameManager의 유일한 인스턴스에 접근하기위한 속성으로 get으로 instance를 읽을수는 있지만 set이 없어 해당 인스턴스를 수정하거나 변경할 수 없습니다.
2.CanvasGroup component
CanvasGroup 컴포넌트는 UI 요소의 부모 오브젝트인 Canvas에 추가하여 사용됩니다.
CanvasGroup을 통해 UI 요소의 투명도, 상호작용 가능 여부, Raycast 이벤트의 차단 여부 등을 동적으로 제어할 수 있습니다.
public CanvasGroup gameOverCanvas;
IEnumerator GameOver()
{
DestroyRain();
gameOver = true;
gameOverCanvas.gameObject.SetActive(true);
float percent = 0;
while (percent < fadeDuration)
{
percent += Time.deltaTime;
float interpolation = percent / fadeDuration;
gameOverCanvas.alpha = Mathf.Lerp(0f, 1f, interpolation);
yield return null;
}
gameOverCanvas.alpha = 1;
}
해당 게임이 Game Over 했을 때 , 게임상에 존재하는 Rain 오브젝트를 모두 제거해 준뒤, gameOver 메세지를 표시해 줍니다.
GameOver 메세지는 CanvasGroup의 alpha 값을 이용해 페이드 인 됩니다.
`yield return null` : 현재 프레임이 완료될 때까지 일시 중단하고 다음 프레임에서 다시 실행됩니다
728x90