-
델리게이트 & 코루틴 파헤쳐보기 & 실행 순서👾 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