【发布时间】:2015-07-20 18:48:17
【问题描述】:
我正在开发类似 Minecraft 的游戏,并试图让块删除功能正常工作。我有一个函数可以返回块的正确坐标,然后调用 DestroyBlock(如下),它在立方体面的每个方向上投射 6 条光线,并且应该破坏它遇到的任何四边形。然后我有另一个函数,它在块被销毁后调用,然后更新周围的块并呈现适当的面。我的问题是这个 DestroyBlock 函数并不总是有效。正如您在第一次单击的图像中看到的那样,一切正常,正确的面被破坏然后渲染,但是当我第二次单击时,它只会破坏新块的一个面......
void DestroyBlocks(int x, int y, int z) {
Vector3 origin = new Vector3(x, y, z);
Ray Up = new Ray(origin + Vector3.up, Vector3.down);
Ray Down = new Ray(origin + Vector3.down, Vector3.up);
Ray North = new Ray(origin + Vector3.forward, Vector3.back);
Ray East = new Ray(origin+ Vector3.right, Vector3.left);
Ray South = new Ray(origin + Vector3.back, Vector3.forward);
Ray West = new Ray(origin + Vector3.left, Vector3.right);
RaycastHit markedQuad;
if(Physics.Raycast(Up, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed Up");
}
if(Physics.Raycast(Down, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed Down");
}
if(Physics.Raycast(North, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed North");
}
if(Physics.Raycast(East, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed East");
}
if(Physics.Raycast(South, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed South");
}
if(Physics.Raycast(West, out markedQuad, 1f)) {
Destroy(markedQuad.transform.gameObject);
Debug.Log("Destroyed West");
}
}
而且我知道由于调试消息,光线投射正在击中四边形,但由于某种原因,当它击中它们时它实际上并没有破坏所有边。任何帮助或建议将不胜感激。
【问题讨论】:
-
四边形的边有多长? 1个单位?要检查光线是否击中正确的四边形,您可以在删除它们之前重命名相应的游戏对象。例如,使用
Destroy的时间参数在 30 秒后删除它们。通过这种方式,您可以轻松识别检查器中的对象。 -
感谢您的建议!
标签: unity3d destroy raycasting