您当前的位置:首页 VR开发 Unity 正文

Unity中如何实现流畅的动作以及时间线

查看: 4981| 评论: 0 2016-10-18 05:44 PM| 发布者: PeckBang

大家在学习Unity中会遇到一个重要的问题,那就是怎样在游戏中除去不流畅的动作,使其看起来很自然。这个问题是普遍存在的,直接取决于你使用引擎的时间。没有一个单独的方案且适用于所有情况,但却有一些例子看起来确实不是最佳方案。很多开发者在一方面或者另一个点上遇到过动作不流畅的问题,但是确实很难得到一些帮。在中,有惊人数目的误导信息让人忽略时间线。Unity论坛中有很多答案,虽然正确,但是很难理解,需要自己充分解决一些疑惑。这篇文章的主要目的是通过解释Unity的时间线从而更深一层的解决问题,以及说明哪里,为什么会导致生涩,呈现一个能解决问题的方案。在呈现出这个方案的过程中,提供一个资源包。

对不流畅的类型熟悉吗?

上面的图片展示了一个动作不流畅的简单例子。很明显,这动作不是我们想要的。

创建一个新项目



导入默认的第一人称角色控制器,并把它放到一个新场景里。放置一些物体并环绕一圈。移除头部装备,使用游戏手柄会让观察的效果更好。通常情况下,移动的同时看看四周,你会注意到某部分会有很明显的不流畅。


让我们看看这个例子,我使用到的技术,后面将会讨论到。第一个例子和第二个相比较,在流畅性上你会发现有很大的差异。

很棒也很流畅,看起来更好。


在解决这个问题之前,理解Unity的Update循环是很重要的。我们需要检查Update以及FixedUpdate函数后面的逻辑。下面是Uniy执行顺序的摘录,可以在这里看:https://docs.unity3d.com/Manual/ExecutionOrder.html



尤其是你会想仔细检查Update顺序段,如果你以前没有这样做过,它与这篇文章的其余部分高度相关。

原链接:https://docs.unity3d.com/Manual/ExecutionOrder.html


了解流程图。

这个图表概述了,方法在单一的框架中被调用的顺序。该部分重点是FixedUpdateUpdate的方法,分别用绿色和红色高亮显示。


Unity实现的就是所谓的半固定时间间隔。这意味着游戏主循环使用变化的时间线也能以任意的帧速率运行,在Unity叫做deltaTime,它使用固定的时间线去管理一个内部循环。这样做有些好处,首先,当锁定核心游戏模拟到一个恒定的速度的时候,能够以硬件许可的速度运行视觉更新。当然也存在一些缺点的,包括很容易出现上面提及到的生涩问题。下面程序简单描述了unity的update循环的大概结构。
float currentSimulationTime = 0;
float lastUpdateTime = 0;
while (!quit) // variable steps
{
       while (currentSimulationTime  <Time.time)
}
52VR.COM微信扫一扫
52vr公众号
专注于VR的学习、开发和人才交流

52VR开发交流

相关推荐

已有 0 人参与

发表评论

您需要登录才可以回帖 登录 | 立即注册

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-22 03:15 AM

返回顶部