关闭

unity fixed timestep

1555人阅读 评论(0) 收藏 举报

时间管理器 (time manager)

时间管理器 (time manager)

属性

属性:

功能:

固定时间步长 (fixed timestep)

独立于帧速率的时间间隔,用来命令何时执行物理计算fixedupdate()事件

允许的最大时间步长 (maximum allowed timestep)

独立于帧速率的时间间隔,当帧速率低时,它会覆盖最坏的案例场景。执行物理计算和(fixedupdate()) 事件的时间不会超过规定的时间。

时间尺度 (time scale)

时间前进的速度。更改此值以模拟子弹时间特效。1 表示实时时间。.5 表示速度减半;2 表示速度加倍。

详细信息

固定时间步长 (fixed timestep)

对于稳定的物理模拟来说,固定时间步长 (fixed time stepping) 非常重要。计算机不尽相同,不同的硬件配置在运行 unity 游戏时表现出来的性能也不同。因此,物理计算必须独立于游戏的帧速率进行。诸如碰撞检测和刚体 (rigidbody) 移动这样的物理计算是在独立于帧速率的离散固定时间步长中进行。这使不同电脑间或帧速率发生变化时模拟的一致性更强。例如,帧速率可能会由于屏幕上多个游戏同时进行或用户在后台执行另一应用程序而降低。

以下是固定时间步长的计算方法。在屏幕上绘制帧之前,unity 将固定时间提前一段固定增量时间,并在到达当前时间之前执行物理计算。这直接与固定时间步长 (fixed timestep)属性相关联。固定时间步长 (fixed timestep)的值越小,进行物理计算的频率越高。每秒的固定帧数的计算方法是,用 1 除以固定时间步长 (fixed timestep)。因此,1/0.02 = 50(帧每秒) 以及 1/0.05 = 20(帧每秒)。

简而言之,固定更新值越小,物理模拟越精确,但是 cpu 的负担也会更大。

允许的最大时间步长 (maximum allowed timestep)

固定时间步长是稳定的物理模拟的保证。然而,如果游戏对物理负担大并且已经运行缓慢或偶尔会降至低帧速率,那么固定时间步长也可能对性能带来负面影响。帧所用时间越长 - 就必须执行更大的固定更新步长以转到下一个帧。这会导致性能下降。为避免这种场景的出现,unity ios 引入了允许的最大时间步长 (maximum allowed timestep),以确保物理计算的运行时间不会超出规定的阈值。

如果帧所用时间超过允许的最大时间步长 (maximum allowed timestep)中规定的时间,那么物理会“假设”帧仅用了允许的允许的最大时间步长 (maximum allowed timestep)秒数。换句话说,如果帧速率降低到某个阈值以下,那么刚体的速度就会变慢一点,以便让 cpu 可以赶上。

允许的最大时间步长 (maximum allowed timestep)对物理计算和fixedupdate()事件都会造成影响。

允许的最大时间步长 (maximum allowed timestep)固定时间步长 (fixed timestep)时,都以秒为单位。因此,如果帧速率降低到 1/0.1 = 10 (帧每秒)以下,那么设置 0.1 就会使物理和 fixedupdate() 事件速度降低。

典型场景

假设固定时间步长 (fixed timestep)是 0.01,也就是说应该每 10 毫秒处理一次 physx、固定更新 (fixedupdate) 和动画。

当您的帧时间大约是 ~33每个视觉帧平均要执行 3 次固定循环。

但是,帧时间不是固定不变的,它取决于许多因素,包括您的场景状态、os 后台任务等。

由于 3. 的原因,帧时间有时会达到 40 - 50 毫秒,也就是说会执行 4 - 5 次固定步长循环。

当您的固定时间步长任务相当繁重时,physx、固定更新 (fixedupdate) 和动画花费的时间会将帧时间延长 10 毫秒,也就是说为所有这些固定时间步长任务增加了一次迭代。

在一些不幸的情况下,5. 中描述的过程时间会延长至处理固定步长循环所用时间的 10 倍及其以上。

这就是引入允许的最大时间步长 (maximum allowed timestep)的原因。它是在单个视觉帧期间限制 physx、固定更新 (fixedupdate) 和动画处理次数的方法。如果将允许的最大时间步长 (maximum allowed timestep)设为 100 毫秒,并固定时间步长 (fixed timestep)设为 10 毫秒,那么在每个视觉帧会最多执行 10 次固定步长任务。因此,随着固定时间步长迭代次数的增加,小的性能故障有时会引发大的性能故障。通过将允许的允许的最大时间步长 (maximum allowed timestep)降到 30 毫秒,可将最大固定步长迭代次数限制到 3,这就是说您的 physx、固定更新 (fixedupdate) 和动画不会将帧时间延长太多,但这种限制也有一些负面作用。您的动画和物理在性能故障发生时会变慢。

提示

使玩家可以通过编写脚本,动态地更改时间尺度 (time scale)来控制时间。

如果您的游戏物理负担重或在fixedupdate()事件中花费大量时间,那么请将允许的最大时间步长 (maximum allowed timestep)设为 0.1。这会防止物理以低于 10 帧每秒的速率驱动游戏。

0
0
查看评论

Unity中简单的优化物理系统

目标 这个篇文章的主要目标是给予你一个关于在Unity中简单的优化物理系统 我的游戏物理系统有什么错误吗? 怎么去处理游戏物理系统? Unity 物理系统有什么缺陷吗? Unity 是怎样处理物理系统的? 我在 Unity 物理系统上做了什么控制? ...
  • mao_xiao_feng
  • mao_xiao_feng
  • 2016-09-21 10:38
  • 4134

Unity开发-你必须知道的优化建议

最近转U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的document,而且个人习惯不喜欢看中文的资料,原汁原味的东西是最正确的,一翻译过来很多东西就都不那么准确了。于是通读了unity的官方manuel,最后面几章都是精华,里面给了非常非常多的官方的优化建议,尤其是做移动平台的开发...
  • leonwei
  • leonwei
  • 2014-01-09 16:03
  • 26543

Unity 中实现子弹时间效果

在以前,学习xna游戏框架时,由于xna封装的游戏元素很少,很多功能,只能自己去写一篇; 如:子弹时间效果; 先来介绍一个何为“子弹时间”效果; 这得始源于:著名科幻电影《黑客帝国》中男主角有一幕,敌方子弹扫射中,男主,以超快的速度,对子弹的闪避过程,这一过程,感觉整个世界的时间都变慢了,只是我们观...
  • linjf520
  • linjf520
  • 2014-02-14 11:57
  • 6100

使用unity Timeline工具制作“子弹时间”效果

子弹时间,就是黑客帝国中,可以看得到子弹运动那种。使用Timeline加速或者减速游戏里得时间,这样就不需要更改运动代码也可以获得对象运动速度的改变。 首先,创建一个Timeline Editor窗口: Window->Timeline Editor; 创建一个空对象用来存放一个新的Timel...
  • ILYPL
  • ILYPL
  • 2017-09-22 14:27
  • 1246

Unity游戏暂停,控制时间的设计

上周游戏发布测试版本, 其他方向的反馈先不提。 被玩家吐槽的巨多的就是游戏中的技能。 具体情况是 我们游戏在战斗中使用的技能的时候: 有遮罩,会屏蔽玩家操作。 玩家不会无敌,而且怪物会移动。 而且技能动作逻辑和UI是同步的,导致有可能玩家的发出的动作和特效什么的完全看不到。这可是游戏核心玩法之...
  • liuhangang
  • liuhangang
  • 2017-04-09 00:26
  • 854

unity fixed timestep

时间管理器 (time manager) 时间管理器 (time manager) 属性 属性: 功能: 固定时间步长 (fixed timestep) 独立于帧速率的时间间隔,用来命令何时执行物理计算和fixedupdate()事件。 ...
  • TrudgeCarrot
  • TrudgeCarrot
  • 2017-01-03 18:33
  • 1555

unity fixed timestep

来源:http://blog.csdn.net/trudgecarrot/article/details/53996908 时间管理器 (time manager) 时间管理器 (time manager) 属性 属性: 功能: 固定时间...
  • dujiahei
  • dujiahei
  • 2017-06-25 20:47
  • 93

unite2016上海Unity大会--Unity3D性能优化篇

目录结构 项目简述策划文案美术资源程序逻辑性能优化 项目简述 项目方向时间计划人员配置具体内容执行 GO! 策划文案(略过) “兵马未动,粮草先行~”,优秀的策划文档是项目良好的开端 美术资源 StandardModelShaderTextureLi...
  • nemo_free
  • nemo_free
  • 2016-04-15 15:02
  • 192

unity shader的固定管线(fixed function shader)

Shader "Wang/Fixed" { Properties { _Color("Main Color",color) =(1,1,1,1) //环境光 _Ambient("Ambient",color)=(0.3,0....
  • u011244737
  • u011244737
  • 2015-12-26 19:07
  • 706

Unity Time类详解

以下是从极客学院视频教程里的截图,详细的说明了Time下各个变量的表示和含义。
  • yab4534
  • yab4534
  • 2015-07-09 01:02
  • 12184
    个人资料
    • 访问:13612次
    • 积分:287
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:6篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论