덴바의 노트

내일배움캠프 0일차 TIL [게임 상태에 따른 안정적인 동작] 본문

프로그래밍 노트/TIL

내일배움캠프 0일차 TIL [게임 상태에 따른 안정적인 동작]

덴바 2024. 4. 15. 20:47

오늘의 학습 키워드
  • enum 함수
  • switch문
  • 코루틴 WaitUntil

 

공부한 내용 본인의 언어로 정리하기

 

enum 함수란?

 

enum 함수란 C#에서 사용되는 열거형(Enumeration) 형식이다. 

 

enum 키워드를 사용하며 내부에 다양한 상수들을 나란히 열겨할 수 있는 하나의 목록과 같다.

 

public enum GameState
{
	Ready,
    Play,
    Clear,
    GameOver
}

 

위와 비슷한 형식으로 사용되며 주로 switch문을 활용하여 상태별 처리를 나눌 때  자주 사용합니다.

 

        switch(state)
        {
            case Define.GameState.Ready:
            // TODO 준비 상태일 때 동작
                break;
            case Define.GameState.Play:
            // TODO 게임 플레이 상태일 때 동작
                break;
            case Define.GameState.Clear:
            // TODO 게임 클리어 상태일 때 동작
                break;
            case Define.GameState.GameOver:
            // TODO 게임 오버(실패) 상태일 때 동작
                break;
        }

 

위와 같이  사용하며 반드시 'case' 마다 'break'를 사용해줘야 한다.

 

그렇지 않으면 진입한 Case에서 부터 마지막 까지 멈추지 않고 모든 코드를 실행해버리는 문제가 있다.

 

enum과 switch 활용의 장점

 

  1. 가독성이 좋다. 
  2. 이해하기 쉽다.

 

enum과 switch 활용의 단점

 

  1. 하나의 스크립트 내에서 코드가 길어지거나 복잡해질 수 있다.
  2. 대규모 프로젝트에서 빈번히 사용 시, 유지보수가 어려워진다.

 


코루틴 yield return new WaitUntil()

 

코루틴은 유니티에서 제공하는 기능 중 하나로, 해당 스크립트는 반드시 MonoBehaviour를 상속해야 한다.

 

코루틴을 이해하기 앞서 유니티에서는 Event함수의 실행 순서라는 것이 존재한다.

 

ex) Start(), Awake(), OnEnable, OnDisable() 등...

 

참고) 이벤트 함수의 실행 순서 - Unity 매뉴얼 (unity3d.com)

 

그 중에 우리가 가장 많이 사용하는 것이 바로 Update()함수 일 것이다.

 

문제는 Update() 함수에서는 매프레임 마다 실행을 한다.

 

코딩을 하다보면 특정 상황, 특정 타이밍에 Update문을 일시적으로 멈추고 특정 함수를 처리하게 하고 싶을 때가 있다.

 

그 기능을 코루틴이 하게 해준다.

 

    public IEnumerator CreateCard()
    {
            yield return new WaitUntil(() => Vector3.Distance(dest, cd.transform.position) <= 0f);

    }

 

코루틴을 사용하기 위해서는 기존의 함수 형식인 void 또는 자료형이 아닌 IEnumerator를 이용하여 선언해야 한다.

 

또한 코루틴에는 반드시 yield 문이 존재해야 한다.

 

yield 문이란 코루틴이 실행됨으로써 Update문을 일시 중단하고 코루틴을 처리한 후 다시 Update문으로 돌아가 처리를 하게 처리 권한을 양보하는 행위이다.

 

여기서 이번에 사용한 코드 WaitUntil()의 특징은 특정 조건이 달성할 때 까지 코루틴의 처리 작업을 양보하는 코드이다.

 

사용해본 결과 WaitUntil()에 람다함수를 이용하여 true를 return하면 조건을 달성할 수 있다는 것을 알 수 있었다.

 

 

오늘의 회고

 

오늘은 enum, switch, coroutine을 활용하여 게임 상태 별 GameManager 내부의 작동 원리를 구현했다. 

 

메커니즘은 직관적이고 가독성이 좋아서 나쁘지 않게 작성했다고 생각하지만, 아직도 부족한 부분이 많았다.

 

관련 자료를 조사하다보니 12시간이라는 시간은 금방간 것 같다.

 

앞으로는 좀 더 체계적으로 디자인 패턴을 참고해가며 유지보수성과 가독성 등등 객체지향성을 최대한 살려서 공부한 것이다.

'프로그래밍 노트 > TIL' 카테고리의 다른 글

내일배움캠프 5일차 TIL  (0) 2024.04.22
내일배움캠프 4일차 WIL  (0) 2024.04.19
내일배움캠프 3일차 TIL  (1) 2024.04.18
내일배움캠프 2일차 TIL  (0) 2024.04.17
내일배움캠프 1일차 TIL  (0) 2024.04.16