unity不在启动状态创建Cube

717 阅读1分钟

需求

在snece内选中一个物体,按快捷键给物体添加一个子cube,然后可以手动调整cube的boxcollider,调整完成后勾掉meshreaderer。用来做摄像机移动时的碰撞。

效果

GIF.gif

image.png

实现

在editor文件夹下创建c#脚本

using UnityEngine;
using UnityEditor;

public class AddBoxCollider : Editor
{
    //添加在unity的菜单栏上,&c 快捷键ALT+C
    [MenuItem("Tool/AddBoxCollider &C")]
    public static void FAddBoxCollider()
    {
        BoxCollider now;
        //选中了 gameobject
        if (Selection.activeGameObject != null)
        {
            if (Selection.activeGameObject.GetComponent<BoxCollider>() == null)
            {
                now = Selection.activeGameObject.AddComponent<BoxCollider>();
            }
            else
            {
                now = Selection.activeGameObject.GetComponent<BoxCollider>();
            }

            //创建一个子物体cube
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.parent = Selection.activeGameObject.transform;
            cube.transform.localScale = now.size;
            cube.transform.localPosition = now.center;
            //cube.transform.localRotation = Quaternion.Euler(Vector3.zero);
            cube.transform.localEulerAngles = Vector3.zero;
            cube.name = Selection.activeGameObject.name + "collider";
            //cube.transform.parent = 

            //删除原物体的BoxCollider
            DestroyImmediate(now);
        }
        else
        {
            Debug.LogWarning("must choose someone");
        }
    }
}