首页 > 解决方案 > 在循环中的 3 个点之间移动球体游戏对象

问题描述

我正在定义三个游戏对象点,其中一个球体游戏对象应该在一个循环中从一个位置移动到另一个位置,例如 1-2-3-1-2-3 ....(如三角形)。我能够实现具有Vector3.MoveTowards()功能的运动,但它只需要 2 分。有没有办法通过多个点实现相同的目标?(至少3个或更多)

public class SlideBetweenPoints : MonoBehaviour
{
    public Transform pointA, pointB, pointC;
    public float speed;
 
     void Update ()
     {
        float step =  speed * Time.deltaTime; 
        transform.position = Vector3.MoveTowards(pointA.position , pointB.position , step);
 
     }
}

标签: c#unity3d

解决方案


是的,只需朝着一个点移动,当你到达它时,就转到下一个点。

请注意,目前您总是从 重新开始pointA。为了不断向目标位置移动,您必须使用

transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);

我宁愿使用更通用的列表,例如

public class SlideBetweenPoints : MonoBehaviour
{
    public List<Transform> points;
    public float speed;
 
    private int index;

     void Update ()
     { 
         transform.position = Vector3.MoveTowards(transform.position, points[index].position, speed * Time.deltaTime);
 
         if(transform.position == points[index].position)
         {
             // increase index with wrap around
             index = (index + 1) % points.Count;
         }
     }
}

wheretransform.position == points[index]使用精确的1e-5for 相等。如果你真的需要它,你还可以检查精确匹配的位置:

 if(Mathf.Approximately(0, (transform.position- points[index].position).sqrMagnitude))
 {
     index = (index + 1) % points.Count;
 }

推荐阅读