找回密码
 立即注册
查看: 422|回复: 0

Unity 统一添加和移除Mesh Collider

[复制链接]
发表于 2022-4-22 14:06 | 显示全部楼层 |阅读模式
一般建模师导出的模型中无法添加碰撞体,但我们的场景中又需要检测碰撞,这时可以使用代码统一添加。
//EditorWindow类无法打包,主意添加这个判断#if UNITY_EDITORusing UnityEngine;using UnityEditor;public class AddMeshCollider : EditorWindow{    [MenuItem("Tools/添加移除碰撞体")]    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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 20:50 , Processed in 0.090486 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表