MeshCollider编辑器工具

来源:互联网 发布:淘宝金币可以送人吗 编辑:程序博客网 时间:2024/06/06 14:30

      这款工具主要是在编辑器下给指定模型添加、删除、禁用、启用MeshCollider等功能,具体功能可以看代码。


using UnityEngine;using UnityEditor;/* 编辑:HML操作方法:选择需要操作的对象,在编辑器里找到“MeshCollider”菜单,然后执行对应操作!*///创建MeshColliderpublic class MeshColliderTools : MonoBehaviour {    //创建MeshCollider    [MenuItem("MyTools/MeshCollider/Create")]    static void Create()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (!item.gameObject.GetComponent<MeshCollider>())            {                Collider collider = item.gameObject.AddComponent<MeshCollider>();                //打印出添加MeshCollider的对象名称                Debug.Log("已为"+collider.gameObject.name+ "创建MeshCollider!");            }            else            {                Debug.Log(item.gameObject.name+"已创建MeshCollider,无需再创建!");            }        }    }    //删除MeshCollider    [MenuItem("MyTools/MeshCollider/Delete")]    static void Delete()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (item.gameObject.GetComponent<MeshCollider>())            {                //删除MeshCollider                DestroyImmediate(item.gameObject.GetComponent<MeshCollider>());                Debug.Log("删除了" + item.gameObject.name + "的MeshCollider!");            }            else            {                Debug.Log(item.gameObject.name + "没有MeshCollider,无法执行删除操作!");            }        }    }    //禁用MeshCollider    [MenuItem("MyTools/MeshCollider/Forbidden")]    static void Forbidden()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (item.gameObject.GetComponent<MeshCollider>())            {                //禁用MeshCollider                Collider collider = item.gameObject.GetComponent<MeshCollider>();                if (collider.enabled)                {                    collider.enabled = false;                    Debug.Log("禁用了" + collider.gameObject.name + "的MeshCollider!");                }                else                {                    Debug.Log(item.gameObject.name+"的MeshCollider已被禁用!");                }            }            else            {                Debug.Log(item.gameObject.name + "没有MeshCollider!");            }        }    }    //启用MeshCollider    [MenuItem("MyTools/MeshCollider/StartUsing")]    static void StartUsing()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (item.gameObject.GetComponent<MeshCollider>())            {                //启用MeshCollider                Collider collider = item.gameObject.GetComponent<MeshCollider>();                if (!collider.enabled)                {                    collider.enabled = true;                    Debug.Log("启用了" + collider.gameObject.name + "的MeshCollider!");                }                else                {                    Debug.Log(item.gameObject.name + "的MeshCollider已经启用!");                }            }            else            {                Debug.Log(item.gameObject.name + "没有MeshCollider!");            }        }    }    //启用MeshCollider的Canves    [MenuItem("MyTools/MeshCollider/OtherTools/StartUsingCanves")]    static void StartUsingCanves()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (item.gameObject.GetComponent<MeshCollider>())            {                //启用MeshCollider                MeshCollider collider = item.gameObject.GetComponent<MeshCollider>();                if (!collider.convex)                {                    collider.convex = true;                    Debug.Log("启用了" + collider.gameObject.name + "的MeshCollider的Convex!");                }                else                {                    Debug.Log(item.gameObject.name + "的MeshCollider的Convex已经启用!");                }            }            else            {                Debug.Log(item.gameObject.name + "没有MeshCollider!");            }        }    }    //启用MeshCollider的CanvesTrigger    [MenuItem("MyTools/MeshCollider/OtherTools/StartUsingCanvesTrigger")]    static void StartUsingCanvesTrigger()    {        GameObject go = Selection.activeGameObject;        MeshRenderer[] renders = go.GetComponentsInChildren<MeshRenderer>();        foreach (MeshRenderer item in renders)        {            if (item.gameObject.GetComponent<MeshCollider>())            {                //启用MeshCollider                MeshCollider collider = item.gameObject.GetComponent<MeshCollider>();                if (collider.convex)                {                    if(!collider.isTrigger)                    {                        collider.isTrigger = true;                        Debug.Log("开启了" + collider.gameObject.name + "的MeshCollider的触发器!");                    }                    else Debug.Log( collider.gameObject.name + "的MeshCollider的触发器已经开启!");                }                else                {                    collider.convex = true;                    collider.isTrigger = true;                    Debug.Log(item.gameObject.name + "的MeshCollider的Convex原没有启用,此次操作启用,并打开了触发器!");                }            }            else            {                Debug.Log(item.gameObject.name + "没有MeshCollider!");            }        }    }}


原创粉丝点击