【问题标题】:How to *only* change x coordinate with Vector3.MoveTowards while snapping y coordinate to a curve?如何*仅*使用 Vector3.MoveTowards 更改 x 坐标,同时将 y 坐标捕捉到曲线?
【发布时间】:2018-11-25 04:33:59
【问题描述】:

所以在我的脑海中,我确信有办法做到这一点,但我似乎无法弄清楚。这是一个非常具体的问题,我很难在互联网搜索中找到答案。

我有一个对象,我想平滑地跟随我的鼠标,而不是捕捉到它,所以我正在使用 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() 生成的坐标。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    这也许可以通过 Unity 的 constraints 功能通过更多的控制和更少的代码来完成。

    position constraint 的所有属性都可以通过代码和动画时间线进行动画处理,从而以最少的努力为您提供令人难以置信的创造力。

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

    【讨论】:

    • 我按照您的建议考虑使用它。我想我可以用空对象约束它跟随鼠标,然后根据变换的 x 位置动态更新 y,但随后我失去了使用 Vector3.MoveTowards 获得的上述平滑、延迟的“跟随”。有没有办法使用约束来获得这种形式的运动?
    • 是的,你可以根据你想要的平滑度来调整约束的距离。可能基于鼠标的速度和到对象的距离,并受时间因素或您喜欢的任何其他影响因素的组合。
    • @Ace 我为这些事情找到的最佳渐变是通过其中一个补间库使用指数类型的缓动曲线。 DOTween 有一个免费版本,还有一个很酷的版本:assetstore.unity.com/packages/tools/animation/leantween-3595
    • 多亏了您的建议,我想出了一个相当简单的方法来做到这一点!我的对象仅跟随 MouseFollower 对象的 x 轴,并通过它自己的 x 坐标更新它自己的 y 轴。我只是在 MouseFollower 上的对象上使用了相同的 Vector3.moveTowards 脚本,这给了我在我寻找的 x 轴上的平滑运动,但无论鼠标移动的速度如何,都保留了 y 坐标。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2021-10-05
    相关资源
    最近更新 更多