2016-07-23 31 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 `の値型の戻り値を変更することはできません。色'。値を一時変数に保存することを検討してください。

ボタンと色の両方を呼び出す前に変数として保存しようとしましたが、エラーコードは変更されませんでした。

EDIT

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

Iエラー資産/ _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; 

} 
関連する問題