2015-07-20 73 views
1

我正在开发类似Minecraft的游戏,并尝试让块删除正常工作。我有一个函数返回块的正确坐标,然后调用DestroyBlock(下面),它在立方体的每个方向上投射6条射线,并且应该销毁它遇到的任何四边形。然后我有另一个函数,在块被销毁之后调用,然后更新周围的块并呈现适当的面。我的问题是,这个DestroyBlock函数并不总是工作。正如你在第一次点击的图像中看到的那样,一切正常工作,并且正确的面孔被破坏然后被渲染,但是当我做第二次点击时,它只会破坏新块的一面... Before Any ClicksUnity3D Raycast不会每次都摧毁游戏对象

After clicking on the corner block

Results of clicking on the now exposed dirt block face

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"); 
    } 


} 

而且我知道,光线投射更是创下因为调试信息的四边形,但由于某种原因,它实际上没有摧毁所有的边,当它击中他们。任何帮助或建议将不胜感激。

+0

四边形的边缘有多长? 1个单位?要检查光线是否碰到正确的四边形,可以在删除它们之前重命名相应的gameObjects。例如,使用“Destroy”的时间参数在30秒后删除它们。通过这种方式,您可以轻松识别检查员中的对象。 –

+0

感谢您的建议! – Denny

回答

0

无法看到任何图像,并没有真正采取它为什么不第一交互之后的工作,但我很好奇:

1:你为什么要控制每个面代替立方/块本身?

2:我想在我的手艺,因为现在你提到它,我都会主动创造块的销毁的接口来触发或碰撞调用任何“毁灭工具”或东西...

也许如果你提供更多的信息,你的方法和理由去你的方式schould变得更容易帮助...

1

发现问题。当我更新旁边的块时,我正在重新绘制相邻块的表面,而没有先检查四边形是否已经存在,有效地在相同位置实例化两个面。这就是为什么raycast和摧毁工作,只有那里只有两个四边形,所以它只出现它没有。谢谢您的帮助。