游戏脚本和MonoBehaviour生命周期
1.雙擊Project視圖中, Script目錄下的GameManager腳本
2.使用MonoDevelop編輯器打開(kāi)
二.調(diào)式
1.我們可以在腳本里輸出調(diào)試信息, 并在控制臺(tái)中顯示。
2.接口
(1).Debug.Log:向控制臺(tái)輸出普通信息(白色)。
(2).Debug.LogWarning:向控制臺(tái)輸出警告信息(黃色)。
(3).Debug.LogError:向控制臺(tái)輸出錯(cuò)誤信息(紅色)。
三.MonoBehaviour生命周期
1.Awake(), 腳本喚醒函數(shù)。當(dāng)游戲?qū)ο蟊粍?chuàng)建的時(shí)候, 游戲?qū)ο蠼壎ǖ哪_本會(huì)在該幀內(nèi)執(zhí)行Awake()函數(shù), 無(wú)論腳本是否處于激活狀態(tài)。
2.Start(), 該函數(shù)在腳本被激活的時(shí)候執(zhí)行, 位于A(yíng)wake()函數(shù)之后。該函數(shù)的執(zhí)行同樣也是在游戲?qū)ο蟊粍?chuàng)建的幀里。不同的是, 如果腳本處于不激活狀態(tài), Start()函數(shù)是不會(huì)被執(zhí)行的。
3.Update(), 只有處于激活狀態(tài)下的腳本, 都會(huì)在每一幀里調(diào)用Update()函數(shù), 該函數(shù)也是最為常用的一個(gè)函數(shù), 用來(lái)更新邏輯。
4.LateUpdate(), 該函數(shù)是延遲更新函數(shù), 處于激活狀態(tài)下的腳本在每一幀里都會(huì)在Update()函數(shù)執(zhí)行后調(diào)用該函數(shù), 通常用來(lái)調(diào)整代碼執(zhí)行的順序。比如玩家的角色需要一個(gè)攝像機(jī)來(lái)跟隨, 那么通常角色的移動(dòng)邏輯會(huì)寫(xiě)在Update()里, 而攝像機(jī)的跟隨在LateUpdate()里, 這樣可以確保在角色的位置計(jì)算完畢后, 再根據(jù)角色位置確定攝像機(jī)的位置和視角。
5.FixedUpdate(), 該函數(shù)用于固定更新。在游戲運(yùn)行的過(guò)程中, 每一幀的處理時(shí)間是不固定的, 當(dāng)我們需要固定間隔時(shí)間執(zhí)行某些代碼時(shí), 就會(huì)用到FixedUpdate()函數(shù)。在菜單欄中, 點(diǎn)擊”Edit” -> “Project Settings” -> “Time”菜單項(xiàng), 之后在Inspector視圖里出現(xiàn)時(shí)間管理器, 其中”Fixed Timestep”選項(xiàng)用于設(shè)置FixeUpdate()的更新幀率, 更新幀率默認(rèn)是0.02秒。固定更新常用于移動(dòng)物體等操作, 因?yàn)楣潭ǜ旅恳粠{(diào)用的時(shí)間間隔是一樣的, 所以移動(dòng)速度是勻速的。
7.OnDestroy(), 在當(dāng)前腳本銷(xiāo)毀時(shí)調(diào)用該函數(shù), 可以在該函數(shù)里填寫(xiě)刪除時(shí)需要處理的邏輯。
8. OnEnable(), 激活函數(shù), 當(dāng)腳本處于激活時(shí)調(diào)用。
9. OnDisable(), 當(dāng)腳本被禁用時(shí)調(diào)用。
10.所有繼承自MonoBehaviour的腳本都有一個(gè)名為enabled的bool屬性值開(kāi)關(guān)。enabled對(duì)應(yīng)腳本名稱(chēng)左側(cè)的勾, 如我們創(chuàng)建的GameManager腳本:
(2).enabled只是與生命周期的函數(shù)有關(guān), 與其他函數(shù)和所有變量都沒(méi)有關(guān)系。如果腳本中不保護(hù)任何生命周期函數(shù), enabled將沒(méi)有任何意義。
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游戲?qū)ο笊?/span>(1).在Hierarchy視圖中選中Cube游戲?qū)ο?/span>
(2).在Project視圖中,鼠標(biāo)左鍵拖拽點(diǎn)GameManager腳本到Inspector視圖中
(3).運(yùn)行腳本,控制臺(tái)打印
1.UnityGUI使用一個(gè)特殊的OnGUI()函數(shù), 在該函數(shù)中加入實(shí)現(xiàn)UI的腳本。
2.UnityGUI的接口
(1).GUI.xxx(), 需要自己手動(dòng)填寫(xiě)處于屏幕上的位置。
(2).GUILayout.xxx(),unity會(huì)自己排版。
3.UnityGUI測(cè)試函數(shù)
(1).GUILayout.Label (sting str), 標(biāo)簽用于顯示文本。輸入的參數(shù)為需要顯示的文本。
(2).GUILayout.TextField (sting str), 按鈕用于出發(fā)事件。輸入的參數(shù)為在按鈕上顯示的文字。它返回一個(gè)bool值, 表示是否按下了按鈕。
(3).GUILayout.Button(sting str), 文本區(qū)域用于輸入文本。輸入的參數(shù)為顯示的文本, 返回經(jīng)過(guò)用戶(hù)輸入改動(dòng)后的文本。一般用參數(shù)變量接收返回值即可。
4.UseGUI實(shí)例
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游戲?qū)ο笊?br />(1).在Hierarchy視圖中選中Cube游戲?qū)ο?br />(2).在Inspector視圖中, 點(diǎn)擊Add Component按鈕, 搜索UseGUI腳本進(jìn)行綁定
總結(jié)
以上是生活随笔為你收集整理的游戏脚本和MonoBehaviour生命周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unity预制体
- 下一篇: 使用脚本创建查找修改销毁游戏对象