UnityMono物件的生命週期

2021-09-25 14:14:56 字數 3869 閱讀 8095

只會被呼叫一次,在start方法之前被呼叫! 主要用於字段值的初始化工作,禁用指令碼,建立遊戲物件,或者 resources.load(prefab) 物件

只執行一次,在awake方法執行結束後執行,但在update方法執行前執行, 主要用於程式ui的初始化操作,比如獲取遊戲物件或者元件

指令碼可用時被呼叫、如果指令碼是不可用的,將不會被呼叫!

如果有三個物件,a1 > a2 > a3 (父子級的關係),掛有三個指令碼s1,s2,s3,三個指令碼都有這些方法

awake,start,onenable,ondisable,update
那麼unity 執行順序為

awake1

onenable1

awake2

onenable2

awake3

onenable3

start1

start2

start3

update1

update2

update3

如果在指令碼s2的awake方法中設定指令碼s1不可用(s1.enabled=false),那麼指令碼的執行結果為:

awake1

onenable1

ondisable1

awake2

onenable2

awake3

onenable3

start2

start3

update2

update3

如果在指令碼s2的awake方法中設定指令碼s3不可用(s3.enabled=false),那麼指令碼的執行結果為: 

awake1

onenable1

awake2

onenable2

awake3

start1

start2

update1

update2

關鍵是看設定指令碼不可用的位置:

如果在父級的awake方法裡面設定子級的指令碼不可用

那麼僅僅只會執行子級裡面的awake方法,當子級被啟用後(enabled=true),會先執行onenable,然後執行start方法,update等幀序列方法都會開始執行

如果在父級的start方法裡面設定子級的指令碼不可用

那麼會執行子集裡面的awake,onenable和ondisable方法,當子級被啟用後(enabled=true),會先執行onenable,然後執行start方法,update等幀序列方法也都會開始執行

如果在子級的awake方法裡面設定父級的指令碼不可用

那麼會執行父級裡面的awake,onenable和ondisable方法,當父級被啟用後(enabled=true),會先執行onenable,然後執行start方法,update等幀序列方法都會開始執行

如果在子級的start方法裡面設定父級的指令碼不可用

那麼會執行父集裡面的awake,onenable,start和ondisable方法,當父級被啟用後(enabled=true),會先執行onenable,update等幀序列方法也都會開始執行

如果被啟用的指令碼之前沒有呼叫start方法,那麼當此指令碼被啟用後,會呼叫一次start方法!

如果指令碼被設定為不可用將會被執行,程式結束時也會執行一次!

onenableondisable只受指令碼的可用狀態的影響(enabled),而onbecamevisibleonbecameinvisible是受物件是否可見的影響!即使指令碼設定為不可用,onbecamevisibleonbecameinvisible也會被執行,主要是看物件是否在場景中顯示了!

每一幀執行的,會受到機器效能的影響  每一幀的間隔時間並不相同(除錯發現,update是先於ongui執行的,且執行一次update之後,會執行兩次ongui)

固定時間更新,每隔一定的時間固定重新整理一次 ,不受機器效能影響 ,可以在snapsetting中設定工程的fixedupdate 間隔時間

先執行update,然後才去執行lateupdate(update方法執行完,必定接著執行lateupdate,可以用來等待update的繪製,如果現在有100個指令碼,分別有100個 update()函式,其中只有乙個lateupdate,那麼在同一幀中,等待100個update()執行完後,才執行這乙個lateupdate()。

在這裡面進行gui的繪製,且gui是每幀擦除重繪的!僅僅只是繪製!沒有生命週期的概念!所有關於繪製gui的**,都要直接或者間接地寫到ongui方法中!

當前指令碼銷毀時呼叫

如果指令碼被設定為不可用將會被執行,程式結束時也會執行一次!

onenableondisable只受指令碼的可用狀態的影響(enabled),而onbecamevisibleonbecameinvisible是受物件是否可見的影響!即使指令碼設定為不可用,onbecamevisibleonbecameinvisible也會被執行,主要是看物件是否在場景中顯示了!

當一開始載入乙個物件時:

game

scene

onbecameinvisible

onbecameinvisible

game 顯示

scene 顯示

onbecameinvisible 不執行

onbecameinvisible 執行

game 不顯示

scene 不顯示

onbecameinvisible 不執行

onbecamevisible 不執行

game 不顯示

scene 顯示

onbecameinvisible 不執行

onbecamevisible 執行

game 顯示

scene 不顯示

onbecameinvisible 不執行

onbecamevisible 執行

小結:只要game和scene中有乙個顯示了,onbecamevisible 就會執行!而onbecameinvisible 一直都不會執行

當移動物件時:

game 和 scene 物件必須在兩個場景中同時消失 onbecameinvisible 才執行, scene 和 game 只要有一方進入了場景 onbecamevisible 就執行了.

假如現在有三個父子物件:a1 > a2 > a3 ,unity執行指令碼的順序是從上往下執行,先執行父節點上的指令碼,再去執行子節點的指令碼,子節點上如果有多個指令碼,那麼也是自上而下的順序執行,對應各有乙個指令碼:s1,s2,s3,且這三個指令碼**都一樣,都有awake 、start、update、lateupdate、fixupdate,執行程式時會把s1,s2,s3中的awake方法組成一組,把start方法組成一組,把update方法組成一組,把lateupdate方法組成一組,把fixupdate方法組成一組,把awake方法全執行完,再去執行start,fixupdate,update,lateupdate的**:執行順序如下:(onenable是個例外)

awak1 awak2 awak3

start1 start2 start3

fixupdate1 fixupdate2 fixupdate3

update1 update2 update3

lateupdate1 lateupdate2 lateupdate3

Spring框架中的Bean物件的生命週期

從書上可知,spring框架中bean物件有它的生命週期,還包括bean的銷毀。在beanfacotory中獲取的例項是singleton,beanfactory預設每乙個引用來維護乙個例項,對單執行程式來講,並不會有什麼問題,但是多程式來說,就需要你注意執行的安全,可以設定每次在beanfacot...

uiviewcontroller的生命週期

uiviewcontroller是ios程式中的乙個重要組成部分,扮演者乙個大管家的身份,管理著程式中的眾多檢視 何時載入view,載入的原則是什麼,檢視何時消失等問題,文件中講的都很詳細。controller的view最好在需要顯示時再去載入,並且在系統發出記憶體警告時釋放不必要的view及相關的...

UIViewController的生命週期

uiviewcontroller的生命週期 1.uiviewcontroller uiviewcontroller是ios頂層檢視的載體及控制器,使用者與程式介面的互動都是由uiviewcontroller來控制的 uiviewcontroller管理uiview的生命週期及資源的載入與釋放 uiv...