理解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. 第45天学习打卡(Set 不安全 Map不安全 Callable 常用的辅助类 读写锁 阻塞队列 线程池)

    Set不安全  package com.kuang.unsafe; ​ import java.util.*; import java.util.concurrent.CopyOnWriteArray ...

  2. 不使用map和set实现LRU——那用List?

    遇到一道面试题,不使用map和set实现LRU,要求get的时间复杂度为O(logn),put的时间复杂度不超过O(n).想到了用ArrayList来实现,保存有序的key.然而牵涉add节点,在保证 ...

  3. Selenium 4.0beta: Grid 工作原理

    Selenium 4.0 beta版已经发布,那么距离正式版已经不远了,在Selenium 4.0中变化比较大的就是Grid了,本文翻译了官方文档,重点介绍Grid 4的工作原理 Selenium G ...

  4. CSV 注入实战

    oxo1 前言 之前看到过 CSV 注入的文章,具体想了解的请搜索学习,这里不多作介绍.今天刚好碰到了导出功能,就随手测试一波,没想到还真的存在 CSV 注入漏洞. oxo2 经过 1.测试漏洞 看到 ...

  5. C语言之三字棋的简单实现及扩展

    C语言之三字棋的简单实现及扩展 在我们学习完数组之后,我们完全可以利用数组相关知识来写一个微小型的游戏,比如说今天所说的--三子棋. 大纲: 文件组成 实现   完整代码展示   扩展 即: 一.文件 ...

  6. 自己挖的坑自己填-- maven打jar包部署服务器报错

    1.今天 mvn install 后把 jar 包部署到服务器上,执行 java -jar xx.jar 报 "no main manifest attribute,in xx.jar&qu ...

  7. Salesforce LWC学习(三十二)实现上传 Excel解析其内容

    本篇参考:salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容 上一篇我们写了aura方式上传excel解析其内容.lwc作为salesforce的新宠儿,逐渐的 ...

  8. 平方十位数(蓝桥杯第八届国赛真题 JAVA-B组)

    思路:从大到小枚举,判断其平方是否不重复 答案:9814072356 //水题 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字. 这其中也有很多恰好是平方数(是某个数的平 ...

  9. 面试题:ApplicationContext和BeanFactory两种容器区别

    ApplicationContext和BeanFactory两种容器区别 BeanFactory是ApplicationContext容器的父接口 BeanFactory(多例模式): BeanFac ...

  10. 一文搞懂如何实现 Go 超时控制

    为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故 Go 超时控制必要 ...