MeshCollider编辑器工具

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


using UnityEngine;
using UnityEditor;
/* 
编辑:HML
操作方法:选择需要操作的对象,在编辑器里找到“MeshCollider”菜单,然后执行对应操作!
*/

//创建MeshCollider
public 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!");
            }
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值