仅记录简单的接口,关于具体的应用和其他可选参数请自行查找 https://docs.unity3d.com/ScriptReference/
1、当UI信息改动时执行某个命令
EditorGUI.BeginChangeCheck();
width = EditorGUILayout.IntField("width : ", width);
if (EditorGUI.EndChangeCheck())
{
Debug.Log("=========width changed=========");
}
2、在EditorWindow上显示图片,或图片的Alpha通道
EditorGUI.DrawPreviewTexture(new Rect(offset.x, offset.y, width, height), rt);
EditorGUI.DrawTextureAlpha(new Rect(offset.x, offset.y, width, height), rt);
3、获取编辑器摄像机
SceneView.lastActiveSceneView.camera
4、打开本地文件夹或者文件
if (GUILayout.Button("ChooseFolder", GUILayout.Width(100)))
{
path = EditorUtility.OpenFolderPanel("ChooseFolder", "", "");
}
5、GameObject.Instantiate克隆出的对象没有原预设的关联,想要保留有原预设关联的要使用以下API:
简单来说,就是如何用代码模拟把prefab拖入编辑器的操作:
GameObject clone = PrefabUtility.InstantiatePrefab(obj) as GameObject;
但是这样生成的prefab会出现在Hierarchy最上层,如果要设置它到最下方
clone.transform.SetSiblingIndex(int.MaxValue);
6、要设置编辑器字体颜色
//先定义一个GUIStyle
GUIStyle TextStyle = new GUIStyle();
//根据需要指定颜色
TextStyle.normal.textColor = data.isOptimized ? Color.green : Color.black;
EditorGUILayout.TextArea(data.error, TextStyle, GUILayout.Height(15));
7、模拟Apply to Prefab操作
Object prefabAsset = PrefabUtility.GetPrefabParent(selectedObj);
if (prefabAsset != null)
{
PrefabUtility.ReplacePrefab(selectedObj, prefabAsset, ReplacePrefabOptions.ConnectToPrefab);
}
8、模型的导入前处理
public class VFXMeshProcess
{
[MenuItem("Assets/MeshProcess")]
static void MeshProcess()
{
string[] guids = Selection.assetGUIDs;
foreach (var guid in guids)
{
var assetPath = AssetDatabase.GUIDToAssetPath(guid);
ModelImporter mi = AssetImporter.GetAtPath(assetPath) as ModelImporter;
mi.meshCompression = ModelImporterMeshCompression.High;
mi.isReadable = false;
mi.optimizeMesh = true;
mi.importNormals = ModelImporterNormals.None;
mi.importBlendShapes = false;
}
}
}
9、自定义Inspector
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Sphere))]
public class SphereEditor : Editor
{
public override void OnInspectorGUI()
{
GUILayout.Label("自定义Inspector");
GUILayout.Button("确定");
}
}
10、为变量添加一些属性可使它们在Inspector面板中更容易被使用
[Range(0f,10f)]
public float speed = 1f;
11、在变量前加入Tooltip,当鼠标悬停在Inspector面板中的变量上时,可显示关于此变量的说明
[Tooltip("移动速度")]
public float speed = 1f;
12、
(不定期更新)