理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结。Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数。在unity官网中有对生命周期详细的介绍https://docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

场景开始阶段

Awake:在游戏物体加载时执行一次,(在物体启用的状态下)。如果游戏物体未启用,则会在启用后调用Awake;

onEnable:物体每次启用时调用OnEnable;

Start:物体加载之后,脚本启用之后执行一次Start。

onlevelwasloaded:关卡场景加载完成后会调用此函数。只有通过SceneManager.LoadScene()加载的场景会调用此函数。

gameObject.SetActive(true);//代码启用物体方法
this.enabled = true;//代码启用脚本方法

总结:Awake和Start方法都是加载场景后只执行一次,因此作用都是充当构造函数,初始化数据成员。在执行顺序上Awake在Start前面调用。可以通过onlevelwasloaded告知游戏已加载新关卡。

物理阶段

FixedUpdate:脚本启用后,固定时间执行,适用于物理的计算和更新,不会受到渲染的影响;默认是0.02s,可以通过Edit/Project Setting设置

OnCollisionXXX:碰撞事件,满足碰撞条件时调用;

OnTriggerXXX:触发,当满足触发条件时调用

逻辑阶段

Update:渲染帧,脚本启用后,每次渲染场景调用一次。帧率快慢与设备性能和渲染量有关。

LateUpdate:在update后调用。LateUpdate 开始时,在 Update 中执行的所有计算便已完成。LateUpdate 的常见用途是跟随第三人称摄像机。如果在 Update 内让角色移动和转向,可以在 LateUpdate 中执行所有摄像机移动和旋转计算。这样可以确保角色在摄像机跟踪其位置之前已完全移动。

场景渲染

OnBecameVisible:当当前Mesh Renderer在任意相机上可见时调用;

OnBecameInvisible:当当前Mesh Renderer在任意相机上不可见时调用;

结束阶段

OnDisable:对象被禁用或处于非活动状态时,调用此函数。

OnDestroy:脚本被销毁或游戏对象被销毁时调用

OnApplicationQuit:在退出应用程序之前在所有游戏对象上调用此函数。在编辑器中,用户停止播放模式时,调用函数。

鼠标输入事件

OnMouseDown:鼠标按下当前Collider时调用;

OnMouseEnter:鼠标进入当前Collider时调用;

OnMouseExit:鼠标离开当前Collider时调用;

OnMouseUp:鼠标抬起当前Collider时调用;

OnMouseOver:鼠标经过当前Collider时调用;

Unity基础-脚本生命周期的更多相关文章

  1. Unity学习疑问记录之脚本生命周期

    总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown首先是Reset,顾名思义:重置.在什么情况下调用呢?1.用户第一次添加组件时.2用户点击见组件面板上 ...

  2. Unity脚本生命周期

    前言 说到生命周期,影响最深刻的是,在接触Java的JSF组件时,JSF组件的五大生命周期,全要默写出来,嘿嘿…… 总结这两天在写小怪和掉落的糖葫芦时,老是遇到GameObject未销毁,一直存在场景 ...

  3. Unity脚本生命周期与执行顺序

    文章目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象上才能开始它 ...

  4. Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

    前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...

  5. (转)unity3d中脚本生命周期(MonoBehaviour lifecycle)

    自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...

  6. Java基础知识笔记(四:多线程基础及生命周期)

    一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...

  7. [Unity3D]脚本生命周期学习

    脚本的生命周期 继承于MonoBehaviour的类对象无需手动实例化,由引擎来决定实例化的时机 Awake:每当脚本被加载的时候调用一次,就是说即使脚本没有被勾选,也会调用一次,主要用来做一些初始化 ...

  8. unity3d中脚本生命周期(MonoBehaviour lifecycle)

    最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Ri ...

  9. 小抄:选择 Unity 的对象生命周期管理员

    Unity 框架提供了数种生命周期管理员,各有相同和相异之处.刚开始接触时,难免头昏. 制作这张小抄,只是为了要帮助自己理解和记忆.如果你也用 Untiy,或可参考看看. 文字說明: Transien ...

随机推荐

  1. keras环境搭建

    操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 keras + tensorflow 环境搭建,使用cpu,安装命令如下: virtualenv -p /usr ...

  2. PAT-1136(A Delayed Palindrome)字符串处理+字符串和数字间的转换

    A Delayed Palindrome PAT-1136 我这里将数字转换为字符串使用的是stringstream字符串流 扩充:将字符串转换为数字可以使用stoi函数,函数头为cstdlib #i ...

  3. python带颜色打印字符串

    python带颜色打印字符串 之前调试pwn题的时候,有时候需要将某些特别的,重要的信息用不一样的颜色打印出来.查阅一些资料,了解了print函数的特性后,自己写了一个脚本,可以用来获取带颜色信息的字 ...

  4. python面试题,print写在for循环内和外的区别

    1.统计列表中正数和负数的数量a = [1,3,5,7,0,-1,-9,-4,-5,8]b = []c = []for i in a : if i>0: b.append(i) elif i&l ...

  5. swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)

    swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...

  6. 《逆向工程核心原理》——DLL注入与卸载

    利用CreateRemoteThread #include <iostream> #include <tchar.h> #include <Windows.h> # ...

  7. python3 base64

    import base64s='hello world'bytes_by_s=s.encode() #将字符串编码-->字节码,b64_encode_bytes=base64.b64encode ...

  8. 全量同步Elasticsearch方案之Canal

    一.前言 Canal 是阿里的一款开源项目,纯 Java 开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB). Canal 除了支持 b ...

  9. 你说,怎么把Bean塞到Spring容器?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 小傅哥,你是怎么学习的? 有很多初学编程或者码了几年CRUD砖的小伙伴问我,该怎么学 ...

  10. Androi Studio 之 LinearLayout

    LinearLayout •常用属性 •注意事项 当  android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用 a ...