提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、常规更新函数
    • Update()
    • FixedUpdate()
    • LateUpdate()
  • 总结

前言

Unity与常规的程序在逻辑上执行函数是有区别的。常规的程序更像是一个面向对象的过程,一直执行某个循环直到完成某个操作,而Unity常将函数的执行权交给脚本主体。当游戏内发生对应事件时,脚本执行某个函数,执行完毕后执行权转交给Unity。
Unity提供了大量涵盖每个游戏帧的函数,在这个文档中可以查看。

一、常规更新函数

更新函数有

FixedUpdate、Update、LateUpdate

我们首先要理解一下Unity的游戏帧生成的基本时序原理。

游戏对象初始位置 ——> 游戏对象改变位置——> 画面改变画面位置(摄像机)——>渲染新一帧

Unity在进行渲染之前首先会让脚本执行游戏对象位置的改变(自动也好用户输入的也罢),在改变之后进行摄像机的位置变化确定画幅中的内容,随后进行渲染。


我们可以看出,首先是Game logic中对游戏对象进行 位置、状态、行为 的更改,随后才是场景的渲染。
这里将介绍第一个函数Update()

Update()

Update函数固定会在帧的更新之前完成执行,在渲染帧之前以及计算动画之前都会调用 Update 函数。

void Update() {float distance = speed * Time.deltaTime * Input.GetAxis("Horizontal");//位置改变的操作transform.Translate(Vector3.right * distance);
}

Update函数的执行是基于游戏渲染帧的,每秒执行的次数=帧数。这对某些低帧率下的函数是有影响的:

假设一个物体有重力,他是一种环境上的力是物理系统上的力。
这时候你在Update()函数中使用一个大小相同方向相反的力来抵消重力。
你期待的结果是物体保持静止,因为受力平衡。
最终的结果是物体会上下移动,因为画面的帧率不同,Update的执行次数不一,不能时时刻刻抵消或者某一时刻超过了重力。

下面将介绍用于物理系统的Update函数FixedUpdate()

FixedUpdate()

FixedUpdate和Update最大差别是,Update的执行基于画面的渲染帧率,每次渲染都会执行。而FixedUpdate是基于一个离散的内部时钟以固定的时间执行。他是无关于画面帧率的,不会受到帧率影响的。

void FixedUpdate() {Vector3 force = transform.forward * driveForce * Input.GetAxis("Vertical");//物理上的力rigidbody.AddForce(force);
}

Unity的物理引擎也采用与帧渲染类似的方式以离散时间步骤进行更新。在每次物理更新之前都会调用一个称为 FixedUpdate 的单独事件函数。由于物理更新和帧更新不会以相同频率进行,所以如果将物理代码放在 FixedUpdate 函数而不是 Update 中,此代码将产生更准确的结果。
起码可以让本来受力平衡的物体保持静止QAQ

还有一个比较特殊的Update

LateUpdate()

他总是在Update执行完成之后执行,可以用Update计算完成后的数据进行操作。

为场景中的所有对象调用 Update 和 FixedUpdate 函数之后以及计算所有动画之后,如果能进行其他更改,也会很有用。

void LateUpdate() {Camera.main.transform.LookAt(target.transform);//摄像机应该聚焦于目标对象
}

在Update函数中将会进行游戏对象位置的更改(例如角色),此时可以在LateUpdate中对摄像机的位置进行更改以达到摄像机时刻追踪目标的效果。

总结

三种Update函数控制着渲染之前的方方面面的操作,总的来说FixedUpdate管理物理系统、Update管理帧渲染前的游戏对象属性变化、LateUpdate函数大多用在摄像机的位置变化上。

Unity学习之常用事件函数Update深度解析相关推荐

  1. Unity基础开发之事件函数的执行顺序

    Unity基础开发之事件函数的执行顺序 文章目录 前言 一.Initializtion阶段 Awake() OnEnable() 二.Editor阶段 Reset() OnValidate() 三.第 ...

  2. go float64 转int_深挖Go函数之深度解析(下):可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 这次给大家带来了一个函数的特性[可变参数],作为函数专题的结束. 有没有发现? 我们有时 ...

  3. Unity常用事件函数与变量

    一.常用必然事件 Awake:脚本实例被创建时调用(用于游戏对象的初始化,注意Awake的执行早于所有脚本的Start函数) Start: Update函数第一次运行之前调用(用于游戏对象的初始化) ...

  4. Unity 3d 脚本常用事件汇总

    Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...

  5. unity学习-委托(delegate),事件(event),Action,Func

    unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...

  6. MySQL学习6:常用计算函数

    常用计算函数 求总数 关键词:count 案例: 1.计算所有记录总数 select count(*) from students; 最大值 关键词:max 案例: 1.计算学生中最大年龄 selec ...

  7. C语言再学习25——常用字符串函数归纳

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 1. memcpy 内存复制函数. 1.1 头文件 #include &l ...

  8. openCV学习之路(2-1)---深度解析imread函数

    代码如下: #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/ ...

  9. openCV学习之路(2-3)---深度解析imshow函数

    代码如下: #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/ ...

最新文章

  1. SVM使用高斯核函数(RBF)时的超参数C和gamma如何选择
  2. 《C++游戏编程入门(第4版)》——1.8 Lost Fortune简介
  3. 基于继承类的属性模版中无法绑定的原因和解决方法
  4. 深度剖析Kubernetes API Server三部曲 - part 2
  5. [总结] 网络流经典建模
  6. matlab绘制烟花,[原创]利用MATLAB燃放烟花(礼花)
  7. lora技术在无线抄表行业应用
  8. EasyUI左右布居
  9. 获取网关IP和MAC 的VB源码
  10. 视频自动生成字幕VideoSrt
  11. Twaver-HTML5基础学习(7)Layer图层元素
  12. 01-JAVA基础—>赏金任务—>三色球问题
  13. facebook php-webdriver 安装与使用
  14. iOS App 签名的原理(转)
  15. 关于Win10。。。我是来吃螃蟹的。。。
  16. NEUQ—ACM实验班2.4小测试反思总结
  17. SAP实施案例之亨得利集团
  18. linux系统重启网卡命令
  19. Windows与Linux利用系统自带实现共享文件夹的功能
  20. 能效最大化准则下的星地融合网络的安全波束成形算法

热门文章

  1. yoyo跑_yoyo是什么意思
  2. 前端性能测试工具hiper介绍
  3. Win10自带的邮件email上登录qq邮箱|解决无法访问此账户:xx问题
  4. 计算机代码英语,计算机专业英语 (四)(示例代码)
  5. 教学妹开发springboot+vue的博客论坛系统,so esay
  6. C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数
  7. DNA与剑桥的老鹰酒吧
  8. Vu单元测试-------笔记(一)
  9. 【English】主语从句的引导词是如何选择?
  10. 邵阳学院大学计算机基础实验报告答案,实验报告正文(大学计算机基础)