通过脚本更改UI按钮的颜色

我正在尝试使用这行代码更改UI按钮上的颜色。

prev.GetComponent

但是我收到了这个错误

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 (); prev.transform.parent = canvas.transform; prev.GetComponent ().sprite = AssetDatabase.GetBuiltinExtraResource("UI/Skin/UISprite.psd"); prev.GetComponent

您必须更改colors而不是normalColorGetComponent返回ColorBlock

因此,创建一个ColorBlock的新实例。 从该ColorBlock修改normalColor ,然后将该ColorBlock分配给GetComponent

完整示例:

 ColorBlock colorBlock = new ColorBlock(); colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f); prev.GetComponent 

这将覆盖您的其他颜色设置。 要保留它们,请从prev.GetComponent创建ColorBlock prev.GetComponent

 ColorBlock colorBlock = prev.GetComponent 

您还可以修改以下颜色属性:

 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); 

我不知道所有的.GetComponents是什么,但还有另一种方式!

当您有多个按钮并希望只更改颜色或使它们消失时,此方法适用。

 Color.red , Color.grey , ... for (int i = 0; i < 5; i++) { alchemistVoScript.gatedButtons [i].image.color = Color.clear; alchemistVoScript.gatedButtons [i].interactable = false; }