Unity 生命周期函数

举报
陈言必行 发表于 2021/08/13 23:01:26 2021/08/13
【摘要】 namespace UnityApi:Monobehaviour{    void Reset()    {        //属性面板右键操作 Reset 时执行,此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。       &...

  
  1. namespace UnityApiMonobehaviour
  2. {
  3.     void Reset()
  4.     {
  5.         //属性面板右键操作 Reset 时执行,此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。 
  6.         Debug.Log("Reset 我在重置时执行");
  7.     }
  8.     void Awake()
  9.     {
  10.         //只会被调用一次,在Start方法之前被调用! 主要用于字段值的初始化工作,禁用脚本,创建游戏对象,或者Resources.Load(Prefab) 对象
  11.         Debug.Log("Awake 我在Statt之前执行");
  12.     }
  13.     void OnEnable()
  14.     {
  15.         //脚本可用时被调用、如果脚本是不可用的,将不会被调用!
  16.         Debug.Log("OnEnable 我被调用了");
  17.     }
  18.     // Use this for initialization
  19.     void Start()
  20.     {
  21.         //只执行一次,在Awake方法执行结束后执行,但在Update方法执行前执行, 主要用于程序UI的初始化操作,比如获取游戏对象或者组件
  22.         Debug.Log("Start 初始化");
  23.     }
  24.     void FixedUpdate()
  25.     {
  26.         //每一帧执行一次!不会跳帧!固定更新。固定更新常用于移动模型等操作
  27.         Debug.Log("FixedUpdate 我执行了");
  28.     }
  29.     // Update is called once per frame
  30.     void Update()
  31.     {
  32.         Debug.Log("Update 每帧执行一次");
  33.     }
  34.     void LateUpdate()
  35.     {
  36.         //先执行Update,然后才去执行lateUpdate(Update方法执行完,必定接着执行LateUpdate,而Update和FixedUpdate方法的执行顺序不确定,
  37.         //而且有时候FIxedUpdate执行了多帧,而Update却只执行了一帧,这就是因为跳帧的缘故造成的,只有在所有的update执行完了,再执行一次LateUpdate
  38.         Debug.Log("LateUpdat 我在update之后执行一次");
  39.     }
  40.     void OnGUI()
  41.     {
  42.         //在这里面进行GUI的绘制,且GUI是每帧擦除重绘的!仅仅只是绘制!没有生命周期的概念!所有关于绘制GUI的代码,都要直接或者间接地写到OnGUI方法中!
  43.         Debug.Log("OnGUI 执行速度基本是Update的两倍");
  44.     }
  45.     void OnDisable()
  46.     {
  47.         //脚本失效时调用,程序结束时调用。如果再启用的话会再调用OnEnable;
  48.         Debug.Log("OnDisabule 我在失效时被执行");
  49.     }
  50.     void OnDestroy()
  51.     {
  52.         Debug.Log("OnDEstroy 我在销毁时被执行");
  53.     }
  54. }

 

【网图】

生命周期函数执行顺序

Reset -> Awake -> OnEnable -> Start -> FixedUpdate -> Update-> LateUpdate -> OnGUI -> OnDisable -> OnDestroy

 

Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。Start总是在Awake之后执行。

 

FixedUpdate:固定帧更新,在Unity导航菜单栏中,点击“Edit”–>“Project Setting”–>“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed Timestep”选项用于设置FixedUpdate()的更新频率,更新频率默认为0.02s。 

 

Update:帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在 FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。 

 

LateUpdate: 在所有Update函数调用后被调用,和Fixedupdate一样都是每一帧都被调用执行,这可用于控制脚本逻辑的执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。不然如果物体移动和相机跟随都写在Update就有可能出现获取不到已经更新好的角色位置.

 

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76461301

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。