Unity3D通过脚本修改游戏对象图标Select Icon

来源:互联网 发布:专门看美剧的软件 编辑:程序博客网 时间:2024/05/16 13:00

本文固定连接:http://blog.csdn.net/u013108312/article/details/53811458
购买unity3d视频链接:http://mp.weixin.qq.com/s/8RN8bNqG5aD0cSqeWbRL5A


新建 IconManager.cs

using System;using System.Reflection;using UnityEditor;using UnityEngine;/// <summary>/// 对象Icon管理设置/// </summary>public class IconManager{    #region 数据定义    private static GUIContent[] labelIcons;    private static GUIContent[] largeIcons;    /// <summary>    /// Label类型icon 显示文字的    /// </summary>    public enum LabelIcon    {        Gray = 0,        Blue,        Teal,        Green,        Yellow,        Orange,        Red,        Purple    }    /// <summary>    /// 其他icon不显示文字    /// </summary>    public enum Icon    {        CircleGray = 0,        CircleBlue,        CircleTeal,        CircleGreen,        CircleYellow,        CircleOrange,        CircleRed,        CirclePurple,        DiamondGray,        DiamondBlue,        DiamondTeal,        DiamondGreen,        DiamondYellow,        DiamondOrange,        DiamondRed,        DiamondPurple    }    #endregion    #region 外部接口    public static void SetIcon(GameObject gObj, LabelIcon icon)    {        if (labelIcons == null)        {            labelIcons = GetTextures("sv_label_", string.Empty, 0, 8);        }        SetIcon(gObj, labelIcons[(int)icon].image as Texture2D);    }    public static void SetIcon(GameObject gObj, Icon icon)    {        if (largeIcons == null)        {            largeIcons = GetTextures("sv_icon_dot", "_pix16_gizmo", 0, 16);        }        SetIcon(gObj, largeIcons[(int)icon].image as Texture2D);    }    private static void SetIcon(GameObject gObj, Texture2D texture)    {        var ty = typeof(EditorGUIUtility);        var mi = ty.GetMethod("SetIconForObject", BindingFlags.NonPublic | BindingFlags.Static);        mi.Invoke(null, new object[] { gObj, texture });    }    #endregion    #region 内部    private static GUIContent[] GetTextures(string baseName, string postFix, int startIndex, int count)    {        GUIContent[] guiContentArray = new GUIContent[count];        var t = typeof(EditorGUIUtility);        var mi = t.GetMethod("IconContent", BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(string) }, null);        for (int index = 0; index < count; ++index)        {            guiContentArray[index] = mi.Invoke(null, new object[] { baseName + (object)(startIndex + index) + postFix }) as GUIContent;        }        return guiContentArray;    }    #endregion}

测试:

IconManager.SetIcon(obj, IconManager.LabelIcon.Blue);
1 0
原创粉丝点击