在 Unity 中随着时间的推移从一个地方移动(或旋转)到另一个地方

2023-12-02

随着时间的推移,我在 Unity 中从一个地方移动到另一个地方时遇到问题。我希望我的角色从 Y 上的当前位置移动到当前 + 1。不幸的是,看起来它没有正确获取当前位置或其他东西,因为如果我调试我写的内容,它会说幅度始终为 1,所以重点是随我而动。难道不应该只检查当前位置并将Y加1,移动到该位置然后再次检查吗?我不知道这段代码有什么问题,或者它是否与 Unity 如何实时检查位置和事物严格相关?

 public bool moving = false;
 private Vector3 dir;
 void FrontMovement()
 {
     Vector3 movement = new Vector3(-Mathf.Sin(transform.eulerAngles.z * Mathf.PI / 180), Mathf.Cos(transform.eulerAngles.z * Mathf.PI / 180), 0f); // always moving front, even after rotation

     if (moving == false)
     {
         dir = movement - transform.position;
         moving = true;
         return;
     }
     transform.Translate(dir.normalized * Time.deltaTime);
     if(dir.magnitude <= Time.deltaTime)
     {
         Debug.Log("Finished movement");
         moving = false;
     }
 }
 void FixedUpdate()
 {
     Debug.Log(dir.magnitude);
     FrontMovement();
 }

我还想知道如何随着时间的推移进行轮换。


你可以使用协程 + Vector3.Lerp以指定的时间移动:

public IEnumerator MoveToPosition(Transform transform, Vector3 position, float timeToMove)
{
      var currentPos = transform.position;
      var t = 0f;
      while(t <= 1f)
      {
             t += Time.deltaTime / timeToMove;
             transform.position = Vector3.Lerp(currentPos, position, t);
             yield return null;
      }
      transform.position = position;
}

您在 Start 方法中调用协程

StartCoroutine(MoveToPosition(transform, newposition, timeToMove))

您可以使用相同的逻辑进行旋转,四元数Lerp or Slerp and 四元数.LookRotation,当然你有很多随着时间的推移在网络上轮换的样本!谷歌是你的朋友...

public IEnumerator RotateToDirection(Transform transform, Vector3 position, float timeToRotate)
{
    var startRotation = transform.rotation;
    var direction = position - transform.position;
    var finalRotation = Quaternion.LookRotation(direction);
    var t = 0f;
    while (t <= 1f)
    {
        t += Time.deltaTime / timeToRotate;
        transform.rotation = Quaternion.Lerp(startRotation, finalRotation, t);
        yield return null;
    }
    transform.rotation = finalRotation;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Unity 中随着时间的推移从一个地方移动(或旋转)到另一个地方 的相关文章

随机推荐