1. 前言

  • 针对于使用Instantiate直接生成的GameObject,其中包含了前物体的碰撞体(MeshCollider) ,而这个组件与当前生成的新物体是不搭的,故需要重新生成。

2. 解决办法

2.1 Destroy()用法:

  • 直接用Destroy函数
    //直接删除物体
    Destroy(Object);  
    //定时删除物体 Destroy(待删除物体, 执行等待时间);
    Destroy(Object, 2); 
    //删除物体上挂载的脚本 即当前脚本
    Destroy(this);  
    //删除某一个组件(不局限于脚本 因脚本也是一种组件)
    Destroy(transform.GetComponent<createprim>());
    //立马删除物体
    DestroyImmediate(Object);  
    //跳转场景时不删除某物体
    DontDestroyOnLoad(Object);  
    

注意 Destroy()并非立即执行,如需要立即对销毁操作执行,应采用DestroyImmediate()

2.2 代码

  • 采用 Destroy() 方法进行删除,再重新根据具体Mesh创建MeshCollider组件
//重新生成MeshCollider
Destroy(part.GetComponent<MeshCollider>());
part.AddComponent<MeshCollider>();

3. 补充

  • 除了销毁物体,还可以将物体设置为不显示,这样做的好处在于,可以随时将物体重新“召唤”回到场景中。
gameobject.SetActive(false);//设置不显示
gameobject.SetActive(true);//设置显示
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐