42.EditorUtility压缩纹理找依赖项

  1. 42.EditorUtility-其他内容
    1. 42.1 知识点
      1. 压缩纹理
      2. 查找对象依赖项
      3. 更多内容
    2. 42.2 知识点代码
      1. Lesson42_EditorUtility_其他内容
      2. MyEditorUtilityLearnWindow

42.EditorUtility-其他内容


42.1 知识点

压缩纹理

void EditorUtility.CompressTexture(Texture2D texture, TextureFormat format, TextureCompressionQuality quality);
可以将纹理显式压缩为指定的格式

该知识点会配合之后的资源导入相关知识点使用

查找对象依赖项

object[] EditorUtility.CollectDependencies(Object[] roots);
返回对象所依赖的所有资源列表

private void OnGUI()
{        
    objTest1 = EditorGUILayout.ObjectField("想要查找关联资源的对象", objTest1, typeof(GameObject), true) as GameObject;
    if (GUILayout.Button("检索依赖资源"))
    {
        Object[] objs = EditorUtility.CollectDependencies(new Object[] { objTest1 });
        // 用Selection类选中所有依赖的资源
        Selection.objects = objs;
    }
}


更多内容

官方文档:EditorUtility


42.2 知识点代码

Lesson42_EditorUtility_其他内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson42_EditorUtility_其他内容 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 压缩纹理

        //void EditorUtility.CompressTexture(Texture2D texture, TextureFormat format, TextureCompressionQuality quality);
        //可以将纹理显式压缩为指定的格式

        //该知识点会配合之后的资源导入相关知识点使用

        #endregion

        #region 知识点二 查找对象依赖项

        //object[] EditorUtility.CollectDependencies(Object[] roots);
        //返回对象所依赖的所有资源列表

        #endregion

        #region 知识点三 更多内容

        //官方文档:https://docs.unity3d.com/ScriptReference/EditorUtility.html

        #endregion
    }
}

MyEditorUtilityLearnWindow

using System.IO;
using UnityEditor;
using UnityEngine;

public class MyEditorUtilityLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorUtilityLearnWindow")]
    private static void OpenMyEditorUtilityLearnWindow()
    {
        MyEditorUtilityLearnWindow win = EditorWindow.GetWindow<MyEditorUtilityLearnWindow>("EditorUtility知识学习");
        win.Show();
    }

    #region Lesson40_EditorUtility_编辑器默认窗口相关

    private float value;

    #endregion

    #region Lesson42_EditorUtility_其他内容

    private GameObject objTest1;

    #endregion

    private void OnGUI()
    {
        #region Lesson40_EditorUtility_编辑器默认窗口相关

        if (GUILayout.Button("显示提示窗口"))
        {
            if (EditorUtility.DisplayDialog("测试窗口", "确定一定要做这件事情吗", "一定要做"))
            {
                Debug.Log("确定要做,在这里去处理逻辑");
            }
            else
            {
                Debug.Log("点击了叉叉,不去做");
            }

            Debug.Log("窗口显示完毕");
        }

        if (GUILayout.Button("显示三键提示窗口"))
        {
            int result = EditorUtility.DisplayDialogComplex("三键提示", "显示信息", "选项1", "关闭", "选项2");
            switch (result)
            {
                case 0:
                    Debug.Log("选项1按下了");
                    break;
                case 1:
                    Debug.Log("关闭键按下了");
                    break;
                case 2:
                    Debug.Log("选项2按下了");
                    break;
                default:
                    break;
            }

            Debug.Log("三键窗口显示完毕");
        }

        if (GUILayout.Button("显示更新进度条"))
        {
            //每次点击加进度条进度
            value += 0.1f;
            EditorUtility.DisplayProgressBar("进度条标题", "进度条窗口显示内容", value);
            Debug.Log("进度条窗口显示完毕");
        }

        if (GUILayout.Button("关闭进度条"))
        {
            value = 0;
            EditorUtility.ClearProgressBar();
        }

        #endregion

        #region Lesson41_EditorUtility_文件面板相关

        //1.显示文件存储面板
        if (GUILayout.Button("打开文件存储面板"))
        {
            string str = EditorUtility.SaveFilePanel("保存我的文件", Application.dataPath, "Test", "txt");
            //会得到带上文件名的存储路径,可以利用路径写入
            Debug.Log(str);
            if (str != "")
                File.WriteAllText(str, "123123123123123");
        }

        //2.显示文件存储面板(默认为工程目录中)
        if (GUILayout.Button("打开文件存储面板(仅限工程文件夹下)"))
        {
            string str2 = EditorUtility.SaveFilePanelInProject("保存项目内的文件", "Test2", "png", "自定义文件");
            //只会从Asset开始拼接路径
            Debug.Log(str2);
        }

        //3.显示文件夹存储面板
        if (GUILayout.Button("显示文件夹存储面板"))
        {
            string str3 = EditorUtility.SaveFolderPanel("得到一个存储路径(文件夹)", Application.dataPath, "");
            //显示带上文件夹的完整路径,点击取消返回空字符串
            Debug.Log(str3);
        }

        //4.显示打开文件面板
        if (GUILayout.Button("显示打开文件面板"))
        {
            string str4 = EditorUtility.OpenFilePanel("得到一个文件路径", Application.dataPath, "txt");
            //会得到带上文件名的存储路径,可以利用路径读取资源
            Debug.Log(str4);
            if (str4 != "")
            {
                string txt = File.ReadAllText(str4);
                Debug.Log(txt);
            }
        }

        //5.显示打开文件夹面板
        if (GUILayout.Button("显示打开文件夹面板"))
        {
            string str4 = EditorUtility.OpenFolderPanel("得到一个文件路径", Application.dataPath, "");
            //显示带上文件夹的完整路径,点击取消返回空字符串
            if (str4 != "")
            {
                Debug.Log(str4);
            }
        }

        #endregion

        #region Lesson42_EditorUtility_其他内容

        objTest1 = EditorGUILayout.ObjectField("想要查找关联资源的对象", objTest1, typeof(GameObject), true) as GameObject;
        if (GUILayout.Button("检索依赖资源"))
        {
            Object[] objs = EditorUtility.CollectDependencies(new Object[] { objTest1 });
            //用Selection类选中所有依赖的资源
            Selection.objects = objs;
        }

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏