箭头位置墙壁在球员前面的

时间:2014-12-16 07:50:53

标签: unity3d positioning projectile

我难以在玩家面前放置一个物体墙(箭头)。我想要的是一个坚固的箭头墙,垂直于视图在玩家面前拍摄。到目前为止,我确保对象的产生正确并且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;
    }
}

1 个答案:

答案 0 :(得分: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]);
}

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