统一在两个坐标之间振荡

时间:2017-06-30 16:45:35

标签: c# unity3d

我在(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(下方)?

立方体应该在循环中平滑地上下滑动。

谢谢!

1 个答案:

答案 0 :(得分:0)

Mathf.PingPong 方法的签名如下:

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

PingPongs值t,因此它永远不会大于length并且永远不会小于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