C#/수업내용

2020.05.08. 수업내용 - Unity Monobehaviour LifeCycle

dev_sr 2020. 5. 10. 22:48

1. 순서

Awake -> OnEnable -> Start -> Update -> OnDisable -> OnDestroy

 

*OnEnable - 활성화 되있을 때마다 호출
*OnDisable - 비활성화 되있을 때마다 호출

 

2. GameObject 의 App 컴포넌트를 비활성화시

-Awake만 호출

-OnEnable부터 OnDestroy까지 호출되지 않는다.

 

3. GameObject 의 App 컴포넌트가 활성화시

-Awake부터 OnDestroy 호출

-Start와 Update는 App컴포넌트가 활성화 될 때만 호출된다(start는 한번, update는 매 프레임마다)

 

4. GameObject가 비활성화시 

-App 컴포넌트 활성화 여부와 관계없이 Awake함수부터 호출되지 않는다.

5. 플레이를 멈출 경우(일시정지x)
- App컴포넌트의 OnDestroy함수 호출됨.(메모리에서 사라졌을때-인스턴스가 사라졌을때)
OnDestroy는 이전에 활성화 되어있던 게임 오브젝트 상에서만 호출
비활성화 된 게임오브젝트를 제거했을 경우 onDestroy 함수 호출 안 됨
게임오브젝트는 활성화, 컴포넌트 비활성화 -> 컴포넌트를 제거-->OnDestroy 호출됨

 

6. OnDestroy

Object.Destory
- 씬 종료
- 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 이 함수 호출
- 오브젝트 활성화, 컴포넌트 활성화    Awake 부터 ondestroy까지 모두 호출
- 오브젝트 활성화, 컴포넌트 비활성화   Awake => ondestroy   
- 오브젝트 비활성화, 컴포넌트 비활성화 x

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class App : MonoBehaviour
{
 
 
    //인스턴스화 직후 한번만 실행 (App 컴포넌트가 비활성화 되면 Awake만 나타난다)
    private void Awake()
    {
        //this.btn.onClick.AddListener(() =>
        //{
 
        //    //처음부터 비활성화 된 Test게임 오브젝트를 제거
        //    //Object.Destroy(this.test.gameObject);
 
        //    //처음부터 활성화 된 Test게임 오브젝트의 비활성화된 test 컴포넌트 제거
        //    Object.Destroy(this.test);
 
        //});
 
        Debug.Log("App: Awake");
    }
 
    //활성화되면 호출
    private void OnEnable()
    {
        Debug.Log("App: OnEnable");
    }
 
   
    //인스턴스가 활성화된 후 한번만 실행
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("App: Start");
       
    }
 
    //매 프레임마다
    // Update is called once per frame
    void Update()
    {
        Debug.Log("App: Update");
    }
 
    //비활성화될 때마다
    private void OnDisable()
    {
        Debug.Log("App: OnDisable");
    }
 
 
    //젤 마지막에
    private void OnDestroy()
    {
        Debug.Log("onDestory");
    }
}