Unity Update 具体解释
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 具体解释的更多相关文章
- unity update优化
http://forum.china.unity3d.com/thread-13968-1-1.html Unity有个消息系统,它可以在运行中当发生指定事件时调用你在脚本中定义的那些魔术方法.这是个 ...
- unity update 和fixedudpate
但是Update会在每次渲 染新的一帧时被调用. 而FixedUpdate会在每个固定的时间间隔被调用,
- unity update与fixedUpdate
update与渲染同步.fixedUpdate与物理同步. 在update中,speed要乘以Time.deltaTime.在fixedUpdate中,speed要乘以Time.fixedDeltaT ...
- 如何有效提升Unity Gear VR游戏性能
http://www.vr186.com/vr_news/vr_technical_area/1093.html 好的,所以你决定用 Unity 来做一个 VR 游戏,并选定了三星 Gear vr 为 ...
- Unity安卓共享纹理
前置知识:安卓集成Unity开发示例 本文的目的是实现以下的流程: Android/iOS native app 操作摄像头 -> 获取视频流数据 -> 人脸检测或美颜 -> 传输给 ...
- Stealth——01场景的基本搭建以及基础逻辑
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- CacheManager:–个通用缓存接口抽象类库
CacheManager是–个缓存通用接口抽象类库,它支持各种高速缓存提供者,例如Memcache,Redis,并且有许多先进的功能特性.具体可以访问官方网站 http://cachemanager ...
- 解决: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 ...
- 2、SIP
1.初学者笔记:http://www.cnblogs.com/gnuhpc/archive/2012/01/16/2323637.html 2.SIP头字段解释:http://www.cnblogs. ...
随机推荐
- 【BZOJ1939】[Croatian2010] Zuma(动态规划)
题目: BZOJ1939(权限题) 分析: 这题很容易看出是DP,但是状态和转移都不是很好想-- 用\(dp[l][r][c]\)表示在\(l\)前面已经新加了\(c\)个和\(l\)一样的弹子时,使 ...
- nginx深入
1.编译安装配置完成 /opt/nginx11/html/index.html 这是网页的首页文件 2. nginx.conf主配置文件学习 ############################# ...
- 题解报告:hihoCoder #1175:拓扑排序·二
题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...
- what is success?
什么是成功?这是个老话题了.然而每个人对成功的认识却也不同.记得央视主持人王志说过成功是相对的,每个人都有自己的成功标准.有的人认为有钱.有房.有车.有女人,就是成功.有的人则认为成功是你做了一件你想 ...
- UNIX环境高级编程--7
进程环境main函数: C程序总是从main函数开始执行.main函数原型是: int main(int argc, char *argv[]); 当内核执行C程序时(使用一个exe ...
- [转]linux sudo 命令
转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/11/2245341.html “Sudo”是Unix/Linux平台上的一个 ...
- SharePoint通过IP地址访问
问题:SP站点通过计算机名称可以访问,但不能通过IP地址访问 解决方案:打开SharePoint2010管理中心>应用程序管理>配置备用访问映射>编辑公用 URL 备用访问映射集:选 ...
- 启用禁用USB接口
一个小工具,功能有启用禁用外网.USB接口,可由服务端socket长链接进行操控客户端从而达到实现前边的这些功能,这里贴上核心代码,先给上启用禁用USB接口吧,这个方法可随时启用禁用,之前用过一个改u ...
- centos安装composer以及使用国内镜像
下载composer.phar文件 curl -sS https://getcomposer.org/installer | php 将composer.phar移动到环境变量中并且更名为compos ...
- Android FrameWork 学习之Android 系统源码调试
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...