博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity Update 具体解释
阅读量:7012 次
发布时间:2019-06-28

本文共 2190 字,大约阅读时间需要 7 分钟。

0x01:简单介绍

Unity的脚本继承了Monobehaviour类,在脚本中定义函数:

void FixedUpdate(){}void Update(){}void LateUpdate(){}

脚本假设是激活的,这三个函数会被上层逻辑每帧调用,FixedUpdate调用的次数和fixedTime有关。后面具体介绍,Update和LateUpdate每帧调用一次。

0x02:实现

一般游戏流程都相似以下代码演示样例:

/****************************************** Notice:c++ 演示样例代码,用于说明游戏循环逻辑* Author:wulongfei* Email:zgwulongefei@gmail.com* Date:2016-2-10*****************************************/#include 
void FixedUpdate(){}void Update(){}void LateUpdate(){}int main(){ while(true){
FixedUpdate(); Update(); LateUpdate(); }}

简单说明一下:

1、while每循环一次。相应游戏里一帧
2、Unity里的三个Update调用的次序是依照上面代码所看到的的次序
3、Update和LateUpdate每帧调用一次,FixedUpdate和FixedTime相关联

以下代码说明FixedTime和FixedUpdate是怎样关联的:

/****************************************** Notice:c++11 演示样例代码,用于说明游戏循环逻辑* Author:wulongfei* Email:zgwulongefei@gmail.com* Date:2016-2-10*****************************************/#include 
#include
#include
#include
static const long kMilliSecondsPerFrame = 1000;static const float kFixedTime = 0.2f;void FixedUpdate(){ std::cout<< "FixedUpdate\n";}void Update(){ std::cout<< "Update\n";}void LateUpdate(){ std::cout<< "LateUpdate\n";}int main(){ clock_t t = clock(); while(true){ float detTime = (clock() - t)/(float)CLOCKS_PER_SEC + kMilliSecondsPerFrame/1000; t = clock(); int count = detTime/kFixedTime; for(int i = 0; i < count; ++i){ FixedUpdate(); } Update(); LateUpdate(); std::this_thread::sleep_for(std::chrono::milliseconds(kMilliSecondsPerFrame)); }}

上面代码用到了C++11的sleep_for和chrono类,事实上主要就是实现程序休眠一段时间。主要理解FixedUpdate的逻辑就可以,FixedUpdate依据每帧须要的时间来和自己的FixedTime去比較,所以FixedUpdate每一帧调用几次取决于程序一帧运行的时间以及FixedTime。

0x03:应用

为啥要有三个Update?

Update:

每帧须要更新的逻辑在Update函数里调用

LateUpdate:

是当Update调用结束。而且渲染逻辑调用完,才会调用LateUpdate。所以当渲染结束后,须要更新状态的逻辑能够放到LateUpdate。

FixedUpdate:

精确计时须要用到FixedUpdate,由于FixedTime是定值,不管每一帧调用花费多少时间。到FixedUpdate调用时都会依照FixedTime来决定调用次数。由于程序每一帧渲染的时间是不能确定的。

这次我们项目中须要做战斗录像。为了保证逻辑都是依照精确时间调用,全部和时间相关的实例须要总的FixedUpdate调用过来。

当然假设是和物理相关,或者做相似保证依照相应的次数和时间调用,FixedUpdate是最合适只是的。

转载地址:http://suqtl.baihongyu.com/

你可能感兴趣的文章
webpack由浅入深——(webapck简易版)
查看>>
RxSwift(伪)实战 组内分享
查看>>
2 - 建立 Django 博客应用
查看>>
【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
查看>>
UI技术总结--性能优化
查看>>
Android NDK JNI 开发之旅01 环境搭建入门篇
查看>>
Javascript之迭代器模式
查看>>
Flutter花式玩转TextField,写一个验证码输入框超简单!
查看>>
RxJava应用:实现七牛云多图上传
查看>>
Tmux入门教程
查看>>
智能直播审核方案:视频云智能业务截帧策略
查看>>
亲历者说:Kubernetes API 与 Operator,不为人知的开发者战争
查看>>
[ARKit]10-3D模型怎么制作,哪里寻找,如何使用?
查看>>
Kotlin结合DataBinding简单封装一个RecyclerView的Adapter
查看>>
Android爬坑之旅之不易发现的BUG
查看>>
数值计算 插值与拟合
查看>>
支付与签名原串的那些事,但选择排序生成签名原串
查看>>
koa2开发微信公众号: 不定期推送最新币圈消息
查看>>
小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
查看>>
为什么国外的 App 很少会有开屏广告?
查看>>