[Unity3D]MonoBehaviour函數介紹


原文地址: http://www.cocos2dev.com/?p=486

Unity中的腳本都是繼承自MonoBehaviour。

一、基礎函數:

創建腳本就默認的update、start方法:(這些官方的文檔都是有的)

Start:Update函數第一次運行前調用,一般用於游戲對象的初始化。比如GetComPonent之類。

Update:每幀調用;一般用於更新場景和狀態,物理相關不建議在此處處理。

Awake:腳本實例對象被創建時調用,也可以用於游戲對象的初始化,但是Awake是在所有腳本的Start之前執行。

FixedUpdate:固定間隔執行,一般用於物理狀態更新。

LateUpdate:每幀執行,在Update之后。一般和攝像機有關的狀態放在這里處理。

 

現在我來簡單測試下:我在場景中添加了兩個Cube,分別添加了Script1,Script2,下面是執行log,可以看到Awake是在所有腳本之前調用的。

 

11

 

二、事件響應函數:

MonoBehaviour中的事件響應函數都是已On開頭的,比如:鼠標事件,腳本激活、銷毀,碰撞等。

OnApplicationFocus:當玩家獲得或失去焦點時發送給所有游戲物體。可以作為協同程序,在函數中使用yield語句即可

OnApplicationPause:當玩家暫停時發送到所有的游戲物體。可以作為協同程序,在函數中使用yield語句即可。

OnApplicationQuit:在應用退出之前發送給所有的游戲物體。當用戶停止運行模式時在編輯器中調用。當web被關閉時在網絡播放器中被調用。

OnBecameInvisible:當renderer(渲染器)在任何相機上都不可見時調用OnBecameInvisible。

OnBecameVisible:當renderer(渲染器)在任何相機上可見時調用OnBecameVisible。

OnCollisionEnter:當此collider/rigidbody與另一個rigidbody/collider接觸時調用。

OnCollisionExit:當此collider/rigidbody停止觸發另一個rigidbody/collider時。

OnCollisionStay:當此collider/rigidbody觸發另一個rigidbody/collider時,OnCollisionStay將會在每一幀被調用。

OnConnectedToServer:當你成功連接到服務器時,在客戶端調用。

OnDisconnectedFromServer:失去連接或從服務器端斷開時在客戶端調用。

OnFailedToConnectToMasterServer:當連接主服務器出現問題時在客戶端或服務器端調用。

OnControllerColliderHit:在移動的時,當controller碰撞到collider時OnControllerColliderHit被調用。

OnDestroy:腳本銷毀時調用。

OnDisable:對象禁用或者取消激活時調用。

OnEnable:對象變為可用或激活狀態時此函數被調用。

OnDrawGizmosSelected:如果想在物體被選中時繪制gizmos,執行這個函數。

OnGUI:渲染和處理GUI事件時調用。

OnJointBreak:當附在同一對象上的關節被斷開時調用。

OnLevelWasLoaded:一個新關卡被載入時此函數被調用。

OnMouseDown、OnMouseDrag、OnMouseEnter、OnMouseExit、OnMouseOver、OnMouseUp:鼠標事件。

OnMouseUpAsButton:只有當鼠標在同一個GUIElement或Collider按下,在釋放時調用。

OnTriggerEnter:當Collider(碰撞體)進入trigger(觸發器)時調用OnTriggerEnter。

OnTriggerExit:當Collider(碰撞體)停止觸發trigger(觸發器)時調用OnTriggerExit。

OnTriggerStay:當碰撞體接觸觸發器時,OnTriggerStay將在每一幀被調用。

三、默認組件

組件對應的變量名是組件名的小寫。

Transform:對象的位置,角度,縮放。變量名:transform

Rigidbody:剛體屬性。

Render:渲染物體模型。

Light:燈光屬性。

Camera:相機屬性。

Collider:碰撞體屬性。

Animation:動畫屬性。

Audio:聲音屬性。

四、組件獲取函數

獲取組件的方法由於比較耗時,所以如果你在update修改transform的話,一般可以先在Start中獲取這個組件的引用,然后在update中使用引用去修改。

比如獲取上面例子cube1的script1腳本:

[c-sharp]Script1 spt1 = GetComponent<Script1>( );[/c-sharp]

下面是獲取組件的函數:

GetComponent:獲取組件。

GetComponents:獲取組件列表。

GetComponentInChildren:返回Type類型組件,在GameObject或它的任何子物體使用深度優先搜索,僅返回激活的組件。

GetComponentsInChildren:在GameObject或任何它的子物體,返回全部Type類型組件。

五、獲取場景中的游戲對象

同樣和獲取組件一樣,該方法比較費時,一般在Start中獲取引用。

[c-sharp]

GameObject cube1 = GameObject.Find("Cube1");

GameObject cube1 = GameObject.FindWithTag("tag_cube1");

[/c-sharp]

除了上面的方法,也可以使用public對象,直接使用面板拖拽賦值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM