那个企业网站是用vue做的,长沙装修网,哪些网站可以做海报热点的,如何建立一个网站并运行类似于小红书的大家好#xff0c;我是阿赵。 这期来说一下Unity的TimeScale。
一、前言 Unity提供了Time这个类#xff0c;来控制时间。其实我自己倒是很少使用这个Time#xff0c;因为做网络同步的游戏#xff0c;一般是需要同步服务器时间#xff0c;所以我比较多是在使用System.Date…大家好我是阿赵。 这期来说一下Unity的TimeScale。
一、前言 Unity提供了Time这个类来控制时间。其实我自己倒是很少使用这个Time因为做网络同步的游戏一般是需要同步服务器时间所以我比较多是在使用System.DateTime获取系统时间再定一个时间间隔和服务器同步当前时间来维持一个客户端和服务器的时间同步。 不过Unity的Time方法也是有比较有用的时候特别是Time.timeScale时间缩放这个属性它可以整体的加快或者减慢甚至暂停Unity里面动画播放。 不过这个TimeScale也是会引起一些问题的所以在使用之前必须对它的影响范围做一个详细了解。
二、Demo TimeScale对Unity的所有动画组件都是起作用的包括了Animation、Animator、粒子发射器等。接下来看看它对脚本运行的影响。 这里写一个简单的Demo实际看看TimeScale的变化时一些我们比较关心的方法调用有什么影响。
using UnityEngine;public class TestTimeScale : MonoBehaviour
{private float passTime 0;private float fixedPassTime 0;private float updateTime 0;private float fixedUpdateTime 0;private float lateUpdateTime 0;private float[] timeArray new float[] { 0, 0.1f, 1, 3 };// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){passTime Time.deltaTime;updateTime 1;}void FixedUpdate(){fixedPassTime Time.fixedDeltaTime;fixedUpdateTime 1;}private void LateUpdate(){lateUpdateTime 1;}void OnGUI(){GUILayout.BeginHorizontal();GUILayout.Box(Time.timeScale );for(int i 0;itimeArray.Length;i){if(OneButton(timeArray[i] x)){Time.timeScale timeArray[i];}}GUILayout.EndHorizontal();GUILayout.Label(Time.time:Time.time);GUILayout.Label(passTime: passTime);GUILayout.Label(fixedPassTime: passTime);GUILayout.Label(updateTime: updateTime);GUILayout.Label(fixedUpdateTime: fixedUpdateTime);GUILayout.Label(lateUpdateTime: lateUpdateTime);GUILayout.Label(Time.deltaTime: Time.deltaTime);GUILayout.Label(Time.fixedDeltaTime: Time.fixedDeltaTime);GUILayout.Label(Time.fixedTime: Time.fixedTime);GUILayout.Label(Time.fixedUnscaledDeltaTime: Time.fixedUnscaledDeltaTime);GUILayout.Label(Time.realtimeSinceStartup: Time.realtimeSinceStartup);}private bool OneButton(string content){return GUILayout.Button(content, GUILayout.Width(100), GUILayout.Height(40));}
}运行demo会看到上面有几个调整TimeScale的按钮分别把TimeScale设置成0、 0.1 、1 、3。然后下面有一些当前数值的变化显示。
三、分析
1、Update类
1.Update 通过观察demo里面的updateTime 可以发现Update方法的调用频率是不会受到TimeScale的变化的影响的。
2.FixedUpdate 通过观察demo里面的fixedUpdateTime 可以发现FixedUpdate方法是受到TimeScale影响的当TimeScale变成0的时候值就不会增长了当TimeScale值变大那时调用的频率也会变快。
3.LateUpdate 通过观察demo里面的lateUpdateTime 可以发现LateUpdate方法调用不受TimeScale的影响。
2、时间运行类
1.Time.time 这个时间是从开始游戏到当前帧开始的时间从demo运行可以看出这个时间是会受到TimeScale的影响的当TimeScale变成0的时候它就不会增长了。
2.Time.fixedTime 这个时间是从游戏开始运行到最后一次FixedUpdate方法调用的时间从上面可以指定FixedUpdate是受到TimeScale的影响的所以Time.fixedTime同样也会受到TimeScale的影响。
3.Time.realtimeSinceStartup 这个时间是从游戏开始运行到当前的实际时间。从demo可以看出这个时间是不会受到TimeScale的影响的。所以如果想做一个不受TimeScale影响的计时器可以使用这个。不过我还是更习惯于使用系统时间。
3、时间间隔类
1.Time.deltaTime 这个时间是从上一帧到当前帧所过的时间。我们经常会使用speedTime.deltaTime来做一些准确限制速度的程序动画。 从demo可以看出Time.deltaTime是会受到TimeScale的影响的TimeScale的值越大Time.deltaTime的值也就越大。所以通过在UpDate方法里面计算speedTime.deltaTime来做动画时当调大了TimeScale的值那么动画的速度也会变快。
2.Time.fixedDeltaTime 从demo可以看出Time.fixedDeltaTime是不会受到TimeScale的影响的它默认是0.02然后我们调节TimeScale的值Time.fixedDeltaTime是不会变化的。 值得注意的是上面列举的所有参数都是只读的但是Time.fixedDeltaTime却是可读写的。这个是非常有意义的事情来的。如果我们使用speedTime.deltaTime来做动画动画会跟随这TimeScale变快但如果我们有一部分动画的速度不想跟随着TimeScale变化那么就可以用speedTime.fixedDeltaTime来计算。而且我们还可以自己调节fixedDeltaTime的值来单独控制这部分动画的快慢。