Unity编辑器的一些不常用功能

仅记录简单的接口,关于具体的应用和其他可选参数请自行查找 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、

(不定期更新)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值