簡體   English   中英

在循環中的兩點之間移動對象?

[英]Move an object between two points in a loop?

我創建了一個腳本,其中對象在循環中的兩點 (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;   
    }
}

你根本不應該使用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)
{
    ...

如果 A 點沒有移動:

可能正是Vector3.Lerp的用例

在兩點之間線性插值。

其中第三個參數factor01之間的值

結合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));
    }
}

您可以在任意兩點之間移動。 前任:

PointA, PointB

transform.position=Vector3.Lerp(A,B,timeFloat)
if(magnitude(CurrentPositionVector-Vector3A)<0.1)
{
point A = new vector3(x,y,z) // new point coordinates
}

它的作用是: 1. 您正在從 A 點移動到 B 點, 2. 當對象的位置非常接近目的地點時,目的地將更改為一個新點。 3. 您可以根據需要重復多次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM