Unity编辑器界面扩展——2、Unity编辑器内置资源和风格

  大家好,我是阿赵,继续分享Unity编辑器界面扩展。
  这一篇会举一些编辑器UI的具体例子,然后分享一下怎样使用Unity编辑器内置的资源和风格。

一、 自定义窗体综合小例子

  之前一篇简单了介绍了怎样创建一个自定义的编辑器窗体,介绍了一些EditorWindow的基础知识,这里写一个小例子:

using UnityEditor;
using UnityEngine;
public class TestEditorWindow : EditorWindow
{
   
   
    [MenuItem("Tools/TestWindow")]
    private static void ShowTestWindow()
    {
   
   
        TestEditorWindow win = GetWindow<TestEditorWindow>();
        win.titleContent = new GUIContent("测试窗体");
        win.maxSize = win.minSize = new Vector2(500, 550);
    }
    private string[] platformList = new string[] {
   
    "d_BuildSettings.Switch", "d_BuildSettings.PS5", "d_BuildSettings.XboxOne", "d_BuildSettings.Metro", "d_BuildSettings.iPhone", "d_BuildSettings.Android" };
    private Vector2 platformScrollPos = new Vector2();
    private int iconSize = 100;
    private string filePathStr = "";
    private string searchStr = "";
    private Color selectedColor = Color.white;
    private Object selectedObj;
    private string[] popupStrs = new string[] {
   
   "选项一","选项二","选项三","选项四" };
    private int popupIndex = 0;
    void OnGUI()
    {
   
   
        GUILayout.Box(EditorGUIUtility.IconContent("azhaoLogo"), GUILayout.Width(512), GUILayout.Height(128));
        GUILayout.BeginHorizontal(EditorStyles.helpBox,GUILayout.Width(500));
        GUILayout.Label("请选择文件路径:", EditorStyles.whiteLargeLabel, GUILayout.Width(100));
        filePathStr = EditorGUILayout.TextField(filePathStr, GUILayout.Width(300), GUILayout.Height(30));
        if (GUILayout.Button(EditorGUIUtility.IconContent("d_OpenedFolder Icon"), GUILayout.Width(40), GUILayout.Height(30)))
        {
   
   

        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        GUILayout.Label("请搜索:", EditorStyles.linkLabel, GUILayout.Width(100));
        searchStr = EditorGUILayout.TextField(searchStr, EditorStyles.toolbarSearchField, GUILayout.Width(300));
        GUILayout.EndHorizontal();
        GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Width(500));
        EditorGUILayout.HelpBox("请问您习惯在哪个平台上玩游戏:",MessageType.Info);
        platformScrollPos = GUILayout.BeginScrollView(platformScrollPos,GUILayout.Height(120));
        GUILayout.BeginHorizontal();
        
        for (int i = 0;i<platformList.Length;i++)
        {
   
   
            if(GUILayout.Button(EditorGUIUtility.IconContent(platformList[i]),GUILayout.Width(iconSize),GUILayout.Height(iconSize)))
            {
   
   
                //do something
            }
        }
        
        GUILayout.EndHorizontal();
        GUILayout.EndScrollView();
        GUILayout.EndVertical();
        EditorGUILayout.HelpBox("请不要说谎,我知道你在想什么", MessageType.Error);
        GUILayout.BeginHorizontal();
        GUILayout.Label("请选择物体:", EditorStyles.largeLabel, GUILayout.Width(100));
        selectedObj = EditorGUILayout.ObjectField(selectedObj, typeof(Object), true, GUILayout.Width(200));
        GUILayout.EndHorizontal();
        GUILayout.Space(10);
        GUILayout.BeginHorizontal();
        GUILayout.Label("请选择颜色:", EditorStyles.linkLabel, GUILayout.Width(100));
        selectedColor = EditorGUILayout.ColorField(selectedColor, GUILayout.Width(200));
        GUILayout.EndHorizontal();
        GUILayout.Space(10);
        GUILayout.BeginHorizontal();
        GUILayout.Label("下拉列表:", GUILayout.Width(100));
        popupIndex = EditorGUILayout.Popup(popupIndex, popupStrs, GUILayout.Width(200));
        GUILayout.EndHorizontal();
    }

}

  运行窗体,会发现现在的窗体是这样的:
在这里插入图片描述

  这个窗体比较简单,但里面用到了一些Unity编辑器扩展里面特有的东西,比如内置图标、自定义图片、编辑器UI风格和特殊组件。

二、 Unity内置图标

1、内置图标的使用

  在上面的例子里面,出现了很多图标,比如各个游戏平台的图标、文件夹的图标和自定义的”阿赵Unity工具”的标题图片。这些图标是怎样调用的呢?
  从代码上看,是通过了

EditorGUIUtility.IconContent

  这个API来获得对应的图标图片的,传入图片的名字,不需要带扩展名,就可以获得相应的图片。
  这个方法,是通过读取Assets/Editor Default Resources/Icons这个路径来获得对应的图片的。这个Editor Default Resources文件夹,在项目里面是看不到的,我们可以自己在Assets文件夹下面建立这个文件夹,然后把图片放到里面。比如我的那个”阿赵Unity工具”标题图片,就是放在这个文件夹里面的。
在这里插入图片描述

  但有很多图片并不需要自己放到这个Assets/Editor Default Resources/Icons文件夹里面,也同样获取得到,比如平台图标"d_BuildSettings.Switch"或者文件夹图标"d_OpenedFolder Icon"。这是因为,Unity编辑器已经内置了一些可以使用的自带的图标,我们可以直接使用的。

2、 获取所有能用的内置图片名称

  既然Unity有很多默认的图标可以使用,那我们怎么知道这些图标的名字呢?比如刚才说的"d_BuildSettings.Switch",是怎么知道的呢?
  这里我做了个工具,可以获取所有的内置图标,并且点击的时候,会打印图标的名称并且复制到剪切板:
在这里插入图片描述

还可以搜索自己想要的关键词:
在这里插入图片描述

  这些内置的资源是怎样获取的呢?
  在网上很多人介绍,说通过Resrouces来获取,比如这样

Texture[] textures = Resources.FindObjectsOfTypeAll<Texture>();

  这种方法可以获取一部分的图标,但很多图标是获取不到的,看看Resources.FindObjectsOfTypeAll的API说明:

在这里插入图片描述

  这个方法只会获取Unity编辑器已经加载了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值