我正在尝试使用这行代码更改 UI 按钮上的颜色。
prev.GetComponent<Button>().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
但是我收到这个错误
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>();
}
}
}
你必须改变
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;
这将覆盖您的其他颜色设置。为了保护它们,从
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;
您还可以修改以下颜色属性:
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);
ColorBlock colorBlock = new ColorBlock();
colorBlock.normalColor = Color.yellow;
colorBlock.colorMultiplier = 1;
gameManager.setCurrentLevelBoardRef.currentButtonArray[numbersToColor[i]].
GetComponent<Button>().colors= colorBlock;
///
我不知道所有
.GetComponents
是怎么回事,但还有另一种方法!
当您有多个按钮并且只想更改它们的颜色或让它们消失时,此方法适用。
Color.red , Color.grey , ...
for (int i = 0; i < 5; i++) {
alchemistVoScript.gatedButtons [i].image.color = Color.clear;
alchemistVoScript.gatedButtons [i].interactable = false;
}