我正在尝试降低拍摄频率,如下所示:

public class createShot : MonoBehaviour {

    public GameObject shot;

    void Update()
    {
        StartCoroutine("Shot");
    }

    IEnumerator Shot()
    {
        if (Input.GetKey("space"))
        {
            Instantiate(shot, transform.position, transform.rotation);
            yield return new WaitForSeconds(1f);
        }
    }
}


但是它可以在不到一秒钟的时间内发出大量垃圾邮件……有人可以帮忙吗?这是Unity5中的2D项目

最佳答案

也许您想要更多这样的东西:

float elapsedTime;
[SerializeField]
float targetTime = 1f;

void Update()
{
    elapsedTime += Time.deltaTime;

    if(elapsedTime >= targetTime && Input.GetKey(KeyCode.Space))
    {
        elapsedTime = 0;
        Instantiate(shot, transform.position, transform.rotation);
    }
}


这将增加计时器elapsedTime并检查是否超过了targetTime

我也鼓励您尽可能停止使用字符串。在调用方法或请求类似GetKey中的键的方法时,请勿使用它们。它们会产生垃圾并降低您的软件速度。

关于c# - 如何降低Unity2D中的实例化频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51126682/

10-10 05:19