一下都是最简的代码体,请自行组装,另外官方文档更加详细,这里仅供快速引用


自定义一个菜单

using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;


public class InstanceMap : EditorWindow
{   
    [MenuItem("Window/TestWindow")]
    static void Init()
    {
        // Get existing open window or if none, make a new one:
        InstanceMap window = (InstanceMap)EditorWindow.GetWindow(typeof(InstanceMap));
        window.Show();
    }

    void OnGUI()
    {
    }
}

在窗口中自定义一块变量区域

//以下代码均在OnGUI()方法中
//自定义复选框
myBool = EditorGUILayout.Toggle("Toggle", myBool);
//自定义滑块
myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3);
//自定义Object存放区域
prefab = EditorGUILayout.ObjectField(prefab, typeof(Object), true);

//定义一个按钮,并且按钮按下后执行相关方法
if (GUILayout.Button("Build", GUILayout.ExpandWidth(true)))
{

}

这里EditorGUILayout和GUILayout是可以混合着使用的…有点迷


编辑器中创建一个GameObject

我找遍了代码,万万没想到直接用GameObject.Instantiate就可以了,然后编辑器中有一个类叫ObjectNames,其中有获取名字和设置名字的方法

//创建一个指定物体
Object instantiate = GameObject.Instantiate(prefab);
ObjectNames.SetNameSmart(instantiate,"theName");

//创建一个空物体
GameObject o = new GameObject("objectName");    

//创建一个unity自带模型
GameObject.CreatePrimitive(PrimitiveType.Capsule);
//当然也有Cube等其他模型,都在PrimitiveType中

可惜我没找到直接创建UI的地方,有知道用什么方法的朋友烦请告知一下


获取当前场景中的物体

//获取当前场景所有选中的物体
GameObject[] objects = Selection.gameObjects;
//另外Selection中还有很多选项,如objects,transforms,ID...等等

//获取当前场景所有物体
GameObject[] objects = GameObject.FindObjectsOfType<GameObject>();
//关键在于泛型中的GameObject,用这个其他的任何东西都可以获取,另外GameObject中还有通过tag找,通过各种方式找...

复制一个物体的组件

ComponentUtility.CopyComponent(panel.GetComponent<RectTransform>());
ComponentUtility.PasteComponentValues(newPanel.GetComponent<RectTransform>());

//这个类包括了每个组件右上角菜单的那些方法,删除,添加,各种方式都有,配合创建一个空物体的方法,可以说非常实用也非常好用了

设置为一个物体为另一个物体的子物体

newPanel.transform.SetParent(content.transform);//以transform为基础的设置
//另外注意一些坐标的调整,在设置父组件前和设置后调整是不一样的,注意坐标的转换和相关的区别

在层级面板中设置选中物体

//选中单个物体
Selection.activeGameObject = gameObject;
//选中多个物体
Selection.gameObjects = gameObjects

总之与选中相关的都在这个类里面了,再次说一下Unity的这种功能类的命名真的是太直观了,找起来都很顺手


动态更改物体材质

obj.GetComponent<Renderer>().material.mainTexture = Texture;
//很多跟材质、颜色相关的根本都是在Renderer这,而不是Material,MeshRender之类的

持续更新ing….