Unity 删除物体组件(Destroy用法)

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);//设置显示
Unity 中移除物体上的某个组件是一个常见的操作,可以通过多种方式进行。以下是几种常见的方式来进行组件的移除。 ### 使用 Inspector 界面手动移除 这是最简单直观的方法: 1. 在Hierarchy窗口中选择你要删除组件的游戏对象。 2. 打开Inspector面板,找到你想要移除的那个组件。 3. 点击组件标题旁边的减号(-)按钮或者直接选中后按键盘上的Delete键即可将其从该游戏对象上移除。 ### 编辑器脚本中批量移除指定类型的所有组件 当你有多个同种类型的组件需要一次性全部清除时可以这样做: ```csharp using UnityEngine; public static class ComponentRemover { /// <summary> /// 删除所有给定类型的组件. /// </summary> public static void RemoveAllComponents<T>(this GameObject go) where T : Component { foreach(var comp in go.GetComponents<T>()){ DestroyImmediate(comp); } } } ``` 然后可以在其他地方调用如 `myGameObject.RemoveAllComponents<Rigidbody>();` 来快速移除所有的刚体组件。 ### 运行时通过编程方式有条件地移除单个组件 有时我们需要根据特定条件或时机动态地卸载某一个实例化的组件: ```csharp using UnityEngine; // 假设这是一个挂载了我们想删除组件的对象 public class Example : MonoBehaviour { private void SomeConditionMet() { // 当满足某种条件... Rigidbody rb = this.GetComponent<Rigidbody>(); if(rb != null){ Object.Destroy(rb); // 或者使用DestroyImmediate在编辑模式下立即生效 } } } ``` 注意:这里使用的`Object.Destroy()`函数适用于运行期间的安全销毁,并将在当前帧结束之后真正释放资源;而如果是在Editor环境下工作并且希望即时看到效果则应该考虑改用`UnityEditor.EditorApplication.delayCall += () => UnityEditor.Object.DestroyImmediate(component)`。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值