[英]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)
{
...
可能正是Vector3.Lerp
的用例
在兩點之間線性插值。
其中第三個參數factor
是0
到1
之間的值
返回值將在 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.