具有相同高度和下降速度控制的统一弹跳球

时间:2018-09-15 22:26:54

标签: unity3d gravity

我如何统一创建一个弹跳球,使其弹起到相同的高度,并使其下降得更快或更慢?一个人告诉我使用:

heightVector * |sin(time * speed)|

但是我不知道在哪里插入它。这些事情我真的很菜。救命!

1 个答案:

答案 0 :(得分:3)

您的公式正确。
heightVector是您的球的最大高度。例如,如果它是(0,10),则表示您的球将高10米。
time只是一个计时器。 speed是您的球速。

但是,我建议将速度乘以Time.deltaTime以使跳出帧速率独立。

让我们开始编写代码。
heightVectorspeed没有复杂性。只需创建两个公共字段,您就完成了!

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector2 HeightVector = new Vector2(0,10);
}

要创建计时器,您需要一个float变量。然后,您需要在每个Time.deltaTime调用中向其中添加Update

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector2 HeightVector = new Vector2(0,10);

    float timer;
    void Update()
    {
         timer += Time.deltaTime;
    }
}

恭喜!您现在有了计时器!

现在您真的快结束了。您只需要计算球的当前位置并将其应用于其变换即可。

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector3 HeightVector = new Vector3(0,10);

    float timer;
    void Update()
    {
         timer += Time.deltaTime;

         Vector3 currentPosition = HeightVector * Mathf.Abs(timer * Speed * Time.deltaTime);

         transform.position = currentPosition;
    }
}

现在,您需要将Bouncer脚本附加到您的球上,并且您的球应该开始弹跳!

编辑: 如果您希望球保持其原始位置并从那里弹回,则需要保持原始位置并将计算出的位置附加到该位置:

class Bouncer : MonoBehaviour
{
    public float Speed = 10;
    public Vector3 HeightVector = new Vector3(0,10);
    Vector3 originalPosition;
    float timer;

    void Start()
    {
        originalPosition = transform.position;
    }

    void Update()
    {
         timer += Time.deltaTime;

         Vector3 currentPosition = HeightVector * Mathf.Abs(timer * Speed * Time.deltaTime);

         transform.position = originalPosition + currentPosition;
    }
}