游戏脚本和MonoBehaviour生命周期
生活随笔
收集整理的這篇文章主要介紹了
游戏脚本和MonoBehaviour生命周期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.游戲腳本
二.調式
1.我們可以在腳本里輸出調試信息, 并在控制臺中顯示。
2.接口
(1).Debug.Log:向控制臺輸出普通信息(白色)。
(2).Debug.LogWarning:向控制臺輸出警告信息(黃色)。
(3).Debug.LogError:向控制臺輸出錯誤信息(紅色)。
三.MonoBehaviour生命周期
1.Awake(), 腳本喚醒函數。當游戲對象被創建的時候, 游戲對象綁定的腳本會在該幀內執行Awake()函數, 無論腳本是否處于激活狀態。
2.Start(), 該函數在腳本被激活的時候執行, 位于Awake()函數之后。該函數的執行同樣也是在游戲對象被創建的幀里。不同的是, 如果腳本處于不激活狀態, Start()函數是不會被執行的。
3.Update(), 只有處于激活狀態下的腳本, 都會在每一幀里調用Update()函數, 該函數也是最為常用的一個函數, 用來更新邏輯。
4.LateUpdate(), 該函數是延遲更新函數, 處于激活狀態下的腳本在每一幀里都會在Update()函數執行后調用該函數, 通常用來調整代碼執行的順序。比如玩家的角色需要一個攝像機來跟隨, 那么通常角色的移動邏輯會寫在Update()里, 而攝像機的跟隨在LateUpdate()里, 這樣可以確保在角色的位置計算完畢后, 再根據角色位置確定攝像機的位置和視角。
7.OnDestroy(), 在當前腳本銷毀時調用該函數, 可以在該函數里填寫刪除時需要處理的邏輯。
8. OnEnable(), 激活函數, 當腳本處于激活時調用。
9. OnDisable(), 當腳本被禁用時調用。
(2).enabled只是與生命周期的函數有關, 與其他函數和所有變量都沒有關系。如果腳本中不保護任何生命周期函數, enabled將沒有任何意義。
(1).在Hierarchy視圖中選中Cube游戲對象
1.UnityGUI使用一個特殊的OnGUI()函數, 在該函數中加入實現UI的腳本。
2.UnityGUI的接口
(1).GUI.xxx(), 需要自己手動填寫處于屏幕上的位置。
(2).GUILayout.xxx(),unity會自己排版。
3.UnityGUI測試函數
(1).GUILayout.Label (sting str), 標簽用于顯示文本。輸入的參數為需要顯示的文本。
(2).GUILayout.TextField (sting str), 按鈕用于出發事件。輸入的參數為在按鈕上顯示的文字。它返回一個bool值, 表示是否按下了按鈕。
(3).GUILayout.Button(sting str), 文本區域用于輸入文本。輸入的參數為顯示的文本, 返回經過用戶輸入改動后的文本。一般用參數變量接收返回值即可。
(1).在Hierarchy視圖中選中Cube游戲對象
1.雙擊Project視圖中, Script目錄下的GameManager腳本
2.使用MonoDevelop編輯器打開
二.調式
1.我們可以在腳本里輸出調試信息, 并在控制臺中顯示。
2.接口
(1).Debug.Log:向控制臺輸出普通信息(白色)。
(2).Debug.LogWarning:向控制臺輸出警告信息(黃色)。
(3).Debug.LogError:向控制臺輸出錯誤信息(紅色)。
三.MonoBehaviour生命周期
1.Awake(), 腳本喚醒函數。當游戲對象被創建的時候, 游戲對象綁定的腳本會在該幀內執行Awake()函數, 無論腳本是否處于激活狀態。
2.Start(), 該函數在腳本被激活的時候執行, 位于Awake()函數之后。該函數的執行同樣也是在游戲對象被創建的幀里。不同的是, 如果腳本處于不激活狀態, Start()函數是不會被執行的。
3.Update(), 只有處于激活狀態下的腳本, 都會在每一幀里調用Update()函數, 該函數也是最為常用的一個函數, 用來更新邏輯。
4.LateUpdate(), 該函數是延遲更新函數, 處于激活狀態下的腳本在每一幀里都會在Update()函數執行后調用該函數, 通常用來調整代碼執行的順序。比如玩家的角色需要一個攝像機來跟隨, 那么通常角色的移動邏輯會寫在Update()里, 而攝像機的跟隨在LateUpdate()里, 這樣可以確保在角色的位置計算完畢后, 再根據角色位置確定攝像機的位置和視角。
5.FixedUpdate(), 該函數用于固定更新。在游戲運行的過程中, 每一幀的處理時間是不固定的, 當我們需要固定間隔時間執行某些代碼時, 就會用到FixedUpdate()函數。在菜單欄中, 點擊”Edit” -> “Project Settings” -> “Time”菜單項, 之后在Inspector視圖里出現時間管理器, 其中”Fixed Timestep”選項用于設置FixeUpdate()的更新幀率, 更新幀率默認是0.02秒。固定更新常用于移動物體等操作, 因為固定更新每一幀調用的時間間隔是一樣的, 所以移動速度是勻速的。
7.OnDestroy(), 在當前腳本銷毀時調用該函數, 可以在該函數里填寫刪除時需要處理的邏輯。
8. OnEnable(), 激活函數, 當腳本處于激活時調用。
9. OnDisable(), 當腳本被禁用時調用。
10.所有繼承自MonoBehaviour的腳本都有一個名為enabled的bool屬性值開關。enabled對應腳本名稱左側的勾, 如我們創建的GameManager腳本:
(2).enabled只是與生命周期的函數有關, 與其他函數和所有變量都沒有關系。如果腳本中不保護任何生命周期函數, enabled將沒有任何意義。
11.生命周期代碼
using UnityEngine;public class GameManager : MonoBehaviour {private bool hasPrintUpdate = false;private bool hasPrintLateUpdate = false;private bool hasPrintFixedUpdate = false;private bool hasPrintGUI = false;void Awake(){Debug.Log ("---Awake---");}void OnEnable(){Debug.Log ("---OnEnable---");}void Start () {Debug.Log ("---Start---");}void FixedUpdate(){if (!hasPrintFixedUpdate){hasPrintFixedUpdate = true;Debug.Log ("---FixedUpdate---");}}void Update (){if(!hasPrintUpdate){hasPrintUpdate = true;Debug.Log ("---Update---");}}void LateUpdate(){if (!hasPrintLateUpdate) {hasPrintLateUpdate = true;Debug.Log ("---LateUpdate---");}}void OnGUI(){if (!hasPrintGUI) {hasPrintGUI = true;Debug.Log ("---OnGUI---");}}void OnDisable(){Debug.Log ("---OnDisable---");}void OnDestroy(){Debug.Log ("---OnDestroy---");}} 12.綁定GameManager腳本到Cube游戲對象上(1).在Hierarchy視圖中選中Cube游戲對象
(2).在Project視圖中,鼠標左鍵拖拽點GameManager腳本到Inspector視圖中
(3).運行腳本,控制臺打印
1.UnityGUI使用一個特殊的OnGUI()函數, 在該函數中加入實現UI的腳本。
2.UnityGUI的接口
(1).GUI.xxx(), 需要自己手動填寫處于屏幕上的位置。
(2).GUILayout.xxx(),unity會自己排版。
3.UnityGUI測試函數
(1).GUILayout.Label (sting str), 標簽用于顯示文本。輸入的參數為需要顯示的文本。
(2).GUILayout.TextField (sting str), 按鈕用于出發事件。輸入的參數為在按鈕上顯示的文字。它返回一個bool值, 表示是否按下了按鈕。
(3).GUILayout.Button(sting str), 文本區域用于輸入文本。輸入的參數為顯示的文本, 返回經過用戶輸入改動后的文本。一般用參數變量接收返回值即可。
4.UseGUI實例
using UnityEngine;public class UseGUI : MonoBehaviour {private string text = "";private string myName = "";void OnGUI(){GUILayout.Label ("please input your name:");text = GUILayout.TextField (text);if(GUILayout.Button("submit")){myName = text;text = string.Empty;}if(!string.IsNullOrEmpty(myName)){GUILayout.Label ("submit name success, name: " + myName);}} } 5.綁定GameManager腳本到Cube游戲對象上(1).在Hierarchy視圖中選中Cube游戲對象
(2).在Inspector視圖中, 點擊Add Component按鈕, 搜索UseGUI腳本進行綁定
總結
以上是生活随笔為你收集整理的游戏脚本和MonoBehaviour生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity预制体
- 下一篇: 使用脚本创建查找修改销毁游戏对象