项目里面一直在用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变化的时候调用一下下面这个方法。就是遍历一下当前保存的所有音频对象,从新设置一下他们的播放频率。
如果你有更好的建议,欢迎在下面给我留言,谢谢。
相关推荐
Unity3D教程手册如果您设置 Time.timeScale 为 0,但你仍然需要做一些处理(也就是说动画暂停菜单的飞入),可以使用 Time.realtim
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=...
ChronoHelper是Unity Editor的免费开源工具,可轻松控制PlayMode中的TimeScale。 当需要以慢动作检查游戏中的可疑时刻时,或者相反,最好跳过快进中不感兴趣的部分时,它变得非常方便。 用法 使用“窗口/ ...
所支持的Unity版本:5.0.1 及以上版本 Easy UI Motion allows you to animate your 2D full screen interfaces made with Unity UI, easily and visually. Manage Opening /closing effects, or simple effects on ...
unity 3D云彩资源包3D Cloud Models(unity2017.4版本可能无法使用) Features: * 15 low polygon models: Duplicate, move, rotate, and scale the clouds in your scene to create epic skies and artistic ...
Unity 要求 :2021.3.17或更高 文件大小:5.6 MB 修改: 1. Writer/Reader 支持 DataTime 2. NetworkRoomManager.ReadyStatusChange为虚方法 3. 可以为 pos/rot/scale 禁用NetworkTransform插值 4.NetworkBehaviour ...
Time Control and Pause Kit 时间控制和暂停套Unity插件unitypackage项目源码C# 支持Unity版本3.5.7或更高 时间控制和暂停套件是一个易于使用的脚本,允许您向项目添加完整的时间控制和暂停功能。 特征: - Unity ...
[Cisco官方出品CCIE.R&S系列教材].Cisco.Press.CCIE.Professional.Development.Large-Scale.IP.Network.Solutions.1999
Every day, companies struggle to scale critical applications. As traffic volume and data demands increase, these applications become more complicated and brittle, exposing risks and compromising ...
Unity3d关于Time.timeScale对于游戏时间及Update、LateUpdate、FixedUpdate的影响测试,配合博文使用https://blog.csdn.net/cube454517408/article/details/107496353
Unity3D视频播放Demo。 Unity版本2019.4.30f1。 功能:视频的进度条拖拽,音量的进度条拖拽,视频主要按钮功能,双击的放大与缩小。 适合直接用啦做视频模块,方法缩小位置和scale使用Dotween,可在,放大缩小并移动...
A Component that allows to animate some of its gameob ject's properties without sc ripting: Move, Fade, Color, Rotate, Scale, Punch, Shake, Text, Camera properties and more. Works also with 2D Toolkit...
Use for make Unity3D animations and particles not pause when you set the Time.timeScale to 0. It's useful when you want to play some pause menu animation or make some good effect while the game is ...
scale real-time embedded systems, as well as for advanced undergraduate or graduate courses in software engineering, computer engineering, and software design. Table of Contents Part I: Overview ...
jquery.timescale jquery时间标尺插件,可自定义刻度和回调事件,可根据容器长度自适应 公司做的图表需要一个时间标尺来切换同一天内不同时间段的图表内容 没找到合适的,只好自己写个 使用巨简单 clone后打开demo....
Unity分辨率抗锯齿插件MadGoat SSAA Resolution Scale v2.0.8 仅供学习,请勿商用。
Storm Applied is a practical guide to using Apache Storm for the real-world tasks associated with processing and analyzing real-time data streams. This immediately useful book starts by building a ...
An undertaking of this scale--involving services supported by a large team of engineers--involves unique challenges and risks. This book demonstrates through personal experience how to cut through the...
File: sf_estim.h Content: Scale factor estimation functions.
Function of differrent scale in X-Y direction in CAD.