1、Time.time 时间 (只读) 单位:秒
从游戏开始到到现在所用的时间
如果在第一个level(场景)逗留了5秒,在第二个场景逗留了2秒,现在处于第三个场景,第三个场景到现在已经运行了3秒,那么
此时的 Time.time=5+2+3=10s
2、Time.timeSinceLevelLoad 从加载当前关卡到现在的时间 (只读) 单位:秒
加载本关卡开始到现在所用的时间。
如果在第一个level(场景)逗留了5秒,现在处于第二个场景,第二个场景到现在已经运行了3秒,
那么在第二个场景得到的timeSinceLevelLoad为: Time.timeSinceLevelLoad=3s
3、Time.deltaTime 增量时间 (只读) 单位:秒
使用这个函数使您的游戏帧率独立
放在Update()函数中的代码是以帧来执行的.如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime
无论是从第一场景,还是第二场景,Time.deltaTime 差不多等于 0.01656....他的功能就是使对象与帧率无关,而是以秒来
进行它的操作,至于原因是什么,这篇文章里已有解释:http://www.cnblogs.com/MrZivChu/p/normalclass.html
void Update() { float translation = Time.deltaTime * 10; transform.Translate(0, 0, translation); //乘以 Time.deltaTime 表示此对象每秒移动10米,而不是每帧移动10米 }
4、Time.fixedTime 固定时间 (只读) 单位:秒
这是以秒计自游戏开始的时间。
输出的时间和Time.time 差不多一样!
固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
5、Time.fixedDeltaTime 固定增量时间 单位:秒
在物理和其他固定帧速率进行更新
和Time.deltaTime差不多,无论是从第一场景,还是第二场景,Time.fixedDeltaTime 都等于 0.02
其值可以在Edit -> Project Settings -> Time 下进行设置
受Time.timeScale 影响
这个可以用Time.deltaTime取代,因为如果你在FixedUpdate或者Update方法内部的话,他会自动返回正确的增量时间
6、Time.maximumDeltaTime 最大增量时间
一帧能获得的最大时间。物理和其他固定帧速率更新(像FixedUpdate)。
和Time.deltaTime差不多,无论是从第一场景,还是第二场景,Time.maximumDeltaTime 等于 0.333333
其值可以在
Edit -> Project Settings -> Time 下进行设置
建议保持最长时间框架1/10th和1/3th秒之间 ( 0.1 ~ 0.3333333....)
7、Time.smoothDeltaTime 平滑增量时间 (只读)
一个平滑淡出Time.deltaTime
和Time.deltaTime差不多,无论是从第一场景,还是第二场景,Time.smoothDeltaTime 差不多等于 0.01656....
8、Time.timeScale 时间缩放
传递时间的缩放。这可以用于减慢运动效果。
当timeScale传递时间1.0时和实时时间一样快。当timeScale传递时间0.5时比实时时间慢一半。
当timeScale传递时间为0时游戏基本上暂停了,如果你的所有函数是和帧速率无关的。
除了realtimeSinceStartup,timeScale影响所有时间和增量时间基于Time类的变量。
如果降低timeScale,建议也降低Time.fixedDeltaTime同样的数值。
当timescale设置为0时,FixedUpdate函数将不会被调用。
Invoke, yield 等函数会受 Time.timeScale 影响
Unity3D提供了一个十分方便的调节时间的函数Time.timeScale。对于初次使用Unity3D的使用者,
会误导性的认为Time.timeScale同样可以适用于游戏中的暂停(Pause)和开始(Resume)。
所以很多人有习惯写:
Time.timeScale = 0.0f
对于游戏的暂停/开始,是游戏系统设计的一部分,而Time.timeScale不是用于这个部分的操作。
正确的做法应该是搜集需要暂停的脚本或 GameObject,
通过设置他们的enabled = false 来停止他们的脚本活动或者通过特定函数来设置这些物件暂停时需要关闭那些操作。
Time.timeScale 更多的是用于游戏中慢镜头的播放等操作,在服务器端主导的游戏中更应该避免此类操作。
值得一提的是,Unity3D的许多时间相关的函数都和 timeScale挂钩,而timeScale = 0.0f将使这些函数或动画处于完全停止的状态,这也是为什么它不适合做暂停操作的主要原因。
这里列出受timeScale影响的一些主要函数和Component:
MonoBehaviour.Invoke(…)
MonoBehaviour.InvokeRepeating(…)
yield WaitForSeconds(…)
GameObject.Destroy(…)
Animation Component
Time.time, Time.deltaTime
…
9、Time.frameCount 帧数 (只读)
已经传递的帧的总数。
如果第一场景加载了32帧,此时处在第二场景,到现在第二场景已经加载了18帧
那么此时Time.frameCount = 32+18=50
10、Time.realtimeSinceStartup 自游戏开始实时时间 (只读) 单位:秒
自游戏开始的实时时间
在几乎所有情况下,你应该使用Time.time代替。
但是他不被Time.timeScale影响,即使被玩家暂停realtimeSinceStartup也将保持增加(在后台)。当你想通过设置
Time.timeScale为0暂停游戏时,使用realtimeSinceStartup是很有用的。
11、Time.captureFramerate 捕获帧速率
如果captureFramerate设置比0大的值,时间会在每帧 (1.0 / captureFramerate) 前进,不考虑真实时间。如果你想捕获一个
视频,你需要一个固定的帧速率,这个是很有用的。
你需要一个持续的帧率和帧之间留出足够的时间来保存屏幕图像。
捕捉帧率或者说限定帧率,电视帧率是30,电影是24每秒,为了某些原因比如模拟电影效果或者其他原因,用这个设定每秒钟的
帧速
public string folder = "ScreenshotFolder"; public int frameRate = 25; void Start() { Time.captureFramerate = frameRate; System.IO.Directory.CreateDirectory(folder); } void Update() { string name = String.Format("{0}/{1:D04} shot.png", folder, Time.frameCount); Application.CaptureScreenshot(name); }