项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.timeScale才发现之前我理解错了一些东西。
Time.timeScale可以控制Update 和LateUpdate 的执行速度,举个例子说明一下。
Time.timeScale=1时,Update、LateUpdate、FixedUpdate 都按正常的时间来执行。
Time.timeScale=2时,Update和 LateUpdate的执行速度是之前的2倍,而FixedUpdate还是按正常时间来执行。
Sorry上面红色这部分确实是写错了,感谢网友在留言处给我的指正,谢谢。
正确的应该是timeScale不会影响Update和LateUpdate的执行速度。因为FixedUpdate是根据时间来的,所以timeScale只会影响FixedUpdate的速度。 再次抱歉。。 谢谢热心网友给我的指正。。 因为我的项目里在处理战斗部分的时候 大量使用 iTween 所以 2 3 倍加速 或者暂停 的功能直接修改timeScale 。
Time.timeScale也误导了我很久,为什么这么说呢?我原先一直以为Time.timeScale = 0 的话所有的Update都不执行了。今天测试了一下发现原来不是这样的,无论Time.timeScale 等于多说Update和LateUpdate都会去执行,不信你可以自己做个实验看看。
Time.timeScale还会影响Time.time的时间,比如Time.timeScale = 2的话,那么Time.time的增长速度也会变成2倍速度。如果你想取到游戏的实际时间,那么使用Time.timeSinceLevelLoad就可以,前提是必须在Awake()方法以后再取,如果在Awake()方法里面取Time.realtimeSinceStartup会取出一个错误的值,在Start方法里面取的话就正常了。
总之一句话Time.timeScale影响的是Unity的游戏时间缩放比例。Unity里面所有跟时间有关系的东西都是根据timeScale来演算的。仔细想想现在的手游就是个 动画 和 粒子技能特效 还有UI位移特效,所以改他们的速度直接用Time.timeScale就可以完成。还有一个重要的东西就是人物移动 或者 技能移动的速度了, 根据时间的公式,时间 = 路程\速度 ,比如角色从起点跑到中间的一个预期时间, 或者一个技能的火球从攻击到打中目标的预期时间。 凡是处理时间的东东全用Time.time 这样就可以完美让Time.timeScale控制你的游戏了。
下面说说两个大家伙比较关心的话题。
1.游戏暂停
设置 Time.timeScale = 0;即可让游戏暂停。 其实我们暂停的主要是 人物动画,还有技能特效,比如一个火球打了一半。UI方面往往我们不希望暂停,比如暂停界面 有一些UI位移动画或者帧动画, 或者最起码要有个“取消暂停的按钮” 吧。 总不能游戏暂停了我点击按钮 按钮的点击动画 或者特效也暂停了吧。
所有的动画都是基于时间来的,因为Time.timeScale = 0了,所以Time.time也就不会在变化了。换句话来说如果游戏暂停以后想在暂停界面上继续播放一些不受Time.timeScale 影响的动画,那么我们就需要用到Time.realtimeSinceStartup
如果你的项目NGUI的版本还算比较新的话,你会发现在UITweener.cs处理UI动画的基类里面已经增加了一个属性叫public bool ignoreTimeScale = true; 它就是控制控制NGUI 的UI动画是否受到ignoreTimeScale影响。如下图所示,你可以看看NGUI在Update里面的实现,它也是根据时间来判断的。忽略timescale的话就用真实时间,不忽略的话就用Time.time 和Time.deltaTime。
2.如何让游戏中某个游戏对象不受Time.timeScale影响。
动画不受timeScale影响:
http://answers.unity3d.com/questions/217351/animations-ignore-timescale.html
粒子特效不受timescale影响
https://gist.github.com/AlexTiTanium/5676482
经过我的测试发现timeScale = 0 时, 播放放粒子特效,效率上有很大问题非常的卡。
举个例子啊,刀塔传奇大家都玩过吧?某个角色放技能的时候,其他所有人物动作全部暂停,并且打出去的技能也暂停。等着角色的技能全部放完,别人才恢复正常。 我觉得向做这类游戏,最好就不要 利用timeScale了,不然写起来太蛋疼了。 不过刀塔传奇也没有 1 倍 2倍 3倍速 的功能吧,呵呵。
3.timeScale变化时的声音。
当声音播放的同时去修改timescale的数值你会发现声音播放的很奇怪。如下代码所示,你可以封装一个方法,把IgnoreTimeScale作为参数传进去, 如果忽略timescale的话那么速度就应该是1否则就应该是Time.timeScale。
此时如果修改了Time.timeScale的数值的话,那么正在播放中的声音会非常奇怪。所以当每次播放音频的时候我们需要记录一下这个音频的状态,它是否需要忽略timeScale当前的数值。
每当timeScale变化的时候调用一下下面这个方法。就是遍历一下当前保存的所有音频对象,从新设置一下他们的播放频率。
如果你有更好的建议,欢迎在下面给我留言,谢谢。
相关推荐
1. **Time.timeScale**:这是Unity中最常用的一种暂停游戏的方法。当`Time.timeScale`被设置为0时,游戏的时间将被暂停,大多数基于时间的更新(如Update()函数)都将停止。然而,这并不意味着所有的时间相关操作...
总结来说,Unity3D通过`Time.timeScale`和`Time.fixedDeltaTime`提供全局的慢动作与加速效果,而`AnimationState.speed`则允许我们针对单个动画进行调整。合理运用这些机制,开发者可以创造出各种独特且引人入胜的...
Unity3D是一款强大的跨平台游戏开发引擎,广泛用于创建2D和3D的互动内容,包括游戏、模拟器以及虚拟现实(VR)和增强现实(AR)应用。"Unity3D_Canon_Api.rar"这个压缩包文件包含了Unity3D的中文圣典手册和API手册,是...
Unity3D 入门中文版教材涵盖了 Unity3D 的基本操作、模型和材质、FBX 导出插件、Unity3D 编辑器的基本操作、recursos 和 Assets、Unity3D 编辑器的高级操作、Unity3D 的应用、Unity3D 的开发工具、Unity3D 的资源和...
总结起来,Unity3D中的`Time.timeScale`提供了灵活的时间控制,可以用于创建慢动作、暂停、加速等效果,对游戏设计和用户体验有着深远的影响。通过编写如上述代码所示的简单脚本,开发者可以轻松地在游戏界面中集成...
总之,`Time.deltaTime`和`Time.timeScale`是Unity3D中两个非常重要的时间管理工具,它们帮助开发者创建出流畅且不受帧率影响的游戏体验,同时也提供了对游戏时间流逝速度的灵活控制。通过熟练运用这些特性,可以...
Unity3D是一款强大的跨平台游戏开发引擎,广泛用于创建2D和3D游戏、虚拟现实体验和增强现实应用。在入门学习Unity3D时,了解并掌握基本操作至关重要。以下是一些关键知识点: 1. **命名规范**:在建模过程中,确保...
Unity3D是一款强大的跨平台游戏开发引擎,广泛应用于2D和3D游戏、虚拟现实(VR)、增强现实(AR)以及互动体验的创建。它的API(Application Programming Interface)是开发者进行程序设计的核心工具,提供了丰富的功能...
VDSR模型性能最优权重文件(PSNR scale=2为37.65,scale=3为33.77,scale=4为31.45) VDSR模型性能最优权重文件(PSNR scale=2为37.65,scale=3为33.77,scale=4为31.45) VDSR模型性能最优权重文件(PSNR scale=...
`Time.timeScale` 允许你暂停、加快或减慢游戏时间,这对于游戏的暂停功能或者时间扭曲效果非常有用。 6. **心跳机制(Heartbeat)**: 创建一个心跳机制,定期执行任务,如刷新时间显示。这可以通过`Update`函数...
在Unity3D开发中,有时候我们需要与iOS原生系统进行交互,例如访问用户的照片库,进行图片选择和编辑。这个场景通常涉及到Unity的插件开发和iOS的原生API调用。下面将详细讲解如何在Unity3D 2018.3.0版本中实现调用...
Unity3D是一款强大的跨平台游戏开发引擎,广泛用于创建2D和3D的互动内容,包括游戏、模拟器以及各种可视化应用。在这个“unity3D素材----UI界面包.zip”中,你将找到一系列用于构建游戏或应用用户界面(UI)的资源。...
Unity 3D是一款广泛应用于游戏开发的跨平台引擎,它提供了强大的3D图形渲染和物理模拟功能。在Unity中,模型缩放是一项基础但至关重要的任务,尤其在创建跑酷类游戏时,合适的模型比例和空间布局对于游戏体验至关...
Unity3D iTween插件是Unity3D游戏开发中常用的一个动画库,它极大地简化了在游戏场景中创建平滑过渡和复杂动画的过程。通过使用iTween,开发者无需编写复杂的Lerp(线性插值)代码,即可实现物体的位置、旋转、缩放...
《Unity3D教程:计算机3D图形基础在Unity中...理解和熟练掌握这些概念对于在Unity中进行3D游戏开发或应用创建至关重要。通过使用这些工具,开发者可以轻松地实现物体的移动、旋转和变形,从而创造出丰富多彩的3D世界。
Unity3D设计基础是游戏开发领域中的重要一环,它为开发者提供了强大的工具集来创建交互式3D内容。在Unity3D中,组件(Components)是构建游戏对象(Game Objects)的核心元素,它们赋予了游戏对象各种特性和功能。本...
9. **编辑器操作**:在Unity3D中,调整FBX文件的Scale Factor和Generate Colliders属性,植物类模型通常不需要设置Generate Colliders。 10. **对象放置与聚焦**:通过拖放将FBX对象放入Hierarchy视图,并使用F键让...
Unity3D是一款强大的跨平台3D游戏开发引擎,被广泛应用于游戏开发、虚拟现实(VR)、增强现实(AR)以及动画制作等领域。在Unity3D中,粒子系统是实现各种视觉特效的重要工具,比如火焰、烟雾、水波、漩涡等。本教程将...
在游戏开发中,尤其是对于3D游戏,资源的优化是至关重要的一步,而其中的核心之一就是对模型面数的控制。Unity3d与3dMax作为游戏开发中的两大工具,如何在两者之间进行高效的数据交换,以及如何在3dMax中合理控制...