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


本文固定连接: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;

/// 
/// 对象Icon管理设置
/// 
public class IconManager
{
    #region 数据定义
    private static GUIContent[] labelIcons;
    private static GUIContent[] largeIcons;

    /// 
    /// Label类型icon 显示文字的
    /// 
    public enum LabelIcon
    {
        Gray = 0,
        Blue,
        Teal,
        Green,
        Yellow,
        Orange,
        Red,
        Purple
    }
    /// 
    /// 其他icon不显示文字
    /// 
    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);

你可能感兴趣的:(Unity3d)