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