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,物理模拟的固定时间步长。

Unity 自带的一些可以操控时间的属性或方法。_第1张图片

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

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

你可能感兴趣的:(unity,游戏引擎,c#)