ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 델리게이트 & 코루틴 파헤쳐보기 & 실행 순서
    👾 Unity 2023. 8. 4. 01:53

     

    델리게이트

    • 대신 일을 해주는 수행 비서
    private delegate int RunCalc(int a, int b); 
    
    private static int Sum(int num1, int num2)
    {
    	return num1 + num2;
    }
    
    
    public void Run()
    {
    	RunCalc calc = Sum; // 델리게이트에 메소드 참조
        Console.WriteLine(calc(1,2)); /// 3 출력
        
        RunCalc calc = delegate (int a, int b)
        {
        	return a / b;
        }; //직접 메소드 형태도 지정 할 수 있다 (Anonymous Method)
    }
    • 활용법
      • 추가필요

     

    Func / Action

    • 이미 만들어진 델리게이트
    • 반환 타입이 있을 경우 Func
    • 없을 경우 Action

     

    코루틴

    • 일정 간격 후 어떤 행동 실행하기 - 델타 타임 누적하는 방법으로
    • 다른 프로그램에서는 실행 흐름 단위인 스레드를 여러개 두어 멀티스레드 방식으로 문제 해결
    • 유니티는 단일 스레드 -> 코루틴 방식으로 해결 (상호 협력 루틴)
    • 호출 시점: 모든 Update 함수가 다음 프레임에 호출된 후 계속.
    • 장점
      • 코드에서 매 프레임 마다 조건식으로 체크하지 않아도 되니 성능 우수
      • 코드 간결 -> 가독성 업
    • IEnumerator 반환 타입 / 양보 반환 (yield return)이라는 키워드 사용해 시스템에게 깨워줄 시간을 넘겨주고, 시스템은 넘겨 받은 시간이 경과되면 남은 동작 이어서 처리 
      • yield return null
      • yield return new WaitForSeconds(float)
      • yield return new WaitForFixedUpdate()
      • yield return new WaitForEndOfFrame()
      • yield return StartCoroutine(string)
      • yield break // 종료yield 종류 (몇개만)
    void Damaged()
    {
    	StartCouroutine(DamageProcess());
    }
    
    IEnumerator DamageProcess()
    {
    	yield return new WaitForSeconds(0.5f); //0.5초 기다림
        m_State = Enemy.Move; //기다린 후 현재 상태 전환
    }
    • 유니티에서: yield 구문을 포함하는 모든 함수는 코루틴으로 인식되며 IEnumerator 반환 타입은 명시적으로 선언할 필요가 없고 일반함수처럼 호출도 가능

     

     

    잠깐 짚고 가쟈 -

    이벤트 함수 실행 순서

    에디터 -> 첫 번째 씬 로드 -> 첫 번째 프레임 업뎃 전 -> 업뎃 -> 코루틴 -> 렌더 -> 종료

     

     

    에디터: Reset: 오브젝트에 처음 연결하거나 Reset 커맨드를 사용할 때 스크립트의 프로퍼티를 초기화하기 위해 Reset을 호출합니다.

     

    첫 번째 씬 로드:

    • Awake: 이 함수는 항상 Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출

    첫 번째 프레임 업데이트 전

    • Start

    업데이트 순서

    • FixedUpdate: FixedUpdate 는 종종 Update 보다 더 자주 호출됩니다. 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있습니다. 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생합니다. FixedUpdate 의 움직임 계산을 적용할 때 Time.deltaTime 만큼 값을 곱할 필요가 없습니다. FixedUpdate 가 프레임 속도와 관계없이 신뢰할 수있는 타이머에서 호출되기 때문입니다.
    • Update: Update 는 프레임당 한 번 호출됩니다. 프레임 업데이트를 위한 주요 작업 함수입니다.
    • LateUpdate: LateUpdate  Update 가 끝난 후 프레임당 한 번 호출됩니다. Update 에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료됩니다. LateUpdate 는 일반적으로 다음의 3인칭 카메라에 사용합니다. 캐릭터를 움직이고 Update 로 방향을 바꾸게 하는 경우 LateUpdate 에서 모든 카메라 움직임과 로테이션 계산을 수행할 수 있습니다. 이렇게 하면 카메라가 포지션을 추적하기 전에 캐릭터가 완전히 움직였는지 확인할 수 있습니다.

     

    코루틴

    • 일반적인 코루틴 업데이트는 Update 함수가 반환된 후 실행
    • yield 코루틴은 모든 Update 함수가 다음 프레임에 호출된 후 계속됩니다.
    • yield WaitForSeconds 지정한 시간이 지난 후, 모든 Update 함수가 프레임에 호출된 후 계속됩니다.
    • yield WaitForFixedUpdate 모든 FixedUpdate가 모든 스크립트에 호출된 후 계속됩니다.
    • yield WWW WWW 다운로드가 완료된 후 계속됩니다.
    • yield StartCoroutine 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료되기를 기다립니다.

    렌더링

     

    오브젝트를 파괴할 때

    • OnDestroy: 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 호출

    종료 시

     

     

     

    ✨ 개인 공부 기록용 블로그입니다. 잘못된 부분이 있을 경우 

    댓글 혹은 메일로 알려주시면 감사하겠습니다! 🤓

    '👾 Unity' 카테고리의 다른 글

    Section 1 ~ 4  (0) 2023.05.13