본문 바로가기

Unity/제로부터 구현

GameManager(싱글톤) + CanvasGroup으로 UI 컨트롤

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