如何定义垂直于GameObject运动的方向(Unity)?

时间:2018-01-04 22:05:50

标签: unity3d vector 2d

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

1 个答案:

答案 0 :(得分:0)

如果你得到球正在移动的方向(如度数),你可以添加一个角度,并使用角度来确定需要施加的力。

我假设球/球员没有脊状体,如果确实如此,那么你可以直接抓住方向。此外,由于您使用圆圈来描述衍生的形状,我将假设您在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