欢迎访问 生活随笔!

生活随笔

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

编程问答

游戏脚本和MonoBehaviour生命周期

发布时间:2025/4/17 编程问答 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 游戏脚本和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生命周期的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。