【发布时间】:2016-12-27 10:58:14
【问题描述】:
我编写了一些代码来更改按钮的视觉状态(无论单击哪个按钮,都会突出显示为蓝色,并将所有其他按钮恢复为默认颜色)。它似乎工作正常,但感觉很麻烦。有没有更有效/更简洁的方式来重写我的代码?非常感谢!
using UnityEngine ;
using System.Collections ;
using UnityEngine.UI ;
public class ToolButtons : MonoBehaviour
{
public Color activeColor ;
public Color inactiveColor ;
public GameObject iconBG ;
public Button ink, brush, crayon, pencil, spray, eraser, chnageColor, brushSize, undo, redo, clear, newAnimal ;
public GameObject inkIconBG, brushIconBG, crayonIconBG, pencilIconBG, sprayIconBG, eraserIconBG, changeColorIconBG, brushSizeIconBG ;
void Start ()
{
inactiveColor = iconBG.GetComponent <Image> ().color ;
}
// Use this for initialization
void buttonCallBack (Button buttonClicked)
{
//Change Color Palette Button clicked
if (buttonClicked == ink)
{
inkIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != ink)
{
inkIconBG.GetComponent <Image> ().color = inactiveColor ;
}
if (buttonClicked == brush)
{
brushIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != brush)
{
brushIconBG.GetComponent <Image> ().color = inactiveColor ;
}
if (buttonClicked == crayon)
{
crayonIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != crayon)
{
crayonIconBG.GetComponent <Image> ().color = inactiveColor ;
}
if (buttonClicked == pencil)
{
pencilIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != pencil)
{
pencilIconBG.GetComponent <Image> ().color = inactiveColor ;
}
if (buttonClicked == spray)
{
sprayIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != spray)
{
sprayIconBG.GetComponent <Image> ().color = inactiveColor ;
}
if (buttonClicked == eraser)
{
eraserIconBG.GetComponent <Image> ().color = activeColor ;
} else if (buttonClicked != eraser)
{
eraserIconBG.GetComponent <Image> ().color = inactiveColor ;
}
}
void OnEnable ()
{
ink.onClick.AddListener (() => buttonCallBack (ink)) ;
brush.onClick.AddListener (() => buttonCallBack (brush)) ;
crayon.onClick.AddListener (() => buttonCallBack (crayon)) ;
pencil.onClick.AddListener (() => buttonCallBack (pencil)) ;
spray.onClick.AddListener (() => buttonCallBack (spray)) ;
eraser.onClick.AddListener (() => buttonCallBack (eraser)) ;
}
void OnDisable ()
{
}
}
【问题讨论】:
-
您了解 Toggle Group 组件吗?
-
我知道@Aizen,但我以前没用过。
-
切换组件仅选择一个组件(在您的情况下为按钮),您可以更改组件的外观或颜色。并且自动地,其他人将被设置为默认状态。偏离您自己的自定义定义。这应该是您了解组件的最佳时间,因此您将节省大量时间。重新创建 Unity3D 已经为您提供的组件。
-
@Aizen a
Button与Toggle不同。 .Toggle Group用于Toggle组件。Toggle就像一个开关。Button用于检测对图像的简单点击。两者的行为不同,Toggle Group不适合这种情况。 -
“按钮与切换按钮不同”嗯,呵呵! “切换组用于切换组件” DUH DUH!? “按钮用于检测对图像的简单点击”不...... DUH....不......它是按钮而不是图像。检查代码。他想将按钮从非活动切换到活动,同时影响其他按钮。再试一次。显而易见的船长。