如何*仅*通过Vector3.MoveTowards更改x坐标,同时将y坐标捕捉到曲线上?

时间:2018-11-25 04:34:00

标签: unity3d

因此,在我的内心深处,我确定有办法做到这一点,但我似乎无法弄清楚。这是一个特定的问题,我很难在互联网搜索中找到答案。

我有一个对象想要平滑地跟随鼠标,而不是捕捉到它,因此我正在使用Vector3.movetowards:

void Update () {

    mousePos = camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, camera.nearClipPlane));

    targetPos = new Vector3(mousePos.x, GetHeight(mousePos.x), PaddlePosition.z);

    transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed);

}

private float GetHeight(float xCoordinate){

    float height = Mathf.Abs(xCoordinate) * heightDeviation + PaddlePosition.y;
    return height;
}

基本上,当鼠标右移或左移时,它会根据鼠标的x坐标与0的距离而稍微向上移动。那部分起作用。

问题是,如果vector3.movetowards的工作原理使鼠标从一侧快速移动到另一侧,则最终导致对象沿y轴的路径不同于预期。我想保留在x轴上获得的平滑,略微延迟的跟随运动,但始终将y轴锁定到由GetHeight()生成的坐标。

1 个答案:

答案 0 :(得分:1)

通过Unity的constraints功能,可以通过更多的控制和更少的代码来完成此操作。

position constraint的属性都可以从代码和动画时间轴中进行动画处理,从而以最小的工作量为您提供了令人难以置信的创造力。

通过鼠标指针处的空对象将对象约束到鼠标指针,并根据需要为约束设置动画和/或设置距离和相对属性。