2016-07-23 5 views
1

이 코드 줄을 사용하여 UI 단추의 색을 변경하려고합니다.스크립트를 통해 UI 단추의 색을 변경하십시오.

prev.GetComponent<Button>().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f); 

하지만 난이 오류가 발생 해요/_Scripts/OptionSwitch.cs

자산 (28,53) : 오류 CS1612 : UnityEngine.UI.Selectable`의 값 형식의 반환 값을 수정할 수 없습니다 .그림 물감'. 값을 임시 변수에 저장하는 것을 고려하십시오.

단추와 색을 호출하기 전에 변수로 저장하려고했으나 오류 코드는 변경되지 않았습니다.

편집 :

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

당신은 colors하지 normalColor 변경해야합니다. GetComponent<Button>().colorsColorBlock을 반환합니다.

따라서 ColorBlock의 새 인스턴스를 만듭니다. normalColorColorBlock에서 수정 한 다음 ColorBlockGetComponent<Button>().colors에 할당하십시오.

전체 예 :

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

prev.GetComponent<Button>().colors = colorBlock; 

이 다른 색상 설정을 덮어 쓰게됩니다. 그들에 구명하려면 ColorBlockprev.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); 
+0

나는 오류 자산/_Scripts/OptionSwitch.cs (10,28) 받고 있어요 : 오류 CS1519 : 예기치 않은 기호 '='클래스, 구조체 또는 인터페이스 멤버 선언 및 자산/_Scripts/OptionSwitch.cs을 (10,43) : 오류 CS1519 : 클래스, 구조체 또는 인터페이스 멤버 선언에서 예기치 않은 기호 '0'이 – Jdoonan

+0

코드 줄? 위에서 게시 한 코드는 내 측면에서 완벽하게 작동합니다. 너는 뭔가 잘못하고있다. 나는 당신이이 권리를 가지고 있는지 확인하기 위해 새 스크립트를 만드는 것이 좋습니다. 가능한 경우 코드를 직접 응답에서 복사하십시오. – Programmer

+0

나는 그것을 10 행에 직접 복사했는데, 당신이 컬러 블록을 정의하는데 사용하는 비표준 네임 스페이스가 있는가? – Jdoonan

-2

나는 모든 .GetComponents와 무슨 일이야 모르지만 너무 다른 방법이있다!

이 방법은 버튼이 여러 개이고 색상을 변경하거나 사라지게하려는 경우에 적합합니다.

Color.red , Color.grey , ... 

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

} 
관련 문제