0

我很难在玩家面前放置一堵物体(箭头)。我想要的是在玩家面前垂直于视野射出一堵坚固的箭头墙。到目前为止,我的对象生成正确,y 轴放置正确。现在我只需要正确对齐 z 轴和 x 轴即可。我的代码如下:

void run()
{
    Vector3 pos = transform.position;
    Quaternion angle = transform.rotation;
    GameObject clone;

    float startx = pos.x;

    pos.y += 0.7f;
    pos.z += 2f;

    for(int y = 0; y < maxarrows; y++)
    {
        pos.y += 0.5f;

        for(int x = 0; x < maxarrows; x++)
        {
            pos.x -= 0.5f;

            clone = arrowPool.getArrowOld();
            if(clone != null)
            {
                clone.transform.position = pos;
                clone.transform.rotation = angle;
                clone.rigidbody.velocity = clone.transform.forward*force;
            }
        }

        pos.x = startx;
    }
}
4

1 回答 1

0

当您计算所有箭头的位置时,您没有考虑玩家的方向。你可以做的是在玩家的局部坐标空间中工作,然后转换到世界空间。

首先我们在玩家的局部坐标空间中选择一些点。

Vector3[] points = {
    Vector3(-1, 1, 0), // upper-left
    Vector3(1, 1, 0), // upper-right
    Vector3(-1, -1, 0), // lower-left
    Vector3(1, 1, 0), // lower-right
    Vector3(0, 0, 0) // centre
};

现在我们需要将这些点转换为世界空间。我们可以使用 Unity 的Transform::TransformPoint函数来做到这一点,它只是将传递的点乘以变换的localToWorldMatrix

for (int i = 0; i < 5; ++i) {
    points[i] = transform.TransformPoint(points[i]);
}

现在,您有了箭头在世界空间中的生成位置。

于 2014-12-25T22:01:00.693 回答