在Unity 3D中移除对象的盒子碰撞器

5

这是我的Update函数的代码。该对象具有一个盒子碰撞器。

if (Input.GetMouseButtonDown(0)) { 
    Ray ray = camera.ScreenPointToRay(Input.mousePosition); 
    if (Physics.Raycast (ray, out hit3, 400.0F)) {
        wName = hit3.collider.gameObject.name;
        Destroy(hit3.collider.gameObject);
    }
}

但是盒子碰撞器没有被销毁。
我该如何销毁它?

尝试禁用碰撞器而不是销毁它。您想要达到什么效果? - Maris
只想摧毁碰撞体。 - Sona Rijesh
1
但是在这个脚本运行后,wName里面有一些值吗? - Maris
wName是该游戏对象的名称。不用担心它,我只是把它的碰撞器移除了。 - Sona Rijesh
2
为什么我会这样问。尝试使用Debug.Log(wName)进行调试,并查看是否有值。你的代码是正确的,应该可以正常工作。我认为你的raycast不会按照你的期望工作,并且无法获取gameobject。 - Maris
是的,我已经正确地获取了名称。 - Sona Rijesh
2个回答

4
现在使用这段代码可以正常工作。
 Destroy(hit3.collider);

1
根据Destroy()的文档,“实际对象销毁总是延迟到当前Update循环之后,但始终在渲染之前完成。”
这可能是问题所在吗?如果在当前Update函数中检查对象,它可能尚未被销毁。否则,Destroy()应该删除该GameObject的所有组件。

1
刚遇到过这个问题。不知道为什么我的射线投射会撞到一个已经“销毁”的物体。在销毁该物体之前禁用 Collider 可以解决此问题。 - Spider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接