APSchmidt 发表于 2022-4-22 14:06

Unity 统一添加和移除Mesh Collider

一般建模师导出的模型中无法添加碰撞体,但我们的场景中又需要检测碰撞,这时可以使用代码统一添加。
//EditorWindow类无法打包,主意添加这个判断#if UNITY_EDITORusing UnityEngine;using UnityEditor;public class AddMeshCollider : EditorWindow{        public static void Open()    {      EditorWindow.GetWindow(typeof(AddMeshCollider));    }    void OnGUI()    {      if (GUILayout.Button("添加碰撞体"))      {            Add();      }      if (GUILayout.Button("移除碰撞体"))      {            Remove();      }    }    public static void Remove()    {      //寻找Hierarchy面板下所有的MeshRenderer      var tArray = Resources.FindObjectsOfTypeAll(typeof(MeshRenderer));      for (int i = 0; i < tArray.Length; I++)      {            MeshRenderer t = tArray as MeshRenderer;            //这个很重要,博主发现如果没有这个代码,unity是不会察觉到编辑器有改动的,自然设置完后直接切换场景改变是不被保存            //的如果不加这个代码在做完更改后 自己随便手动修改下场景里物体的状态 在保存就好了             Undo.RecordObject(t, t.gameObject.name);            MeshCollider meshCollider = t.gameObject.GetComponent<MeshCollider>();            if (meshCollider != null)            {                DestroyImmediate(meshCollider);            }            //相当于让他刷新下 不然unity显示界面还不知道自己的东西被换掉了还会呆呆的显示之前的东西            EditorUtility.SetDirty(t);      }      Debug.Log("remove Succed");    }    public static void Add()    {      //寻找Hierarchy面板下所有的MeshRenderer      var tArray = Resources.FindObjectsOfTypeAll(typeof(MeshRenderer));      for (int i = 0; i < tArray.Length; I++)      {            MeshRenderer t = tArray as MeshRenderer;            //这个很重要,博主发现如果没有这个代码,unity是不会察觉到编辑器有改动的,自然设置完后直接切换场景改变是不被保存            //的如果不加这个代码在做完更改后 自己随便手动修改下场景里物体的状态 在保存就好了             Undo.RecordObject(t, t.gameObject.name);            MeshCollider meshCollider = t.gameObject.GetComponent<MeshCollider>();            if (meshCollider == null) {                t.gameObject.AddComponent<MeshCollider>();            }            //相当于让他刷新下 不然unity显示界面还不知道自己的东西被换掉了还会呆呆的显示之前的东西            EditorUtility.SetDirty(t);      }      Debug.Log("Add Succed");    }}#endif
将脚本拖到Assets中。然后点击Tools->添加移除碰撞体,在点击【添加碰撞体】,这时候我们就会发现凡是拥有Mesh Render的物体都有MeshCollider了。如下图:


image.png


image.png

参考:https://blog.csdn.net/weixin_44733991/article/details/122131282
页: [1]
查看完整版本: Unity 统一添加和移除Mesh Collider