尝试让程序等待几秒钟,然后使用Unity在C#中继续

尝试让程序等待几秒钟,然后使用Unity在C#中继续,c#,unity3d,unity5,C#,Unity3d,Unity5,我写了一些代码来让人工智能向前射击,但是人工智能射击的速度太快了,它会击中自己的子弹,它们会爆炸。我曾试图在两者之间增加一个延迟,但我不知道怎么做。这是我需要的代码部分。请帮忙,谢谢 private void Start() { m_FireButton = "Fire" + m_PlayerNumber; m_ChargeSpeed = (m_MaxLaunchForce - m_MinLaunchForce) / m_MaxChargeTime; } void OnTri

我写了一些代码来让人工智能向前射击,但是人工智能射击的速度太快了,它会击中自己的子弹,它们会爆炸。我曾试图在两者之间增加一个延迟,但我不知道怎么做。这是我需要的代码部分。请帮忙,谢谢

private void Start()
{
    m_FireButton = "Fire" + m_PlayerNumber;

    m_ChargeSpeed = (m_MaxLaunchForce - m_MinLaunchForce) / m_MaxChargeTime;
}

void OnTriggerStay(Collider other) {
    if (other.tag == "Player")  {
        Fire ();
        //This is where I want to add a delay!
    }
}

为了让这一切正常发生,你需要思考它失败的原因。原因是,对撞机内的每个FixedUpdate都会调用OnTiggerStay

你想要的是一种不同的方法

private bool isInside = false;
void OnTriggerEnter(Collider col){
    if(col.gameObject.CompareTag("Player") == false){ return; }
    isInside = true;
    Fire();
}
void OnTriggerExit(Collider col){
    if(col.gameObject.CompareTag("Player") == false){ return; }
    isInside = false;
    timer  = 0f;
}
private float timer = 0f;
private float waitTime = 0.2f;
void Update(){
    if(isInside == false) { return; }
    if(timer > waitTime){
        timer = 0f;
        Fire();
    }
    timer += Time.deltaTime;
}

它只是不工作,你能告诉我如何设置它吗。我对c#和unity还是有点陌生。这就是我来这里的原因你用的是“停留”而不是“进入”,就这么简单。但是您需要了解Unity中的简单
Invoke
调用。永远不要因为任何原因使用协同程序。这是一个包含代码的整个文件的链接。创建一个新的脚本,你不应该混合射击和移动,这些是分开的行动。上面的内容几乎就是整个代码。只需将Fire方法移动到新脚本。当它显示“需要API更新”时,我是否应该单击“确定”?可能是的。这似乎没有关系。但是是的,兄弟,非常感谢你。它有一些小错误,但我想我将能够修复它们。这就是为什么我爱你!你问了一个问题,马上就会得到答案。