2016-02-28 515 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

相關問題