Unity3d C# Time.deltaTime的简单介绍
Time.deltaTime在unity3d的游戏编程里面使用比较频繁,主要是用于解决一些游戏场景中的某些需要随着时间变化而改变状态的物体。
通俗理解Time.deltaTime
先理解一点,Update()函数是逐帧执行,就是每显示一帧,Update()函数里的代码都会执行一次,然而帧数的高低,就跟你的电脑配置有关系啦,所以逐帧执行就会存在一个问题,比如物体旋转,物体的位移,在相同的时间内,如果帧数不同,前后的效果也会不同。比如第一次是10秒钟执行了10帧,第二次是10秒执行了20帧,那么第一次和第二次,物体最终的旋转角度和位移前后是不一致的。为了使物体的运行情况不受帧率影响,并且在相同的时间内,运行情况都相同,那么就需要使用Time.deltaTime了。
文字举例
void Update()
{
//此处没有使用Time.deltaTime
//意思为每帧挂了该脚本的物体会旋转10度
this.transform.Rotate(new Vector3(0, 1, 0) * 10.0f);
}
上面↑代码意思就是,挂了该脚本的物体,每一帧就旋转10度,如果10秒执行了30帧,那么10秒钟该物体一共旋转了300度。
void Update()
{
//此处使用了Time.deltaTime
//意思为每秒钟挂了该脚本的物体会旋转10度
this.transform.Rotate(new Vector3(0, 1, 0) * 10.0f * Time.deltaTime);
}
上面↑代码的意思就是,挂了该脚本的物体,每秒钟旋转10度,到第10秒的时候,该物体就旋转了100度。
并且你会发现,该物体旋转的很平滑,给人很舒服的感觉,没有使用Time.deltaTime的话,给人的感觉就比较生硬。
代码举例(尽量让新手懂这个的用法)
在unity3d里面创建一个C#脚本,命名为test
以下代码复制粘贴即可,要实现每秒钟旋转10度,只需要把每帧旋转10度的代码注释掉即可,此处我都写出来是为了让大家方便比对两者的前后效果。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Update is called once per frame
void Update()
{
//需要哪行代码,把另一行注释掉即可
//此处没有使用Time.deltaTime
//意思为每帧挂了该脚本的物体会旋转10度
this.transform.Rotate(new Vector3(0, 1, 0) * 10.0f);
//此处使用了Time.deltaTime
//意思为每秒钟挂了该脚本的物体会旋转10度
this.transform.Rotate(new Vector3(0, 1, 0) * 10.0f * Time.deltaTime);
}
}
之后在unity3d界面内创建一个cube,再把该代码拖拽至cube上,就能看见cube的旋转啦,想要加强印象,两种情况的代码自己都要执行一次,看出两者间的差别,下次使用的时候,可根据需要自行选择是否使用Time.deltaTime噢~
该篇文章主要是写给对Time.deltaTime这个用法一点都不懂的新手,方便新手能快速理解Time.deltaTime主要用法。
第一次写文章,如有错误,欢迎批评指出~~谢谢啦!