Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环中的3个点之间移动球体游戏对象_C#_Unity3d - Fatal编程技术网

C# 在循环中的3个点之间移动球体游戏对象

C# 在循环中的3个点之间移动球体游戏对象,c#,unity3d,C#,Unity3d,我定义了三个游戏对象点,其中一个球体游戏对象应该在一个循环中从一个位置移动到另一个位置,例如1-2-3-1-2-3…(如在三角形中)。我可以使用Vector3.moveToward()函数实现移动,但只需要2点。有没有一种方法可以通过多个点实现相同的效果?(至少3个或更多) 是的,只要朝着一个点移动,当你到达它时,就转到下一个点 请注意,当前您总是从点A重新开始。为了不断向目标位置移动,你必须使用 transform.position = Vector3.MoveTowards(transfor

我定义了三个游戏对象点,其中一个球体游戏对象应该在一个循环中从一个位置移动到另一个位置,例如1-2-3-1-2-3…(如在三角形中)。我可以使用
Vector3.moveToward()
函数实现移动,但只需要2点。有没有一种方法可以通过多个点实现相同的效果?(至少3个或更多)


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

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

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;
         }
     }
}

非常感谢!太完美了!正是我想要的。
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;
         }
     }
}
 if(Mathf.Approximately(0, (transform.position- points[index].position).sqrMagnitude))
 {
     index = (index + 1) % points.Count;
 }