Unity使用脚本动态设置物体的icon图标|SceneView,修改select icon
前言
在Scene场景中,有一个个方便定位观察调试物体的小功能。它可以为Gameobject添加一个图标或标签,这样就能很清晰的找到对应的Gameobject。
通常我们的操作是在Inspector面板中手动设置。但这对于动态临时生成的物体是不可操作的,好在Unity开放了这块的代码接口,可以让我们动态的在脚本里面设置物体的icon。
脚本动态设置
创建脚本 EditorGizmosIconManager,并编写以下内容:
using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;
/// <summary>
/// 对象GizmosIcon管理器
/// </summary>
public class EditorGizmosIconManager
{
#region 数据定义
private static GUIContent[] labelIcons;
private static GUIContent[] largeIcons;
public enum LabelIcon
{
Gray = 0,
Blue,
Teal,
Green,
Yellow,
Orange,
Red,
Purple
}
public enum Icon
{
CircleGray = 0,
CircleBlue,
CircleTeal,
CircleGreen,
CircleYellow,
CircleOrange,
CircleRed,
CirclePurple,
DiamondGray,
DiamondBlue,
DiamondTeal,
DiamondGreen,
DiamondYellow,
DiamondOrange,
DiamondRed,
DiamondPurple
}
#endregion
public static void SetIcon(GameObject node, LabelIcon icon)
{
if (labelIcons == null)
{
labelIcons = GetTextures("sv_label_", string.Empty, 0, 8);
}
SetIcon(node, labelIcons[(int)icon].image as Texture2D);
}
public static void SetIcon(GameObject node, Icon icon)
{
if (largeIcons == null)
{
largeIcons = GetTextures("sv_icon_dot", "_pix16_gizmo", 0, 16);
}
SetIcon(node, largeIcons[(int)icon].image as Texture2D);
}
private static void SetIcon(GameObject node, Texture2D texture)
{
EditorGUIUtility.SetIconForObject(node, texture);
}
private static GUIContent[] GetTextures(string baseName, string postFix, int startIndex, int count)
{
GUIContent[] guiContentArray = new GUIContent[count];
for (int index = 0; index < count; ++index)
{
guiContentArray[index] = EditorGUIUtility.IconContent(baseName + (startIndex + index) + postFix);
}
return guiContentArray;
}
}
LabelIcon枚举定义了标签类型的图标种类
Icon枚举定义了贴图\图片类型的图标种类
SetIcon:调用SetIcon函数,传递游戏对象及图标标识更改游戏物体在SceneView下的图标。
EditorGUIUtility.SetIconForObject(node, texture);
EditorGUIUtility.SetIconForObject函数用于设置物体图标的贴图。
EditorGUIUtility.IconContent(baseName + (startIndex + index) + postFix);
EditorGUIUtility.IconContent函数用于获取Unity内置的图标贴图,Unity内置的这些图标贴图的文件名是有一定的命名规则的。可以查看GitHub - halak/unity-editor-icons ,该仓库下的README阅读说明文件 说明了所有内置的图标贴图名称以及对应的贴图文件FileID。
修改Meta
除了使用唯一的命名获取贴图,也可以通过更改物体对应的meta文件或场景对应的meta文件下对应物体对象的icon属性中的fileid和guid。该方法只适用于修改预制件、脚本和"静态"(编译后非运行)场景中的物体ICON。通常用于批量处理信息。
以脚本为例,脚本文件对应的meta文件icon属性默认如下所示:
图中的icon,填的“instanceID = 0”即为默认显示
修改或添加icon属性中的fileid和guid,即可。如下图所示
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/unity_technologyshare/2933/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!