2016-02-28 516 views
2

我正在编写一些代码,以使AI拍摄向前,但AI射击速度如此之快,以至于它会击中它自己的子弹,并且会爆炸。我试图在两者之间添加延迟,但我不知道如何去做。这是我需要的代码的一部分。请帮忙,谢谢!试图让程序等待几秒钟,然后继续在C#中使用Unity

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! 
    } 
} 
+0

它只是不工作,你能告诉我如何设置它。我对c#和团结仍然有点新鲜。这就是我为什么来到这里的原因 – alexo1001

+0

你正在使用“保留”而不是“输入”,就是这么简单。 **但是您需要了解Unity中简单的'Invoke'调用。**永远不要使用任何原因的协程。 – Fattie

回答

2

为了正确地发生这种情况,您需要考虑它为什么会失败。原因在于OnTriggerStay会针对玩家在对撞机内的每个固定更新进行调用。

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

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; 
} 
+0

这是通过代码链接到整个文件的链接。 https://gist.github.com/alexo1001/f371e6a2e17f4d492c3d – alexo1001

+0

创建一个新的脚本,你不应该混合拍摄和运动,这些是分开的行动。以上是几乎所有的代码。只需将Fire方法移至该新脚本即可。 – Everts

+0

当我说“需要更新API”时,我应该点击“确定”吗?可能是。 – alexo1001

相关问题