Time 类用的最多的 应该就是Time.deltime; 第一次接触Time类的也是 这个属性,这个就是 上一帧的偏移量,
电脑 完成 上一帧 到现在 这一帧的时间 。

简单计时器

  float Timer=0.0f;float WaitTime=1.0f;Update(){//check inputif (Input.GetKey(KeyCode.Space)){Timer += Time.deltaTime;if (Timer>WaitTime){Timer -= WaitTime;//Do Something    Instantiate(Bullect)GameObject bullectGo = Instantiate(Bullect, transform.position transform.rotation);bullectGo.GetComponent<Rigidbody>().AddForce(transform.forward * 1000);}}
}

上面这个伪代码就是 每过1秒 做些事情, 如如 按下 space键 每秒发射一颗子弹。
这里 比较粗糙,只是说说应用,就是一个简单 的计时器功能。

FPS游戏 子弹 应该有个 对象池管理,然后子弹身上也应该有自己的数据脚本,它自己的生命周期,速度,伤害,威力,作用对象…等等。

在生命周期函数 update里
因为每个 电脑性能都不一样,更新的频率也不一样,所以偏移量也 会因此不同。
这里如果只是要处理一些简单的 逻辑 就可以直接 用简单的计时器,
如果 复杂点的可以 用协同程序来解决

   IEnumerator waitTimer(float timer){yield return new WaitForSeconds(timer);//Do somthingyield return new WaitForSeconds(timer);//Do .... while (true){if (condition){break;}//在所有相机和GUI渲染之后,等待直到帧结束,就在屏幕上显示帧之前。yield return new WaitForEndOfFrame();  }}

协同程序背后也是一个迭代器机制。用状态机完成。
使用前 要先Stop下保证单一协同程序执行。因为协同程序 不允许同时出现。

Time.realtimeSinceStartup
游戏开始后开始读秒,真实时间线

Time.time
游戏(帧)开始的时间
Time.smoothDeltaTime
平滑的Time.DeltaTime 防止帧数波动过大, 不同机器性能不一样。

Time.frameCount 计算 帧数。 应该就是每次 传递的帧的总数了。
这个 可以用来截图, 因为帧数 是一直增加的,截图无非就是截下某一帧的画面。
Unity在 ScreenCapture类 里提供了**CaptureScreenshot()**方法。在指定目录下生成一张截取游戏屏幕的图片。

下面是小例子,来自Unity官方。

    #region 截图  captureFramerate的 应用public string folder = "ScreenshotFolder";public int frameRate = 25;#endregionvoid Start(){//设置播放帧数(在此之后,实时将不与游戏时间相关)。Time.captureFramerate = frameRate;//创建目录System.IO.Directory.CreateDirectory(folder);}private void OnGUI(){#region captureFramerateif (GUILayout.Button(new GUIContent("截图","截图工具"))){//将文件名附加到文件夹名(格式为“帧数 shot.png”)string name = string.Format("{0}/{1:D04} shot.png", folder, Time.frameCount);//  在指定 目录下捕获 屏幕截图ScreenCapture.CaptureScreenshot(name);}#endregion}

Time.timeSinceLevelLoad
加载关卡以来用的时间
在 加载 新场景的时间 会重置。

Time.timeScale 时间流逝的速率, 影响Time的流逝。0.5是 放慢时间速率 放慢2倍。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class TestTime : MonoBehaviour
{// Start is called before the first frame update#region 截图  captureFramerate的 应用public string folder = "ScreenshotFolder";public int frameRate = 25;public bool isFire=false;#endregionfloat Timer = 0.0f;public float WaitTime = 1.0f;public GameObject Bullect;public float TimeScaleRate=1;void Start(){DontDestroyOnLoad(this);//设置播放帧数(在此之后,实时将不与游戏时间相关)。Time.captureFramerate = frameRate;//创建目录System.IO.Directory.CreateDirectory(folder);}private void OnGUI(){GUILayout.Space(20);GUILayout.Label("RealTime(游戏开始后开始读秒,真实时间线):" + Time.realtimeSinceStartup);GUILayout.Label("Time.Time(游戏(帧)开始的时间):" + Time.time);GUILayout.Label("Time.smoothDelaTime:" + Time.smoothDeltaTime);GUILayout.Label("Time.captureFramerate(减慢游戏播放时间,以便在帧之间保存屏幕截图):" + Time.captureFramerate);GUILayout.Label("Time.timeSinceLevelLoad (加载关卡以来的时间):" + Time.timeSinceLevelLoad);GUILayout.TextArea("renderedFrameCount:" + Time.renderedFrameCount);//GUIStyle slider = new GUIStyle(GUI.skin.horizontalSlider);//GUIStyle sliderThumb = new GUIStyle(GUI.skin.horizontalSliderThumb);//TimeScaleRate= GUI.HorizontalSlider(new Rect(Screen.width / 8, Screen.height / 4, Screen.width - (4 * Screen.width / 8), Screen.height - (2 * Screen.height/ 4)),TimeScaleRate, 0, 10,slider,sliderThumb);//Time.timeScale = TimeScaleRate;//slider.fixedHeight = Screen.height / 32;//slider.fixedWidth = 12*(Screen.width / 200);//sliderThumb.fixedHeight = Screen.height / 8;//sliderThumb.fixedWidth = Screen.width / 8;#region captureFramerateif (GUILayout.Button(new GUIContent("截图","截图工具"))){//将文件名附加到文件夹名(格式为“帧数 shot.png”)string name = string.Format("{0}/{1:D04} shot.png", folder, Time.frameCount);//  在指定 目录下捕获 屏幕截图ScreenCapture.CaptureScreenshot(name);}#endregionif (GUILayout.Button("Time.timeSinceLevelLoad")){Debug.Log ("Time.timeSinceLevelLoad:要加载了场景,就会重新计算");SceneManager.LoadScene(0);}if (GUILayout.Button("Fire a bullect per second")){isFire = !isFire;}}// Update is called once per framevoid Update(){if (isFire){if (Input.GetKey(KeyCode.Space)){Timer += Time.deltaTime;if (Timer > WaitTime){Timer -= WaitTime;GameObject bullectGo = Instantiate(Bullect, transform.position ,transform.rotation);bullectGo.GetComponent<Rigidbody>().AddForce(transform.forward * 1000);}}}}}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TimeDealTimeExp : MonoBehaviour
{float waitTime = 2.0f;private float timer = 0.0f;float visualTime = 0.0f;int width, height;float value = 10.0f;float scrollBar=1.0f;private void Awake(){width = Screen.width;height = Screen.height;Time.timeScale = scrollBar;Debug.Log((int)5.5f);Debug.Log("Mathf.RoundToInt(10.5f):" + Mathf.RoundToInt(10.5f));Debug.Log("Mathf.RoundToInt(10.6f):" + Mathf.RoundToInt(10.6f));Debug.Log("10.4f:" + Mathf.RoundToInt(10.4f));Debug.Log("-10.5f:" + Mathf.RoundToInt(-10.5f));Debug.Log("-10.4f:" + Mathf.RoundToInt(-10.4f));Debug.Log("-10.6f:" + Mathf.RoundToInt(-10.6f));Debug.Log("Mathf.RoundToInt(-11.5f):" + Mathf.RoundToInt(-11.5f));Debug.Log("-12.5f:" + Mathf.RoundToInt(-12.5f));Debug.Log("f1:"+5.555f.ToString("f1"));Debug.Log("f2:"+5.555f.ToString("f2"));Debug.Log("f3:"+5.5555f.ToString("f3"));Debug.Log("四舍五入,结尾是0.5f ,奇偶 放回偶");}   // Update is called once per framevoid Update(){timer += Time.deltaTime;// 检查是否超过2秒// 到达时间2秒  减去2   会比重置为0精确if (timer>waitTime){visualTime = timer;timer = timer - waitTime;Time.timeScale = scrollBar;}}private void OnGUI(){GUIStyle sliderDetails = new GUIStyle(GUI.skin.GetStyle("horizontalSlider"));GUIStyle sliderThumbDetails = new GUIStyle(GUI.skin.GetStyle("horizontalSliderThumb"));GUIStyle labelDelDetails = new GUIStyle(GUI.skin.GetStyle("laber"));labelDelDetails.fontSize=6*(width/200);sliderDetails.fixedHeight = height / 32;sliderDetails.fontSize = 12 * (width / 200);sliderThumbDetails.fixedHeight = height / 32;sliderThumbDetails.fixedWidth = width / 32;//显示 滑动条 使比例比需要的尺寸 大10倍value = GUI.HorizontalSlider(new Rect(width / 8, height / 4, width - (4 * width / 8), height - (2 * height / 4)), value, 5.0f, 20.0f, sliderDetails, sliderThumbDetails);//显示 滑动条的值,从0.5 以此 递增 0.1 到2.0 显示float v = ((float)Mathf.RoundToInt(value)) / 10.0f;GUI.Label(new Rect(width / 8, height / 3.25f, width - (2 * width / 8), height - (2 * height / 4)), "time.TimeScale:" + v.ToString("f1"), labelDelDetails);scrollBar = v;//以一定的大小显示 记录的时间labelDelDetails.fontSize = 14 * (width / 200);GUI.Label(new Rect(width / 8, height / 2, width - (2 * width / 8), height - (2 * height / 4)), "Timer value is: " + visualTime.ToString("f1") + " seconds.", labelDelDetails);}
}

UnityEngine下Time 类的学习,时间管理器,计时器,时间线,相关推荐

  1. 不要在学习启动管理器和元编程上浪费时间

    为什么说不要浪费时间在启动管理器上 启动管理器是指引导操作系统启动的一段程序.常见的启动管理器有windows boot manager和grub,这两个都是x86 PC体系里的,macOS和Andr ...

  2. 学习时间管理,让程序猿一生过得更加自由

    最近跟随老师去学习易效能时间管理公开课,虽然只是个公开课,但是也收获满满的,改善了我的拖延症,做事效率提高了很多,时间的分配比以前也科学多了-可见易效能时间管理课程叶武滨老师的功力非凡啊! 下面分享一 ...

  3. java创建日程到期提醒_Mac用户必备日程时间管理器,有计划有效率的人生才算完美!...

    有计划的人,才会产生强大的行动力,才会充满激情的去工作,因为他知道下一步该做什么,目标明确的人,一定会成功,所以,有计划有效率的人生才算完美! 每天的日程安排的满满的,没有一款规划任务,提高效率的GT ...

  4. libevent源码学习-----时间管理

    libevent监听的event有以下几种 文件描述符/套接字,没有设定超时时长 信号 文件描述符/套接字,设定超时时长 对于时间,libevent内部的时间管理是通过最小堆实现的,原因如下 既然某些 ...

  5. 跟sheldon学习时间管理

    (本文转自温泉老师的博客|学生的时间管理与自我提高|CandyApe|,话说温泉老师是我们来自豆瓣的一位好友买家,从他这篇文章充分印证了古人"淫者见淫,智者见智"的理论-- 平日最 ...

  6. 学习时间管理,就要我们吃青蛙!这是什么梗?

    时间管理,就要我们吃掉一只又大又丑的青蛙?我选择狗带... 说到吃青蛙,大家或许会觉得恶心,所幸,这里的吃青蛙并不是指我们生活中的青蛙.当然假如你有特殊爱好的,我也不能阻止. 返回正题,本文中所说的& ...

  7. android被逼学习布局管理器

    先来说说android里面的线性布局吧.线性布局用LinearLayout代表,他不仅可以水平的线性布局,也可以在垂直方向上进行线性布局,使用    android:orientation=" ...

  8. linux下添加mq队列管理配置,linux下 MQ第二弹:队列管理器的配置,实现双机MQI通道异步双向通信,亲测!!...

    本人前面文章一提到MQ 在linux下的安装,在此只描述队列管理器的配置,实现MQI通道的双向通讯. 一下方法我已亲测!! 贴出A,B两机的MQ配置记录: A机: #**--------------- ...

  9. 腾讯通服务器文件数据源,腾讯通RTX管理器打开时提示找不到数据源,怎么办?...

    1.关掉管理器,点击电脑左下角开始菜单,在运行中输入services.msc回车,找到RTX_ConfigCenter. RTX_HTTPServer.RTX_SvrMain,将这三项服务按顺序重启一 ...

最新文章

  1. linux驱动开发字符设备,linux驱动开发(三) 字符设备驱动框架
  2. 并发编程——进程——进程的同步与数据共享
  3. python将小时数换成分钟_如何在Python中将datetime.timedelta转换为分钟、小时?
  4. html链接是什么意思,html中url什么意思?怎么用?
  5. ASCII码表及说明
  6. MyEclipse+JavaEE+jsp+sqlsever实现产品售后服务系统
  7. 华为防火墙Edumon1000E配置
  8. OpenSatck Ironic实现裸机管理
  9. Hadoop MapReduce编程 API入门系列之join(二十六)
  10. html 中的特殊字符转义,html拼接字符串中特殊字符(‘ “ 等的转义问题)
  11. NMEA-0183 协议
  12. tune声场测试软件_SIA SmaartLive(声场测试软件) V7.2.1 官方版
  13. python———两个栈实现一个队列
  14. HTML学生个人网站作业设计:动漫网站设计——哆啦A梦(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  15. lqr算法 c语言,【CS229 lecture18】linear quadratic regulation(LQR) 線性二次型調節控制
  16. 今日恐慌与贪婪指数为24 恐慌程度有所缓解
  17. Manim文档及源码笔记-CE文档-主题化指南3渲染文本和公式
  18. 光学基础概念(camera相关)
  19. Lwip从入门到放弃之(一)---基础网络知识扫盲
  20. pixel 6手机连接wifi,网络受限

热门文章

  1. FineReport数据本地连接
  2. OCAD应用:二组元连续变焦系统
  3. 移动端常用的几种适配方案
  4. 音视频处理之PS封装的介绍与使用
  5. LPRNet, 车牌识别网络
  6. 手把手教你实现手绘风格图形
  7. 玩转excel===Excel处理txt文件中的数据,Excel中的分列处理
  8. SPI message 基础 Part 2
  9. PostgresConf.CN2020PGconf.Asia亚洲大会精彩回顾
  10. esp32 、stm32 移植串口调试命令linenoise