是否有更好的方法重置Unity的冷却时间?

本文关键字:冷却 Unity 时间 更好 方法 是否 | 更新日期: 2023-09-27 18:08:24

我在Unity上用c#编程。当我需要在一定的时间间隔内重置一个变量时,我倾向于声明很多变量,并使用Update()函数来做我想做的事情。例如,以下是我重置技能冷却时间的代码(Shoot()在玩家按下射击键时被调用):

using UnityEngine;
using System.Collections;
public class Player : MonoBehavior
{
    private bool cooldown = false;
    private float shootTimer = 0f;
    private const float ShootInterval = 3f;
    void Update()
    {
        if (cooldown && Time.TimeSinceLevelLoad - shootTimer > ShootInterval)
        {
            cooldown = false;
        }
    }
    void Shoot()
    {
        if (!cooldown)
        {
            cooldown = true;
            shootTimer = Time.TimeSinceLevelLoad;
            //and shoot bullet...
        }
    }
}

是否有更好的方法来做同样的事情?我认为我现在的代码非常混乱,可读性很差。

是否有更好的方法重置Unity的冷却时间?

使用Invoke将为您节省大量变量。

public class Player : MonoBehavior
{
    private bool cooldown = false;
    private const float ShootInterval = 3f;
    void Shoot()
    {
        if (!cooldown)
        {
            cooldown = true;
            //and shoot bullet...
            Invoke("CoolDown", ShootInterval);
        }
    }
    void CoolDown()
    {
        cooldown = false;
    }
}

一种没有Invoke的更容易控制的方法:

public class Player : MonoBehavior
{
    private float cooldown = 0;
    private const float ShootInterval = 3f;
    void Shoot()
    {
        if(cooldown > 0)
            return;
        // shoot bullet
        cooldown = ShootInterval;
    }
    void Update() 
    {
        cooldown -= Time.deltaTime;
    }
}