在循环中的两点之间移动对象?

1 c# unity-game-engine

我创建了一个脚本,其中对象在循环中的两点 (A) 和 (B) 之间移动。但是点(A)也不断地改变它的transform.position()。如何在读取新点 (A) 值时使对象循环移动?

public float speed = 0.1f;
public Transform PointA;
public Transform PointB;
private Vector3 origin;
private bool backToOrigin;
private bool GoForIt = true;
public float BeginTime = 0;
public int NumberOfCounts = 1000;
private float Counter = 0;

public void Start()
{
    transform.position = PointA.transform.position;
    origin = transform.position;
}

void Update()
{
    if (GoForIt == true && Counter < NumberOfCounts)
    {
        transform.position = Vector3.MoveTowards(transform.position, backToOrigin ? origin : PointB.transform.position, speed * Time.deltaTime);

        if (transform.position == PointB.transform.position || transform.position == origin)
        {
            backToOrigin = !backToOrigin;
            Counter+=0.5f;
        }
    }

    if(Counter>=NumberOfCounts)
    {
        GoForIt = false;   
    }
}
Run Code Online (Sandbox Code Playgroud)

der*_*ugo 7

您根本不应该使用origin,而是应该使用

...

transform.position = Vector3.MoveTowards(transform.position, backToOrigin ? PointA.transform.position: PointB.transform.position, speed * Time.deltaTime);

if (transform.position == PointB.transform.position || transform.position == PointA.transform.position)
{
    ...
Run Code Online (Sandbox Code Playgroud)

如果 A 点没有移动:

可能正是 Vector3.Lerp

在两点之间线性插值。

其中第三个参数factor0和之间的值1

结合 Mathf.PingPong

返回的值将在 0 和长度之间来回移动。

public class Example : MonoBehaviour
{
    public Transform PointA;
    public Transform PointB;

    void Update()
    {
        // Set the position to loop between PointA and PointB
        transform.position = Vector3.Lerp(PointA, PointB, Mathf.PingPong(Time.time / speed, 1));
    }
}
Run Code Online (Sandbox Code Playgroud)