我正在尝试使用这行代码更改 UI 按钮上的颜色。
prev.GetComponent<Button>().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误
Assets/_Scripts/OptionSwitch.cs(28,53):错误CS1612:无法修改“UnityEngine.UI.Selectable.colors”的值类型返回值。考虑将值存储在临时变量中
我尝试在调用按钮和颜色之前将它们存储为变量,但它不会更改错误代码。
编辑:
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Sprites;
public class OptionSwitch : MonoBehaviour {
ColorBlock colorBlock = new ColorBlock();
colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
[MenuItem ("GameObject/UI/Switch")]
static void Switch(){
if (GameObject.FindObjectOfType (typeof(Canvas)) != null) {
Canvas canvas = (Canvas)GameObject.FindObjectOfType (typeof(Canvas));
// Define Previous Button
GameObject prev = new GameObject ("Previous", typeof(Button));
prev.layer = 5;
prev.AddComponent<Image> ();
prev.transform.parent = canvas.transform;
prev.GetComponent<Image> ().sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UISprite.psd");
prev.GetComponent<Button>().colors = buttonColors;
// Define Previous Button Image
GameObject previm = new GameObject("Previous Image", typeof(RawImage));
previm.layer = 5;
previm.transform.parent = prev.transform;
} else {
// Create Canvas
GameObject canvas = new GameObject("Canvas", typeof(Canvas));
canvas.AddComponent<CanvasScaler> ();
canvas.AddComponent<GraphicRaycaster> ();
canvas.layer = 5;
canvas.GetComponent<Canvas> ().renderMode = RenderMode.ScreenSpaceOverlay;
canvas.transform.localPosition = Vector3.zero;
// Create Event System
GameObject eventsystem = new GameObject("EventSystem", typeof(EventSystem));
eventsystem.AddComponent<StandaloneInputModule>();
eventsystem.AddComponent<TouchInputModule>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
你必须改变的是colors
而不是normalColor
。回报。GetComponent<Button>().colors
ColorBlock
因此,创建 的新实例ColorBlock
。修改normalColor
然后ColorBlock
将其分配ColorBlock
给GetComponent<Button>().colors
.
完整示例:
ColorBlock colorBlock = new ColorBlock();
colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
prev.GetComponent<Button>().colors = colorBlock;
Run Code Online (Sandbox Code Playgroud)
这将覆盖您的其他颜色设置。为了保护它们,请创建您ColorBlock
的prev.GetComponent<Button>().colors;
ColorBlock colorBlock = prev.GetComponent<Button>().colors;
colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
prev.GetComponent<Button>().colors = colorBlock;
Run Code Online (Sandbox Code Playgroud)
您还可以修改以下颜色属性:
colorBlock.pressedColor = new Color(1f, 0.0f, 0.0f, 1.0f);
colorBlock.highlightedColor = new Color(0f, 1f, 0.0f, 1.0f);
colorBlock.disabledColor = new Color(0f, 0f, 1, 1.0f);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8596 次 |
最近记录: |