一起看看MonoBehavior內部事件執行順序
寫在最前面
或許對於大部分Unity3D程式設計師來說,第一次接觸指令碼編寫的時候都是從MonoBehavior開始的。MonoBehavior是Uniy3d指令碼編寫核心的類之一, 它預先定義好了很多事件,並且這些事件按照預先定義好順序執行。瞭解MonoBehavior提供的這些事件的執行順序,是我們進一步提高腳步程式設計和了解Unity3D內部邏輯的必要一步。我們先從MonoBehavior提供的事件說起。
MonoBehavior都提供了什麼事件
MonoBehavior提供的事件從編輯器到遊戲結束都有涉及。下面列舉一些常用的,更詳列表可以參照 這個頁面。
與編輯相關
名稱 | 註釋 |
---|---|
Reset | Reset to default values. |
Update相關
名稱 | 註釋 |
---|---|
FixedUpdate | This function is called every fixed framerate frame, if the MonoBehaviour is enabled. |
Update | Update is called every frame, if the MonoBehaviour is enabled. |
LateUpdate | LateUpdate is called every frame, if the Behaviour is enabled. |
生命週期相關
名稱 | 註釋 |
---|---|
Awake | Awake is called when the script instance is being loaded. |
OnEnable | This function is called when the object becomes enabled and active. |
OnDisable | This function is called when the behaviour becomes disabled () or inactive. |
OnDestroy | This function is called when the MonoBehaviour will be destroyed. |
OnApplicationFocus | Sent to all game objects when the player gets or loses focus. |
OnApplicationPause | Sent to all game objects when the player pauses. |
OnApplicationQuit | Sent to all game objects before the application is quit. |
Start | Start is called on the frame when a script is enabled just before any of the Update methods is called the first time. |
物理系統相關
名稱 | 註釋 |
---|---|
OnCollisionEnter | OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider. |
OnCollisionStay | OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider. |
OnCollisionExit | OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider. |
OnCollisionEnter2D | Sent when an incoming collider makes contact with this object’s collider (2D physics only). |
OnCollisionStay2D | Sent each frame where a collider on another object is touching this object’s collider (2D physics only). |
OnCollisionExit2D | Sent when a collider on another object stops touching this object’s collider (2D physics only). |
OnTriggerEnter | OnTriggerEnter is called when the Collider other enters the trigger. |
OnTriggerStay | OnTriggerStay is called once per frame for every Collider other that is touching the trigger. |
OnTriggerExit | OnTriggerExit is called when the Collider other has stopped touching the trigger. |
OnTriggerEnter2D | Sent when another object enters a trigger collider attached to this object (2D physics only). |
OnTriggerStay2D | Sent each frame where another object is within a trigger collider attached to this object (2D physics only). |
OnTriggerExit2D | Sent when another object leaves a trigger collider attached to this object (2D physics only). |
輸入系統相關
名稱 | 註釋 |
---|---|
OnMouseDown | OnMouseDown is called when the user has pressed the mouse button while over the GUIElement or Collider. |
OnMouseOver | OnMouseOver is called every frame while the mouse is over the GUIElement or Collider. |
OnMouseUp | OnMouseUp is called when the user has released the mouse button. |
OnMouseDrag | OnMouseDrag is called when the user has clicked on a GUIElement or Collider and is still holding down the mouse. |
OnMouseEnter | OnMouseEnter is called when the mouse entered the GUIElement or Collider. |
OnMouseExit | OnMouseExit is called when the mouse is not any longer over the GUIElement or Collider. |
OnMouseUpAsButton | OnMouseUpAsButton is only called when the mouse is released over the same GUIElement or Collider as it was pressed. |
渲染相關
名稱 | 註釋 |
---|---|
OnPreCull | OnPreCull is called before a camera culls the scene. |
OnBecameVisible | OnBecameVisible is called when the renderer became visible by any camera. |
OnBecameInvisible | OnBecameInvisible is called when the renderer is no longer visible by any camera. |
OnWillRenderObject | OnWillRenderObject is called once for each camera if the object is visible. |
OnPreRender | OnPreRender is called before a camera starts rendering the scene. |
OnRenderObject | OnRenderObject is called after camera has rendered the scene. |
OnPostRender | OnPostRender is called after a camera finished rendering the scene. |
OnRenderImage | OnRenderImage is called after all rendering is complete to render image. |
OnGUI | OnGUI is called for rendering and handling GUI events. |
OnDrawGizmos | Implement OnDrawGizmos if you want to draw gizmos that are also pickable and always drawn. |
用圖來表示MonoBehavior事件執行順序
總結:
- 首次載入場景時執行Awake()
- Start()只在第一幀才執行, Start()在Awake()之後執行
- Update的執行順序是: FixedUpdate() -> Update() -> LateUpdate()
- 以每一幀的Update()事件作分界線:
- Update()之前:物理系統和輸入系統相關事件先執行,如OnTriggerXXX和OnMouseXXX事件。此處XXX是佔位符,如OnTriggerXXX可以代表OnTriggerEnter或者OnTriggerExit
- Update()之後:場景渲染和協程,如OnRenderImage()和yield WWW語句
- 協程中,除了WaitForFixedUpdate是在FixedUpdate之後,Update之前執行,其他的都是在Update之後,場景渲染前執行
- GUI事件OnGUI在場景渲染完之後執行
- 當物件被銷燬時執行OnDestory()事件
- 當遊戲退出時執行OnApplicationQuit()
- OnEnable()和OnDisable()
- OnEnable()只有在Object是Active的狀態下才能用,一般是Object被初始化或者Object從disable到active過程中被呼叫
- OnDisable()只有到Object從active到disable狀態才被呼叫
相關推薦
一起看看MonoBehavior內部事件執行順序
寫在最前面 或許對於大部分Unity3D程式設計師來說,第一次接觸指令碼編寫的時候都是從MonoBehavior開始的。MonoBehavior是Uniy3d指令碼編寫核心的類之一, 它預先定義好了很多事件,並且這些事件按照預先定義好順序執行。瞭解MonoBehavior提供的這些事件的執行順序,是我們進
jquery的AJAX中各個事件執行順序
.ajax star ajaxstop jquery ajax let start 執行 .com jquery的AJAX中各個事件執行順序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.aja
JS事件執行順序理解以及 e.stopPropagation()
先捕獲(document-往下)->後執行(執行)->冒泡(具體到不具體); addEventListener 第三個引數 預設false (false 是冒泡階段執行) true 是捕獲階段執行 如果是多個元素巢狀的情況
WinForm 生命周期, WinForm 事件執行順序
ext ech 執行 tin focus hand got 生命周期 text 1.窗體啟動: Control.HandleCreatedControl.BindingContextChangedForm.LoadControl.VisibleChangedForm.Act
JAVA類初始化及例項初始化時內部的執行順序
記得剛畢業時,應聘JAVA開發崗位,做招聘單位的筆試時,經常有JAVA類內部的執行順序的考察,就是讓你寫出某個程式的列印結果的順序,現在整理一下。 如果一個類,有構造器,普通塊,靜態塊,那該類初始化時,它的執行順序如何呢?如果它有父類,並且它的父
遞迴函式內部的執行順序
#include <stdio.h> void fun(int n) { printf("1th - Level: %d Address: %d\n", n, &
Global事件執行順序
Global.asax 檔案,有時候叫做 ASP.NET 應用程式檔案,提供了一種在一箇中心位置響應應用程式級或模組級事件的方法。你可以使用這個檔案實現應用程式安全性以及其它一些任務。下面讓我們詳細看一下如何在應用程式開發工作中使用這個檔案。概述Global.asax 位
JS事件機制:事件繫結、事件監聽、事件委託(代理)和事件執行順序總結
JS 對於使用者的操作做出響應,就必須對DOM元素繫結事件處理函式 事件繫結 1、在DMO中直接繫結事件 <input type="button" value="click me"
HttpApplication事件執行順序
HttpApplication 類的例項(是不是想起Global檔案了?)是在 ASP.NET 基礎結構中建立的,而不是由使用者直接建立的。HttpApplication 類的一個例項在其生存期內被用於處理多個請求,但它一次只能處理一個請求。這樣,成員變數才可用於儲存針對每
WinFrom DataGridView 常用事件執行順序
When moving from cell to cell (in the same row) you get: 1) Cell Leave (old cell) 2) Cell Validating/ed (old cell) 3) Cell Enter (new cell
VB.NET中8個主要的事件執行順序
VB.NET幾個主要的事件執行順序: >>>顯示窗體過程中 new HandleCreated Load Activated '這個事件以後可以被觸發多次,每當使用者啟用窗體是都會觸發此事件 >>>關閉窗體過程中 Closi
aspx 的頁面事件執行順序
aspx頁面生命週期事件 Page_PreInit 使用IsPostBack屬性確定是否是第一次處理該頁;建立動態控制元件;動態設定Theme屬性;讀取或設定配置檔案屬性值等Page_Init 讀取或初始化控制元件屬性Page_Preload 事件在所有回發資料處理之後但在
滑鼠點選 INPUT 元素後預設觸發的事件執行順序
所有瀏覽器中,當用戶通過滑鼠操作觸發 click 事件時,事件觸發順序: 1、MouseDown 事件 2、Focus 事件 3、MouseUp 事件 4、Click 事件 可點選測試網頁 測試程式碼如下: <script> w
網龍暑期訓練營第一週:MonoBehavior函式執行順序、碰撞與滑鼠事件
本文通過實驗梳理第一週訓練營視訊中所提到的知識點,便於大家複習鞏固,也便於自己日後查閱。視訊內容主要分為三個部分: MonoBehavior的執行順序 碰撞事件 滑鼠事件 配合視訊使用效果更佳。 1.MonoBehavior的執行順序
Unity3D事件函數的執行順序
攝像機 觸發 var med lac 視圖 專業 chains war In Unity scripting, there are a number of event functions that get executed in a predetermined order
JS中事件的執行順序和AJAX的異步
容易 jquery 博客 出現問題 同步 內容 img 留言 加載 之前了解過異步和同步,知道同步是順序執行,異步是同時執行,但是沒有遇到過這種情況,不是很理解,這兩天做項目突然遇到了,對這有了一個初步的認識。廢話不多說,直接上要求。 1.項目要求:外部調用x
觀察者模式中多執行緒執行訂閱事件並順序執行的問題
對事件釋出訂閱模式中啟動執行緒執行操作,但又要保證執行緒順序執行的一些思考和實踐,在開發過程中,經常會遇到需要使用事件來觸發方法執行的情況,比如CS中按鈕的點選事件,滑鼠移動事件,鍵盤監聽事件等等,有時候需要執行比較耗時的任務,但並不希望阻塞主執
Unity5指令碼事件函式及其執行順序
指令碼函式 編輯器相關函式 初始化函式 物理相關函式 輸入相關函式 遊戲邏輯相關函式
form表單中onclick事件和onsubmit事件的執行順序
說來很慚愧,今天因為form表單的一個小問題困擾了一下午。雖然最終得以解決,但花費的時間實在是令人汗顏,現在總結一下遇到的問題。 先說一下背景,之前幫一個朋友的專案寫了一個原生js的表單驗證,今天
關於Unity物理事件的執行順序的最新理解
物體A: public class A:{ B b; void FixedUpdate(){ if(input.GetKeyDow(Keycode.I)) { &nb