Unity3D通过脚本修改游戏对象图标Select Icon
发表于2018-09-04
做编辑器的时候需要修改游戏对象游戏图标,方便美术人员和编辑,下面就教大家如何通过脚本来修改游戏对象图标,方法其实很容易,有不了解的可以看看。

新建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);
来自:https://blog.csdn.net/u013108312/article/details/53811458