Unity学习之常用事件函数Update深度解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、常规更新函数
- 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深度解析相关推荐
- Unity基础开发之事件函数的执行顺序
Unity基础开发之事件函数的执行顺序 文章目录 前言 一.Initializtion阶段 Awake() OnEnable() 二.Editor阶段 Reset() OnValidate() 三.第 ...
- go float64 转int_深挖Go函数之深度解析(下):可变参数
接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 这次给大家带来了一个函数的特性[可变参数],作为函数专题的结束. 有没有发现? 我们有时 ...
- Unity常用事件函数与变量
一.常用必然事件 Awake:脚本实例被创建时调用(用于游戏对象的初始化,注意Awake的执行早于所有脚本的Start函数) Start: Update函数第一次运行之前调用(用于游戏对象的初始化) ...
- Unity 3d 脚本常用事件汇总
Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...
- unity学习-委托(delegate),事件(event),Action,Func
unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...
- MySQL学习6:常用计算函数
常用计算函数 求总数 关键词:count 案例: 1.计算所有记录总数 select count(*) from students; 最大值 关键词:max 案例: 1.计算学生中最大年龄 selec ...
- C语言再学习25——常用字符串函数归纳
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 1. memcpy 内存复制函数. 1.1 头文件 #include &l ...
- openCV学习之路(2-1)---深度解析imread函数
代码如下: #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/ ...
- openCV学习之路(2-3)---深度解析imshow函数
代码如下: #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/ ...
最新文章
- SVM使用高斯核函数(RBF)时的超参数C和gamma如何选择
- 《C++游戏编程入门(第4版)》——1.8 Lost Fortune简介
- 基于继承类的属性模版中无法绑定的原因和解决方法
- 深度剖析Kubernetes API Server三部曲 - part 2
- [总结] 网络流经典建模
- matlab绘制烟花,[原创]利用MATLAB燃放烟花(礼花)
- lora技术在无线抄表行业应用
- EasyUI左右布居
- 获取网关IP和MAC 的VB源码
- 视频自动生成字幕VideoSrt
- Twaver-HTML5基础学习(7)Layer图层元素
- 01-JAVA基础—>赏金任务—>三色球问题
- facebook php-webdriver 安装与使用
- iOS App 签名的原理(转)
- 关于Win10。。。我是来吃螃蟹的。。。
- NEUQ—ACM实验班2.4小测试反思总结
- SAP实施案例之亨得利集团
- linux系统重启网卡命令
- Windows与Linux利用系统自带实现共享文件夹的功能
- 能效最大化准则下的星地融合网络的安全波束成形算法