【问题标题】:How to define the direction perpendicular to a GameObject's motion (Unity)?如何定义垂直于游戏对象运动的方向(Unity)?
【发布时间】:2018-01-04 22:05:50
【问题描述】:

我正在尝试创建一个游戏,其中一个球从一个圆圈发射,就像一门大炮,但它可以向任何方向发射,360º,因为球所连接的圆圈可以旋转。所以,我正在考虑使用 Rigidbody2D.AddForce() 但我不确定如何定义我想要施加力的方向。我希望它是垂直于球/球员运动的方向,但我不知道如何定义它。谢谢你的帮助! :)

【问题讨论】:

标签: unity3d vector 2d


【解决方案1】:

如果您获得了球运动的方向(例如度数),您可以添加一个特定的角度,并使用该角度来确定需要施加的力。

我假设球/球员没有脊状身体,如果有,那么你可以直接抓住方向。另外,由于您使用圆圈来描述生成的形状,我将假设您在 2D 中工作。

Vector3 lastPosition;

void Update()
{
    //launch the ball before updating the last position
    lastPosition = transform.position;
}

Vector3 launchDirection()
{
    Vector3 ballDirection = transform.position - lastPosition;
    float angle = Mathf.Atan2(ballDirection.x, ballDirection.y) * Mathf.Rad2Deg;

    //the direction should be perpendicular to direction of movement
    float angle += 90;

    return new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
}

我还没有统一运行代码,但它看起来应该可以工作。基本上要获取存储最后一个位置的方向,并将其与当前方向进行比较以计算出增量(如果您使用脊状体四处移动,然后从中获取方向),然后使用 atan2 来获取角度。为了使发射方向垂直于球,我添加了 90 度(您可能需要 -90,具体取决于您需要从哪一侧发射圆圈)。现在我们有了您希望球射出的角度,将其与 Sin 和 Cos 一起使用以获得角度的 XY。

你有它可以让你获得垂直于运动的方向,你使用 3 维它基本上是相同的数学,只是输入了一些数字来填充返回值。

哦,如果您的对象始终面向运动方向transform.right 也可以:P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多