Awake() v.s. Start() v.s. Update() v.s. FixedUpdate() v.s. LateUpdate()

Awake() v.s. Start() v.s. Update() v.s. FixedUpdate()

 Update() , FixedUpdate() , LateUpdate() 為不斷執行的函數

Awake(),Start()為一次執行的函數

細節稍後做解釋:


流程:

大致如下

Awake()->Start()->FixedUpdate()

Awake()->Start()->Update()->LateUpdate()


函數介紹:

我只說正常情況下,所謂的正常情況是沒有執行續中斷或例外被拋出或該物件被設定為enable或disable等造成程式碼無法以正常程序執行。

程式語言C/C++/C#管理程式中函數呼叫的方式很深,用到堆疊概念,若不懂得可以去google一下或修C++之類的課程,我稍微講解一下。若沒興趣可以跳過,直接往下看。

程式語言C/C++/C#管理函數呼叫的方式 (programmingconception.blogspot.com)


執行續概念很深,用到CPU的底層知識,若不懂得可以去google一下或修作業系統之類的課程,我稍微講解一下。若沒興趣可以跳過,直接往下看。

Thread(執行續) (programmingconception.blogspot.com)




Awake():

void Awake(){//一次性程式碼}

當該腳本(Script)被執行時,Awake()會先被呼叫

Start():

void Start(){//一次性程式碼}

當該腳本(Script)被執行時,Awake()會先被呼叫,再呼叫Start()


Update():

void Update(){//無限執行程式碼}

當該腳本(Script)被執行時,Start()被呼叫後,Update()會被呼叫,當執行完LateUpate()函數後過一禎(per frame),Update()又會被呼叫


FixedUpdate():

void FixedUpdate(){//無限執行程式碼}

當該腳本(Script)被執行時,Start()執行完,每過timeStep秒FixedUpdate()會被呼叫一次


LateUpdate():

void LateUpdate(){//無限執行程式碼}

當該腳本(Script)被執行時,Update()一執行完,LateUpdate()馬上會被呼叫


總結:

當腳本被執行時,先呼叫Awake()再呼叫Start(),每禎後呼叫Update(),每個timestep後呼叫FixedUpdate(),每個腳本的Update()被執行完十去呼叫LateUpdate()。

[NOTE]

(1)timestep是可以被設定的。
在我用Unity 2020.3.12f1版中,我透過Unity中的edit->project setting->Time設定timestep這個屬性。
按了edit->project setting工具列後應該要跳出如下視窗。



其他屬性也可以在這個視窗設定。

(2)注意,若不是用Unity 2020.3.12f1版可能是在Unity中的edit->setting->Time中

網路上有的文章說是在Unity中的edit->setting->Time中設定但我的沒有edit->setting這個選項,所以我做這樣的推論。

Comments

Popular posts from this blog

GameObject.SetActive() v.s. GameObject.active

output message to Unity Console - Debug.Log() v.s. Debug.LogWarning() v.s. Debug.LogError() v.s. print()