GUIColor Attribute特性:用于任何屬性,并更改用于繪制屬性的GUI顏色。

繪制顏色提供兩種形式,一種為直接填寫RGBA

[GUIColor(0.3f, 0.8f, 0.8f, 1f)]
public int ColoredInt1;
[GUIColor(0.3f, 0.8f, 0.8f, 1f)]
public int ColoredInt2;
[ButtonGroup]
[GUIColor(0, 1, 0)]
private void Apply()
{
Debug.Log("應用");
}
[ButtonGroup]
[GUIColor(1, 0.6f, 0.4f)]
private void Cancel()
{
Debug.Log("取消");
}
另一種是提供一個返回Color的方法,所以這種方式可有實現(xiàn)動態(tài)顏色效果,逼格滿滿

[GUIColor("GetButtonColor")]
[Button(ButtonSizes.Gigantic)]
private static void IAmFabulous()
{
}
private static Color GetButtonColor()
{
Sirenix.Utilities.Editor.GUIHelper.RequestRepaint();
return Color.HSVToRGB(Mathf.Cos((float)UnityEditor.EditorApplication.timeSinceStartup + 1f) * 0.225f + 0.325f, 1, 1);
}
當然還有另一種寫法,使用@關鍵字將對應的方法體以字符串的形式傳入進去,也能達到和方法一樣的效果
// [GUIColor("@Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup))")]
// [GUIColor("CustomColor")]
// 這兩個寫法相等
[Button(ButtonSizes.Large)]
[GUIColor("@Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup))")]
private static void Expressive_One()
{
}
[Button(ButtonSizes.Large)]
[GUIColor("CustomColor")]
private static void Expressive_Two()
{
}
# if UNITY_EDITOR
public Color CustomColor()
{
return Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup));
}
# endif
完整示例代碼
using Sirenix.OdinInspector;
using UnityEditor;
using UnityEngine;
public class GUIColorExample : MonoBehaviour
{
[GUIColor(0.3f, 0.8f, 0.8f, 1f)]
public int ColoredInt1;
[GUIColor(0.3f, 0.8f, 0.8f, 1f)]
public int ColoredInt2;
[ButtonGroup]
[GUIColor(0, 1, 0)]
private void Apply()
{
Debug.Log("應用");
}
[ButtonGroup]
[GUIColor(1, 0.6f, 0.4f)]
private void Cancel()
{
Debug.Log("取消");
}
[GUIColor("GetButtonColor")]
[Button(ButtonSizes.Gigantic)]
private static void IAmFabulous()
{
}
private static Color GetButtonColor()
{
Sirenix.Utilities.Editor.GUIHelper.RequestRepaint();
return Color.HSVToRGB(Mathf.Cos((float)UnityEditor.EditorApplication.timeSinceStartup + 1f) * 0.225f + 0.325f, 1, 1);
}
// [GUIColor("@Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup))")]
// [GUIColor("CustomColor")]
// 這兩個寫法相等
[Button(ButtonSizes.Large)]
[GUIColor("@Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup))")]
private static void Expressive_One()
{
}
[Button(ButtonSizes.Large)]
[GUIColor("CustomColor")]
private static void Expressive_Two()
{
}
# if UNITY_EDITOR
public Color CustomColor()
{
return Color.Lerp(Color.red, Color.green, Mathf.Sin((float)EditorApplication.timeSinceStartup));
}
# endif
}