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 <iostream> 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 <iostream>
#include <ctime>
#include <chrono>
#include <thread> 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是最合适只是的。

Unity Update 具体解释的更多相关文章

  1. unity update优化

    http://forum.china.unity3d.com/thread-13968-1-1.html Unity有个消息系统,它可以在运行中当发生指定事件时调用你在脚本中定义的那些魔术方法.这是个 ...

  2. unity update 和fixedudpate

    但是Update会在每次渲 染新的一帧时被调用. 而FixedUpdate会在每个固定的时间间隔被调用,

  3. unity update与fixedUpdate

    update与渲染同步.fixedUpdate与物理同步. 在update中,speed要乘以Time.deltaTime.在fixedUpdate中,speed要乘以Time.fixedDeltaT ...

  4. 如何有效提升Unity Gear VR游戏性能

    http://www.vr186.com/vr_news/vr_technical_area/1093.html 好的,所以你决定用 Unity 来做一个 VR 游戏,并选定了三星 Gear vr 为 ...

  5. Unity安卓共享纹理

    前置知识:安卓集成Unity开发示例 本文的目的是实现以下的流程: Android/iOS native app 操作摄像头 -> 获取视频流数据 -> 人脸检测或美颜 -> 传输给 ...

  6. Stealth——01场景的基本搭建以及基础逻辑

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  7. CacheManager:–个通用缓存接口抽象类库

    CacheManager是–个缓存通用接口抽象类库,它支持各种高速缓存提供者,例如Memcache,Redis,并且有许多先进的功能特性.具体可以访问官方网站  http://cachemanager ...

  8. 解决:dpkg:处理 xxx (--configure)或E: Sub-process /usr/bin/dpkg returned an error code (1)

    问题重现: 问题解决办法: #先备份原来的,然后重新新建 sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak //现将info文件夹更名 sudo mk ...

  9. 2、SIP

    1.初学者笔记:http://www.cnblogs.com/gnuhpc/archive/2012/01/16/2323637.html 2.SIP头字段解释:http://www.cnblogs. ...

随机推荐

  1. android 中的Context(一)

    context的功能如此强大,它是activity的父类. public abstract class Context { ... public abstract Object getSystemSe ...

  2. 【知识总结】回文自动机(Palindrome_Automaton)

    参考资料:Palindromic Tree--回文树[处理一类回文串问题的强力工具](请注意,其中似乎有一些错误) 回文自动机似乎和回文树是同一个东西qwq? 回文自动机(PAM)是一种处理回文串的工 ...

  3. EF 新增数据时提示it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element

    it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionM ...

  4. WPF PasswordBox MVVM 实现

    由于PasswordBox.Password属性非依赖属性,所以不能作为绑定的目标,以下是本人的MVVM实现方法. PasswordBox.Password与TextBox.Text同步,TextBo ...

  5. AOP注解不起作用的debug结果

    经过2天的调试,我发现AOP注解配置不起作用居然是表达式的错误导致的 在xml文件中配置的base-package有关,初步认为@PointCut只能使用base-package..*(..)这样的方 ...

  6. C#语言最基础的数组和集合

    数组的书写格式:数据类型[]变量名=new 数据类型[长度]: 集合的书写格式:List<变量类型>变量名=new List<变量类型>(): 集合添加元素:变量名.Add(数 ...

  7. Git的使用及托管代码到GitHub

    首先Git是一个开源的分布式版本控制工具,用git创建代码仓库. 仓库(Repository)是用于保存版本管理所需信息的地方,本地代码 提交到 代码仓库中,如果需要还可以 再推送到 远程仓库中. 所 ...

  8. Python初学1

    windows版python下载: https://pan.baidu.com/s/1dsAPp0C9PJUF73kFDdAzXQ 安装时勾选pip和Add python.exe to Path. w ...

  9. jmeter解决中文乱码问题

    问题: 当响应数据或响应页面没有设置编码时,jmeter会按照jmeter.properties文件中,sampleresult.default.encoding 设置的格式解析默认ISO-8859- ...

  10. tbType和TypeList操作

    tbType查询数据库后 获得一个DataTable的数据表 数据表是写在内存里面的 可以在这个项目的其他地方去访问它,由于在内存里面 所以访问速度很快 用代码获取它的哪一行的数据供使用 例如 tbB ...