【雨松MOMO】 Unity3D研究院之系统内置系统图标大整理
在进行编辑器开发时,我们有时会希望使用系统按钮的图标,但却不知如何实现。Unity的系统图标主要分为两类:一类是鼠标图标(即鼠标置于Rect区域时的样式),另一类是按钮图标。
对于鼠标图标,Unity提供了枚举类型,我们可以通过遍历枚举来获取。而系统图标在Unity中是以字符串形式加载的,为了获取这些图标名称,我对编辑器的DLL进行了反编译,并使用正则表达式提取出相关内容,结果如下图所示(此处虽原文未给出图,但可推测有相关展示)。
为了让大家能更清晰地对应图标和名称,我重新截取了一张图。以下是整理好的系统图标名称列表:
TreeEditor.AddLeaves
TreeEditor.AddBranches
TreeEditor.Trash
TreeEditor.Duplicate
TreeEditor.Refresh
editicon.sml
tree_icon_branch_frond
tree_icon_branch
tree_icon_frond
tree_icon_leaf
tree_icon
animationvisibilitytoggleon
animationvisibilitytoggleoff
MonoLogo
AgeiaLogo
AboutWindow.MainHeader
Animation.AddEvent
lightMeter/greenLight
lightMeter/lightRim
lightMeter/orangeLight
lightMeter/redLight
Animation.PrevKey
Animation.NextKey
Animation.AddKeyframe
Animation.EventMarker
Animation.Play
Animation.Record
AS Badge Delete
AS Badge Move
AS Badge New
WelcomeScreen.AssetStoreLogo
preAudioAutoPlayOff
preAudioAutoPlayOn
preAudioPlayOff
preAudioPlayOn
preAudioLoopOff
preAudioLoopOn
AvatarInspector/BodySilhouette
AvatarInspector/HeadZoomSilhouette
AvatarInspector/LeftHandZoomSilhouette
AvatarInspector/RightHandZoomSilhouette
AvatarInspector/Torso
AvatarInspector/Head
AvatarInspector/LeftArm
AvatarInspector/LeftFingers
AvatarInspector/RightArm
AvatarInspector/RightFingers
AvatarInspector/LeftLeg
AvatarInspector/RightLeg
AvatarInspector/HeadZoom
AvatarInspector/LeftHandZoom
AvatarInspector/RightHandZoom
AvatarInspector/DotFill
AvatarInspector/DotFrame
AvatarInspector/DotFrameDotted
AvatarInspector/DotSelection
SpeedScale
AvatarPivot
Avatar Icon
Mirror
AvatarInspector/BodySIlhouette
AvatarInspector/BodyPartPicker
AvatarInspector/MaskEditor_Root
AvatarInspector/LeftFeetIk
AvatarInspector/RightFeetIk
AvatarInspector/LeftFingersIk
AvatarInspector/RightFingersIk
BuildSettings.SelectedIcon
SocialNetworks.UDNLogo
SocialNetworks.LinkedInShare
SocialNetworks.FacebookShare
SocialNetworks.Tweet
SocialNetworks.UDNOpen
Clipboard
Toolbar Minus
ClothInspector.PaintValue
EditCollider
EyeDropper.Large
ColorPicker.CycleColor
ColorPicker.CycleSlider
PreTextureMipMapLow
PreTextureMipMapHigh
PreTextureAlpha
PreTextureRGB
Icon Dropdown
UnityLogo
Profiler.PrevFrame
Profiler.NextFrame
GameObject Icon
Prefab Icon
PrefabNormal Icon
PrefabModel Icon
ScriptableObject Icon
sv_icon_none
PreMatLight0
PreMatLight1
Toolbar Plus
Camera Icon
PreMatSphere
PreMatCube
PreMatCylinder
PreMatTorus
PlayButton
PauseButton
HorizontalSplit
VerticalSplit
BuildSettings.Web.Small
js Script Icon
cs Script Icon
boo Script Icon
Shader Icon
TextAsset Icon
AnimatorController Icon
AudioMixerController Icon
RectTransformRaw
RectTransformBlueprint
MoveTool
MeshRenderer Icon
Terrain Icon
SceneviewLighting
SceneviewFx
SceneviewAudio
SettingsIcon
TerrainInspector.TerrainToolRaise
TerrainInspector.TerrainToolSetHeight
TerrainInspector.TerrainToolSmoothHeight
TerrainInspector.TerrainToolSplat
TerrainInspector.TerrainToolTrees
TerrainInspector.TerrainToolPlants
TerrainInspector.TerrainToolSettings
RotateTool
ScaleTool
RectTool
MoveTool On
RotateTool On
ScaleTool On
RectTool On
ViewToolOrbit
ViewToolMove
ViewToolZoom
ViewToolOrbit On
ViewToolMove On
ViewToolZoom On
StepButton
PlayButtonProfile
PlayButton On
PauseButton On
StepButton On
PlayButtonProfile On
PlayButton Anim
PauseButton Anim
StepButton Anim
PlayButtonProfile Anim
WelcomeScreen.MainHeader
WelcomeScreen.VideoTutLogo
WelcomeScreen.UnityBasicsLogo
WelcomeScreen.UnityForumLogo
WelcomeScreen.UnityAnswersLogo
Toolbar Plus More
最后,为大家提供相关代码。需要注意的是,我的代码是将上述图标名称保存到文件中,然后使用Resources.Load方法来完成加载的。
using UnityEngine;
using UnityEditor;
using System;
class MyWindow : EditorWindow
{
static string []text;
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(MyWindow));
text = Resources.Load("t").text.Split('\n');
}
public Vector2 scrollPosition;
void OnGUI()
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition);
// 鼠标放在按钮上的样式
foreach (MouseCursor item in Enum.GetValues(typeof(MouseCursor)))
{
GUILayout.Button(Enum.GetName(typeof(MouseCursor), item));
EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), item);
GUILayout.Space(10);
}
// 内置图标
for(int i = 0; i < text.Length; i += 8)
{
GUILayout.BeginHorizontal();
for (int j = 0; j < 8; j++)
{
int index = i + j;
if(index < text.Length)
GUILayout.Button(EditorGUIUtility.IconContent(text[index]), GUILayout.Width(50), GUILayout.Height(30));
}
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
}
}
本文固定链接: http://www.xuanyusong.com/archives/3777
转载请注明: 雨松MOMO 2015年12月02日 于 雨松MOMO程序研究院 发表