2016-03-04 78 views
1
void Update() 
{ 
    if (currentTarget != null) 
    { 
     this.Invoke("Shoot(currentTarget)", 0.3f); 
    } 
} 

void Shoot(Collider currentTarget) 
{ 
    ....... 
} 

我希望快速調用拍攝方法。但我得到的是嘗試在統一中調用方法。不能調用方法

Trying to Invoke method: Tower.Shoot(currentTarget) couldn't be called. 

什麼可以是問題?

+0

什麼語言? C#或Javascript?拍攝功能在哪裏?在另一班還是同班? – Programmer

+0

C#,在同一個班級 – David

+0

已更新我的回答 – Programmer

回答

3

不能調用來調用參數。這應該工作,如果你從您的拍攝功能刪除參數。

Invoke("Shoot", 3f); 

然後你的拍攝功能應該是這樣的

void Shoot(){ 
} 

,而不是

void Shoot(string...parameter){ 
} 

您的評論後,有另一種方式來做到這一點。這需要「協同程序」。

IEnumerator Shoot(Collider currentTarget, float delayTime) 
    { 
     yield return new WaitForSeconds(delayTime); 
     //You can then put your code below 
     //......your code 
    } 

你不能直接調用它。例如,你不能這樣做: Shoot(currentTarget, 1f);

如果你不喜歡使用StartCoroutine您必須使用**StartCoroutine**(Shoot(currentTarget, 1f));

void Start() 
{ 
    //Call your function 
    StartCoroutine(Shoot(currentTarget, 1f)); 
} 

而且,那麼你可以調用內的另一個功能正常的協程功能。我想你可能會喜歡這種方法使整個代碼看起來應該像下面的東西:

//Changed the name to **ShootIEnum** 
IEnumerator ShootIEnum(Collider currentTarget, float delayTime=0f) 
    { 
     yield return new WaitForSeconds(delayTime); 
     //You can then put your code below 
     //......your code 
    } 

//You call this function 
void Shoot(Collider currentTarget, float delayTime=0f) 
{ 
StartCoroutine(ShootIEnum(currentTarget, 1f)); 
} 

void Update() 
    { 
     if (currentTarget != null) 
     { 
      Shoot(currentTarget, 0.3f); 
     } 
    } 

現在,任何時候你想打電話拍攝,你可以現在沒有問題致電Shoot(currentTarget, 1f);

+0

但是,如果我必須使用參數調用Shoot,該怎麼辦?任何其他方式而不是使用Invoke? – David

+1

是的。我剛剛更新了它。我展示瞭如何從Start函數調用它。你不能直接調用它。您必須使用「StartCoroutine」。 StartCoroutine(拍攝(currentTarget,1f)); – Programmer

+0

無論如何,我認爲這會產生錯誤的效果。 在我的代碼更新期間,我檢查目標是否還活着,然後拍攝。但問題是它開始連續拍攝。我想我有一些邏輯問題。你怎麼想 ? – David

相關問題