unity3d 无法更改游戏对象的位置

rvpgvaaj  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(177)

我试图将玩家传送到一定的距离。我使用了Gameobject.transform.position += new Vector3(0,9,0);,它似乎在很短的时间内改变了位置,并以某种方式被迫回到以前的位置,所以它看起来从未移动过。enter image description here

private void OnTriggerEnter(Collider Other)
{
  Debug.Log("Collided");
  if (IsGoingDown)
  {
    Debug.Log("x: " + playerBody.transform.position.x + " y: " + playerBody.transform.position.y);
    playerBody.transform.position = playerBody.transform.position + new Vector3(0,9,0);
    Debug.Log("x: " + playerBody.transform.position.x + " y: " + playerBody.transform.position.y);
    Debug.Log("Going Down");
}
  else
  {
    playerBody.transform.position = playerBody.transform.position + new Vector3(0,-9,0);
    Debug.Log("Going Up");
  }

}

想知道是什么迫使位置改变回来,如何修复它。

9bfwbjaz

9bfwbjaz1#

我不确定其他代码的基础结构,我不知道这是否可能是一个问题,但我认为问题是,当传送时,代码在第二个点再次执行,角色被引导到相反的方向。
使用临时计时器解决问题。

private Coroutine stopTimer;
private IEnumerator TempStop(float timer) // temporary Off the trigger code
{
    yield return new WaitForSeconds(timer);
    stopTimer = null;
}
private void OnTriggerEnter(Collider Other)
{
    if (stopTimer != null) return;
        
    stopTimer = StartCoroutine(TempStop(.2f));
    
    //....
}

相关问题