如何在给定起点角度和距离的情况下找到2D点

时间:2014-06-20 07:54:13

标签: c# math unity3d

在Unity 3D中,我在某个原点有一个带有“.transform.position”(Vector3)的GameObject,我有一个Vector2位置,表示该GameObject上的武器位置。在下图中,三角形是我的GameObject,绿点是GameObject的“.transform.position”,红点是在这个例子中放置在GameObject前面的武器位置(但它可以放在相对于GameObject)。这个想法是,当一个武器发射它的射击必须从“.transform.position +武器位置”开始飞行,但我很难计算射击开始位置。

enter image description here

图像显示我想要的结果,如果GameObject旋转我希望我计算的武器起始位置保持在GameObject前面。只要我的GameObject没有旋转,一切都很好,但是当我旋转我的GameObject时,我的计算失败并且位置完全错误。我的想法是做这样的事情:

public static Vector2 GetDestinationFromPosition(Vector2 pos, float angle, float distance) {
    if(distance < 0) {
        angle = EA_Helper.GetCorrectedAngle(angle + 180.0f);
        distance = distance * -1;
    }
    float vx = Mathf.Sin(angle) * distance;
    float vy = Mathf.Cos(angle) * distance;
    return pos + new Vector2(vx, vy);
}

Vector2 shotStartPos = EA_Helper.GetDestinationFromPosition(parent.transform.position, parent.transform.eulerAngles.z + 90, positionOnShip.x);
shotStartPos = EA_Helper.GetDestinationFromPosition(shotStartPos, parent.transform.eulerAngles.z, positionOnShip.y);

但是它不起作用,计算出的位置被放置在GameObject的边缘并且没有被放置在我想象的位置(仅当GameObject角度/旋转为零时)。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

这很简单:

Vector2 shotStartPos = transform.TransformPoint(positionOnShip);