비활성 프리팹을 Instantiate 했을 경우
ㄴ 프리팹 내부에 스크립트는 Awake도 실행되지 않는다.(액티브를 대기)
활성프리팹을 Instantiate 하고 다음 줄에서 SetActive(false); 실행했을 경우
ㄴ Awake와 OnEnable이 실행되고 Start는 실행되지 않는다.
*라이프사이클 메서드에 프레임로그를 확인*
테스터의 Awake,OnEnable타임에 프리팹을 Instantiate한 경우
ㄴ Awake, OnEnable는 0프레임, Start는 1프레임에 호출되었다.
테스터의 Start타임에 프리팹을 Instantiate한 경우
ㄴAwake, OnEnable, Start가 동일하게 1프레임에서 호출되었다.
테스터의 Update타임에 프리팹을 Instantiate한 경우
ㄴ첫번째 프레임에 생성된 객체의 Update가 두번째 프레임에 생성된 객체의 Start보다 빠르게 작동했다.(?!!!)
ㄴ5번째 프레임 동작을 보면 신규Awake -> 신규 OnEable -> 기존 객체 4개 업데이트문 호출 -> 신규 Start 순으로 호출
테스터의 Awake타임에 활성프리팹과 비활성프리팹을 Instantiate한 뒤 경우 Start타임에 셋엑티브를 켠 경우
ㄴ0프레임 활성프리팹 Awake OnEable 호출 -> 1프레임 비활성프리펩 Awake OnEable호출-> Start함수 호출(정상작동)
테스터의 Awake타임에 활성프리팹과 비활성프리팹을 Instantiate한 뒤 경우 Update타임에 셋엑티브를 켠 경우
ㄴ 0프레임 활성프리팹 Awake OnEable 호출 -> 1프레임 활성프리팹 Start 호출, ->1프레임 비활성프레임 Awake OnEable 호출 -> 1프레임 활성프리팹 Update호출 -> 1프레임 비활성프리팹 Start호출
*FixedUpdate LateUpdata도 로그작업 추가*
테스터의 Awake타임에 활성프리팹(a객체)과 비활성프리팹(b객체)을 Instantiate한 뒤 경우 OnEnable타임에 셋엑티브를 켠 경우
ㄴ메뉴얼 순서대로 작동함
(why)테스터의 Awake타임에 활성프리팹(a객체)과 비활성프리팹(b객체)을 Instantiate한 뒤 경우 Start타임에 셋엑티브를 켠 경우
ㄴ0프레임 a.Awake a.OnEable 호출 -> 1프레임 b.Awake b.OnEable호출->a.Start호출-> a.FixedUpdate호출?????! ->b.Start함수 호출-> a.Update호출, b.Update호출
ㄴ b의 start함수는 a의 fixedUpdate다음 호출되었으며 b는 fixedUpdate가 한번 생략되고 Update부터 시작하였다.
테스터의 Awake타임에 활성프리팹(a객체)과 비활성프리팹(b객체)을 Instantiate한 뒤 경우 fixedUpdate 타임에 셋엑티브를 켠 경우
ㄴ ㄴ0프레임 a.Awake a.OnEable 호출 -> a.Start호출-> 1프레임 b.Awake b.OnEable호출-> a.FixedUpdate호출 ->b.Start함수 호출-> a.Update호출, b.Update호출
ㄴ b의 start함수는 a의 fixedUpdate다음 호출되었으며 b는 fixedUpdate가 한번 생략되고 Update부터 시작하였다.
테스터의 Awake타임에 활성프리팹(a객체)과 비활성프리팹(b객체)을 Instantiate한 뒤 경우 Update 타임에 셋엑티브를 켠 경우
ㄴ 0프레임 a.Awake a.OnEable 호출 -> a.Start호출-> a.FixedUpdate호출 -> 1프레임 b.Awake b.OnEable호출-> a.Update호출 -> b.Start함수 호출->a.lateUpdate호출 b.lateUpdate호출
ㄴ b의 start함수는 a의 Update다음 호출되었으며 b는 fixedUpdate,Update가 한번 생략되고 lateUpdate부터 시작하였다.
결론
1. Instantiate 메서드에 프리팹의 셋엑티브 상태에 따라 Awake와 OnEnable을 수동으로 호출하는 동작이 포함되어있다.
2. 비활성화 프리팹이 활성화되는 순간 Awake와 OnEnable은 호출된다.
-> Awake와 OnEnable은 즉시 함수이지 라이프 사이클 주기함수가 아니다. 다른 객체와의 순서가 보장되지 않는다.
3. Start는 라이프사이클에 끼어들어가며 시작되지만 언제 호출되는 지 알수 없다. 어떤 규칙으로 시간이 지난다음 들어가는지도 알 수 없다.
실험을 진행한 유니티 버전 : 2022.3.17f1
'소프트웨어 공학 > 코딩' 카테고리의 다른 글
| Unity] Start함수 정밀 분석 완료 (0) | 2025.07.25 |
|---|---|
| Unity] Start함수의 정밀분석 (1) | 2025.07.25 |
| CS] 메모리, 배열vs리스트, 커널, 코어와스레드, 멀티스레딩과 비동기 (2) | 2025.07.23 |
| 유니티] 어셈블리 정의 asmdef파일 (1) | 2025.06.16 |
| 기술 학습자료 링크 (2) | 2025.06.05 |