Dav*_*vid 4 c# invoke unity-game-engine
void Update()
{
if (currentTarget != null)
{
this.Invoke("Shoot(currentTarget)", 0.3f);
}
}
void Shoot(Collider currentTarget)
{
.......
}
Run Code Online (Sandbox Code Playgroud)
我希望快速调用 Shoot 方法。但我得到的只是
Trying to Invoke method: Tower.Shoot(currentTarget) couldn't be called.
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
您不能使用 参数调用 Invoke 。如果您从 Shoot 函数中删除参数,这应该可以工作。
Invoke("Shoot", 3f);
Run Code Online (Sandbox Code Playgroud)
那么你的拍摄功能应该是这样的
void Shoot(){
}
Run Code Online (Sandbox Code Playgroud)
代替
void Shoot(string...parameter){
}
Run Code Online (Sandbox Code Playgroud)
在您发表评论之后,还有另一种方法可以做到这一点。这需要“协程”。
IEnumerator Shoot(Collider currentTarget, float delayTime)
{
yield return new WaitForSeconds(delayTime);
//You can then put your code below
//......your code
}
Run Code Online (Sandbox Code Playgroud)
你不能直接调用它。例如,您不能这样做:
Shoot(currentTarget, 1f) ;
你必须使用 **StartCoroutine**(Shoot(currentTarget, 1f));
void Start()
{
//Call your function
StartCoroutine(Shoot(currentTarget, 1f));
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您不喜欢使用StartCoroutine,那么您可以在另一个普通函数中调用 Coroutine 函数。我想你可能喜欢这个方法,所以整个代码应该如下所示:
//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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,无论何时您想呼叫 Shoot,现在都可以毫无问题地进行呼叫Shoot(currentTarget, 1f); 。