通过脚本更改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
而不是normalColor
。 GetComponent
返回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; }