我正在开发类似Minecraft的游戏,并尝试让块删除正常工作。我有一个函数返回块的正确坐标,然后调用DestroyBlock(下面),它在立方体的每个方向上投射6条射线,并且应该销毁它遇到的任何四边形。然后我有另一个函数,在块被销毁之后调用,然后更新周围的块并呈现适当的面。我的问题是,这个DestroyBlock函数并不总是工作。正如你在第一次点击的图像中看到的那样,一切正常工作,并且正确的面孔被破坏然后被渲染,但是当我做第二次点击时,它只会破坏新块的一面... Unity3D Raycast不会每次都摧毁游戏对象
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个单位?要检查光线是否碰到正确的四边形,可以在删除它们之前重命名相应的gameObjects。例如,使用“Destroy”的时间参数在30秒后删除它们。通过这种方式,您可以轻松识别检查员中的对象。 –
感谢您的建议! – Denny