延迟在事件上执行一行代码

时间:2016-08-29 11:04:25

标签: c# unity3d

在此代码中,我试图在不同位置的不同组中重新生成玩家。虽然代码将玩家成功传送到所需的位置,但是在二十分之后,玩家被传送到默认的重新生成的位置。

现在,这很好用。

有没有办法推迟player.Teleport()的执行,这样玩家可以在游戏将玩家传送到默认位置后传送?

尝试Thread.Sleep只会延误两个传送过程。

public void OnPlayerRespawn(UnturnedPlayer player, Vector3 position, byte angle)
{
    player.Teleport(HQLocation1);
}

2 个答案:

答案 0 :(得分:1)

如果没有参数可以这样做,你可以这样做:

public void OnPlayerRespawn(UnturnedPlayer player, Vector3 position, byte angle)
{    
    Invoke("TeleportPlayer", 5);
}

private void TeleportPlayer()
{
    player.Teleport(HQLocation1);
}

如果您需要参数,可以使用协程:

public void OnPlayerRespawn(UnturnedPlayer player, Vector3 position, byte angle)
{    
    StartCoroutine(TeleportPlayer(some parameters));
}

private IEnumerator TeleportPlayer(some parameters)
{
    // wait before doing other stuff
    yield return new WaitForSeconds(5);

    player.Teleport(HQLocation1);
}

答案 1 :(得分:0)

  

是否有任何方法可以延迟执行“player.Teleport”   在游戏将玩家传送到游戏后,玩家可以传送   默认位置?

是的,使用Invoke功能。第一个参数是要调用的函数,第二个参数是您希望它在调用函数之前等待多长时间。这也可以使用Coroutine完成,但Invoke更适合此简单任务。

public void OnPlayerRespawn(UnturnedPlayer player, Vector3 position, byte angle)
{
    Invoke("Teleport", 2);
}

void Teleport(){
    player.Teleport(HQLocation1);
}