【问题标题】:Unity3D Raycast not destroying gameobject every timeUnity3D Raycast 每次都不会破坏游戏对象
【发布时间】: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


【解决方案1】:

发现问题。当我更新单击的块旁边的相邻块时,我正在重新渲染该相邻块的面,而没有首先检查那里是否已经存在四边形,从而有效地在完全相同的位置实例化两个面。这就是为什么 raycast 和 destroy 起作用的原因,只是那里只有两个四边形,所以它只是看起来没有。感谢您的帮助。

【讨论】:

    【解决方案2】:

    看不到任何图像,也不明白为什么在第一次互动后它不起作用,但我很好奇:

    1:为什么要控制每个面而不是立方体/块本身?

    2:我现在正在考虑我的工艺,因为你提到了它,我会为块创建一个 Destroyable 接口,以触发触发或与任何“破坏工具”或其他东西发生碰撞......

    如果你提供更多关于你的方法和理由的信息,也许会更容易提供帮助......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多