当前位置: 首页 > news >正文

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。

1、Time.time。比较常用计算运行时间而触发特定事件。

public class Controller : MonoBehaviour
{public float eventTime = 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startTime = Time.time; // 记录游戏开始的时间}private void Update(){if (Time.time - startTime >= eventTime){// 达到触发事件的时间,执行特定事件DoSomething();}}private void DoSomething(){// 特定事件Debug.Log("Event triggered!");}
}

2、Time.deltaTime,参考这篇笔记:关于Unity Time.deltaTime的理解和使用-CSDN博客

3、WaitForSeconds,协程。延时最适合。

public class Controller : MonoBehaviour
{    private void Start(){StartCoroutine(DelayCoroutine());}private IEnumerator DelayCoroutine(){       yield return new WaitForSeconds(1f);Debug.Log("我延迟了1秒");        }
}

4、Time.timeScale,这个属性可用于控制游戏的时间流逝速度。将其设置为1表示正常速度,大于1表示加速,小于1表示减速,设置为0表示暂停。如下面模拟加减速的一个案例:

using UnityEngine;
using UnityEngine.UI;public class Controller : MonoBehaviour
{public float accelerationTime = 1f; // 加速时间public float decelerationTime = 1f; // 减速时间public float pauseTime = 1f; // 暂停时间public Image image; // 图片对象private float targetTimeScale = 1f; // 目标时间缩放值private float currentTimeScale = 1f; // 当前时间缩放值private float timeScaleVelocity; // 时间缩放值的变化速度private float rotationSpeed = 500f; // 图片旋转速度private int currentState = 0; // 当前状态,0表示加速,1表示减速,2表示暂停private float stateTimer = 0f; // 状态计时器private void Update(){// 根据目标时间缩放值逐渐调整当前时间缩放值currentTimeScale = Mathf.SmoothDamp(currentTimeScale, targetTimeScale, ref timeScaleVelocity, GetTimeScaleChangeDuration());// 应用当前时间缩放值Time.timeScale = currentTimeScale;// 根据当前时间缩放值调整图片的旋转角度image.rectTransform.Rotate(Vector3.forward, rotationSpeed * Time.deltaTime * currentTimeScale);// 更新状态计时器stateTimer += Time.deltaTime;// 根据当前状态和状态计时器切换目标时间缩放值switch (currentState){case 0: // 加速状态if (stateTimer >= accelerationTime){stateTimer = 0f;targetTimeScale = 0.5f; // 切换到减速状态currentState = 1;}break;case 1: // 减速状态if (stateTimer >= decelerationTime){stateTimer = 0f;targetTimeScale = 0f; // 切换到暂停状态currentState = 2;}break;case 2: // 暂停状态if (stateTimer >= pauseTime){stateTimer = 0f;targetTimeScale = 2f; // 切换到加速状态currentState = 0;}break;}}private float GetTimeScaleChangeDuration(){if (targetTimeScale > currentTimeScale){return accelerationTime; // 如果目标时间缩放值大于当前时间缩放值,则返回加速时间}else{return decelerationTime; // 如果目标时间缩放值小于当前时间缩放值,则返回减速时间}}
}

Unity模拟加减速_哔哩哔哩_bilibili 

5、Time.fixedDeltaTime,物理模拟的固定时间步长。

在Project Settings中Time的Fixed Timestep可设置它的值。

Time.fixedDeltaTime跟Time.deltaTime最大的区别是Time.fixedDeltaTime不受帧率影响,它的时间是固定的。

http://www.lryc.cn/news/246877.html

相关文章:

  • vue 项目中使用 mqtt
  • linux shell操作 - 05 进程 与 IO 模型
  • 让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发
  • Mybatis反射工厂类DefaultReflectorFactory
  • antDesignPro a-table样式二次封装
  • 找免费4K高清图片素材,就上这6个网站
  • 代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • 成为AI产品经理——TPR、FPR、ROC、AUC
  • java: Internal error in the mapping processor: java.lang.NullPointerException
  • TCP知识点
  • 大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)
  • 顶级数据恢复工具—— 最全的15个数据恢复软件榜单
  • 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解
  • Ubuntu 22.03 LTS 安装deepin-terminal 实现 终端 分屏
  • HTTP协议,Web框架回顾
  • el-checkbox 对勾颜色调整
  • 系统管理精要:深度探索 Linux 监控与管理利器
  • vue3之echarts渐变柱状图
  • 有一种浪漫,叫接触Linux
  • 构建 App 的方法
  • laravel实现发送邮件功能
  • 概要设计检查单、需求规格说明检查单
  • 达梦列式存储和clickhouse基准测试
  • 【Web】NewStarCtf Week2 个人复现
  • Python实现Windows服务自启动、禁用、启动、停止、删除
  • 【华为OD题库-043】二维伞的雨滴效应-java
  • 百度手机浏览器关键词排名优化——提升关键词排名 开源百度小程序源码系统 附带完整的搭建教程
  • Git 的基本概念和使用方式。
  • MarkDown学习
  • 案例:某电子产品电商平台借助监控易保障网络正常运行