GUISkin是基本所有样式的集合,可以作为一种配置资源。如果开发者需要自定义大量的GUIStyle,可以通过GUISkin配置资源来定义,并且开发者可以在Inspector面板中直接修改样式。
Unity 中的GUI Skin
在Unity中有提供很多的 GUIStyle ,在Project面板,鼠标右键 Create -> GUI Skin 既可以创建。
这里可以查看Unity所有的 GUIStyle 以及它们的属性,
在项目中如何使用。
使用方法1:
可以将新建的GUISkin资源放在Editor里的Resources文件内,方便动态加载。
在编辑器中修改Box的这两个属性
在代码中使用
using UnityEngine;
using UnityEditor;
public class TestWnd : EditorWindow
{
[MenuItem("Tools/Test窗口")]
public static void OpenWnd()
{
TestWnd wnd = EditorWindow.GetWindow<TestWnd >(false, "Test");
//wnd.autoRepaintOnSceneChange = true;
wnd.minSize = new Vector2(400, 400);
wnd.Repaint();
wnd.Show();
//wnd.Close();
}
private GUIStyle _boxStyle;
private void OnEnable()
{
GUISkin skin = Resources.Load("New GUISkin") as GUISkin;
_boxStyle = skin.box;
}
/// <summary>
/// 在Unity编辑器 窗口类中调用(EditorWindow)
/// </summary>
private void OnGUI()
{
GUILayout.Label("使用默认的 GUIStyle");
GUILayout.Label("使用自定义的GUIStyle", _boxStyle);
// 使用Unity 提供的GUIStyle Box
GUILayout.Label("使用Unity 提供的GUIStyle Box", "box", GUILayout.Width(Screen.width - 10));
}
}
实现效果:
接下来,就可以通过GUISkin资源来修改样式效果了。
其他的GUIStyle要修改样式,直接修改 GUIStyle 的属性就可以了;
使用方法2:
代码创建,不用在Project面板中创建 GUI Skin 资源。
在上面可以看到每种 GUIStyle 的属性都包含name字段,如Box类型的属性字段name="box",代码中就可以利用这字段来创建自定义的GUIStyle
// 创建一种自定义的GUIStyle,它的模板为Box。然后就可以修改自定义的GUIStyle中的属性了。
GUIStyle mysytle = new GUIStyle("box");
mysytle.fontStyle = FontStyle.Bold;
详细代码
/// <summary>
/// 在Unity编辑器 窗口类中调用(EditorWindow)
/// </summary>
private void OnGUI()
{
// 使用Unity 提供的GUIStyle Box
GUILayout.Label("测试 1:Unity 提供的GUIStyle Box", "box", GUILayout.Width(Screen.width - 10));
// 利用Unity的GUIStyle Box 创建新的GUIStyle
GUIStyle myboxsytle = new GUIStyle("box");
myboxsytle.fontStyle = FontStyle.Bold;
myboxsytle.fontSize = 15;
myboxsytle.normal.textColor = Color.white;
myboxsytle.alignment = TextAnchor.MiddleLeft;
GUILayout.Label("测试 2:新创建的GUIStyle,fontSize = 15,Color.white,TextAnchor.MiddleLeft", myboxsytle, GUILayout.Width(Screen.width - 10));
myboxsytle.fontStyle = FontStyle.Italic;
myboxsytle.fontSize = 13;
myboxsytle.normal.textColor = Color.red;
myboxsytle.alignment = TextAnchor.MiddleRight;
GUILayout.Label("测试 3:新创建的GUIStyle,fontSize = 13,Color.red,TextAnchor.MiddleRight", myboxsytle, GUILayout.Width(Screen.width - 10));
//验证myboxsytle与Unity提供的box不是同一个GUIStyle
GUILayout.Label("测试 4:Unity 提供的GUIStyle Box", "box", GUILayout.Width(Screen.width - 10));
}
效果图如下: