2017-06-30 156 views
0

我有一個立方體(0,2,0),我希望它在y軸上從2下移到1,然後最多3回到1回到3,依此類推。 ..統一在兩個座標之間擺動

有人可以解釋我,什麼使用Mathf.PingPong()作爲參數傳入?

我有

public virtual void PingPongCollectable(Transform transform, float speed) 
{ 
    Vector3 pos = transform.position; // current position 
    pos.y = Mathf.PingPong(? , ?); // missing parameters, calculate new position on y 
    transform.position = pos; // new position 
} 

所以我在哪裏有在速度和A的座標(上面)和B(下面)通過?

立方體應該順利地在一個循環中上下滑動。

謝謝!

回答

0

Mathf.PingPong方法的簽名是下列之一:

public static float PingPong(float t, float length); 

PingPongs的值t,使得它從不大於長度大,從不小於0
返回值將在0和長度之間來回移動。

如果您想要平滑過渡,則第一個參數應爲Time.time
第二個參數是最大值。該方法然後給你一個介於0和最大值之間的位置。
然後,您可以設置乒乓球方法的底部和長度。

下面是使用時所提供的代碼的示例:

public virtual void PingPongCollectable(Transform transform, float speed) 
{ 
    Vector3 pos = transform.position; 
    float length = 1.0f; // Desired length of the ping-pong 
    float bottomFloor = 1.5f; // The low position of the ping-pong 
    pos.y = Mathf.PingPong(Time.time, length) + bottomFloor; 
    transform.position = pos; // new position 
} 

來源:https://docs.unity3d.com/ScriptReference/Mathf.PingPong.html

+0

使用'Mathf.PingPong(Time.deltaTime,長度 - bottomFloor)+ bottomFloor'是不正確的。立方體立即跳到0並移動到3並返回到0,但它應該從1.5f移動到2.5f。 – Question3r

+0

我編輯了我的例子。如果你想在1.5f和2.5f之間移動,你可以這樣做: 'Mathf.PingPong(Time.deltaTime,1.0f)+ 1.5f' – CBinet

+0

你需要使用'Time.time'作爲例子docs,或在成員變量中累積時間。 'Time.deltaTime'一般不會隨着時間的推移而增加,所以你會得到相同的位置幀。 – BMac

相關問題