IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity 内置图标 -> 正文阅读

[游戏开发]Unity 内置图标

作Unity工具的时候,功能虽然很重要,但是美观也很重要。所以,用Unity内置自带的图标,会感觉更好看一点。

那么问题来了,你怎么得到Unity的内置图标呢?

雨松MOMO写过个博客,他反编译了一下editor的dll,用正则把图标信息给提取了出来。诶我【哔–】,我这菜【哔–】没看过反编译怎么办?【雨松MOMO:他的图标

那其实也还有其他的方法。我们可以直接用 Resources 的 FindObjectsOfTypeAll 先看看。

/*
 * 查看所有 Textures
 * 
 * 
 * 
 */


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

public class UnityIconsWindow : EditorWindow
{

    [MenuItem(("JJJ/Unity Textures Window"))]
    static void Init()
    {
        UnityIconsWindow window = EditorWindow.GetWindow<UnityIconsWindow>("Unity Textures Window");
        //加载所有Texture2D
        window.textures = Resources.FindObjectsOfTypeAll<Texture2D>();
        window.minSize = new Vector2(200, 400);

        //用于GUI
        window.fullRect = new Rect();
        foreach (var texture in window.textures)
        {
            window.fullRect.height += texture.height + 15 + 5 + 10;
        }
    }

    Vector2 scrollPos;

    Texture2D[] textures;

    Rect fullRect;

    void OnGUI()
    {
        Rect scrollrect = new Rect();
        scrollrect.width = position.width;
        scrollrect.height = position.height;

        scrollPos = GUI.BeginScrollView(scrollrect, scrollPos, fullRect);

        Rect r = new Rect();
        r.x = 10;

        Rect box = new Rect();
        box.x = 7;
        box.width = position.width - 30;

        foreach (Texture2D texture in textures)
        {
            box.y = r.y;
            box.height = 15 + 5 + texture.height + 2;
            GUI.Box(box, "");

            r.height = 15;
            r.width = position.width;
            //绘制名字
            GUI.Label(r, texture.name);
            r.y += r.height;

            r.y += 5;

            r.height = texture.height;
            r.width = texture.width;
            //绘制图标
            GUI.DrawTexture(r, texture);
            r.y += texture.height;

            r.y += 10;
        }
        GUI.EndScrollView();
    }
}

接下来,我们就可以看到很多见过的图标。
最好是在新建一个空项目里面,因为项目自己本身的Texture也会加载进来。
在这里插入图片描述

但是其中我发现了一些问题,有一些Texture 的 name字段是空?
诶卧【哔–】?
在这里插入图片描述
这也行吗?但是没关系,问题不大,我们不用这张图。

那现在我们看到了这些图片,怎么在我们的工具里用它们呢?这你总不能每次用它都加载,然后遍历,取名字一样的吧?

其实,Unity是有API通过名字获得具体的Icon,

	public static GUIContent IconContent (string name, string text= null);
	
	//name	所需图标的名称。
	//text	悬停在图标上的工具提示。

	//从具有给定名称的 Unity 内置资源中获取 GUIContent。
	//EditorGUIUtility.IconContent 用于为 GUI 元素创建 GUIContent。 
	//只会加载图标.通常情况下,将使用第一个参数获取 Assets/Editor Default 	Resources/Icons 中的图标。 
	//只需要图标的名称,而不需要 png 扩展名。 \ 第二个参数为悬停工具提示提供文本。
	//此字符串 需要以竖线“|”字符开头以将其标记为工具提示。
	//注意:目前无法悬停定位在工具提示上方。

要创建 GUIContent 就直接这个API就好了,那如果只是要 Texture 呢?那也很简单,

     Texture texture = EditorGUIUtility.IconContent("IconName").image;
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:59:26  更:2021-09-22 14:59:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 4:51:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码