我正尝试使用这行代码更改UI按钮的颜色。
prev.GetComponent<Button>().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
但我收到了这个错误
Assets/_Scripts/OptionSwitch.cs(28,53):错误CS 1612:无法修改“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>();
}
}
}
3条答案
按热度按时间swvgeqrz1#
您必须更改
colors
而不是normalColor
。GetComponent<Button>().colors
返回ColorBlock
。因此,创建一个新的
ColorBlock
示例。从ColorBlock
修改normalColor
,然后将ColorBlock
分配给GetComponent<Button>().colors
。完整示例:
这将覆盖其他颜色设置。要保留它们,请从
prev.GetComponent<Button>().colors;
创建ColorBlock
您还可以修改以下颜色属性:
44u64gxh2#
wqlqzqxt3#
我不知道所有的
.GetComponents
是怎么回事,但也有另一种方法!这种方法适用于当你有多个按钮,只想改变它们的颜色或使它们消失。