日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏脚本和MonoBehaviour生命周期

發布時間:2025/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏脚本和MonoBehaviour生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.游戲腳本

1.雙擊Project視圖中, Script目錄下的GameManager腳本


2.使用MonoDevelop編輯器打開


3.所有創建的用于添加到游戲對象上的腳本都必須繼承自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()里, 這樣可以確保在角色的位置計算完畢后, 再根據角色位置確定攝像機的位置和視角。

5.FixedUpdate(), 該函數用于固定更新。在游戲運行的過程中, 每一幀的處理時間是不固定的, 當我們需要固定間隔時間執行某些代碼時, 就會用到FixedUpdate()函數。在菜單欄中, 點擊”Edit” -> “Project Settings” -> “Time”菜單項, 之后在Inspector視圖里出現時間管理器, 其中”Fixed Timestep”選項用于設置FixeUpdate()的更新幀率, 更新幀率默認是0.02秒。固定更新常用于移動物體等操作, 因為固定更新每一幀調用的時間間隔是一樣的, 所以移動速度是勻速的。


6.OnGUI(), 繪制界面函數。Unity使用最新的UGUI界面系統來創建頁面, 所以OnGUI()一般作為測試功能使用, 如創建測試按鈕。
7.OnDestroy(), 在當前腳本銷毀時調用該函數, 可以在該函數里填寫刪除時需要處理的邏輯。
8. OnEnable(), 激活函數, 當腳本處于激活時調用。
9. OnDisable(), 當腳本被禁用時調用。

10.所有繼承自MonoBehaviour的腳本都有一個名為enabled的bool屬性值開關。enabled對應腳本名稱左側的勾, 如我們創建的GameManager腳本:


(1).enabled決定生命周期的函數是否會被調用。當enabled為true時, 生命周期各個階段對應的函數將會被調用, 否則不調用, Awake和OnDisable函數除外。當enabled變為true時腳本執行OnEnable(), 當enabled變為false時腳本執行OnDisable()。
(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).運行腳本,控制臺打印


四.UnityGUI的使用
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腳本進行綁定


(3).運行測試


總結

以上是生活随笔為你收集整理的游戏脚本和MonoBehaviour生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。