我正在做一个钢琴应用程序,认为该应用程序可以在移动设备(Android)上播放。所有钢琴键都是UI按钮,将“属性”按下的颜色变为灰色,以便正确指示何时钢琴键发出声音。
我当前的问题是,当我第一次单击某个键,然后将鼠标拖动到以下键上时,只有我单击的第一个键得到了颜色变化(这个想法是,当其他颜色变化时,颜色持续时间的变化会完成键开始发出声音,然后我通过鼠标手指的新键显示为灰色)。
我还尝试将“ higlighted color”属性设置为与按下的颜色相同的颜色,并且将“ Navigation”参数导航为none(如果将其设置为“ auto”,则会发生某种错误,即该颜色被“卡住”,直到我发出另一个按键声音为止),但结果还是一样。
编辑:
我用取得的一些进展更新了这个问题:
由于指针进入和退出事件(这两个事件都放置在每个按钮的事件触发器上),因此我试图通过脚本更改按下的颜色。
代码:
public class ChangeKeyColor : MonoBehaviour{
public Button button;
void Start()
{
}
void Update()
{
}
public void EnterKey () {
Debug.Log("Enter the key");
ColorBlock colors = button.colors;
colors.normalColor = new Color(179, 179, 179, 255);
//colors.highlightedColor = new Color32(179, 179, 179, 255);
button.colors = colors;
}
public void ExitKey()
{
Debug.Log("Exits the key");
ColorBlock colors = button.colors;
colors.normalColor = Color.white;
//colors.highlightedColor = new Color32(255, 255, 255, 255);
//colors.pressedColor = Color.white;
button.colors = colors;
}
}
我获得的唯一改进是,当我拖动鼠标(维护它)时,第一个按钮恢复为白色,但是我认为这是发生的,因为现在我仅将按下的颜色选项设置为灰色...
有谁知道为什么我在脚本中进行的按下颜色更改没有发生?当我将鼠标拖动到另一个键时,是否不被视为按下按钮?
致谢!
答案 0 :(得分:1)
我不确定您是否还在寻找答案,但是我终于有时间自己尝试一下。
我所做的是更改颜色和调试日志记录转换的名称,而不是播放声音。
我的图像/按钮代码(附加到每个图像上,我没有使用Button
组件):
using UnityEngine;
using UnityEngine.UI;
public class ChangeColor : MonoBehaviour {
public Color activeColor, notActiveColor;
private Image thisImage;
void Awake () {
thisImage = GetComponent<Image>();
}
public void OnPointerClick()
{
Activate();
}
public void OnPointerEnterAndDown()
{
if (Input.GetKey(KeyCode.Mouse0))
{
Activate();
}
}
public void OnPointerExit()
{
thisImage.color = notActiveColor;
}
private void Activate()
{
Debug.Log(transform.name);
thisImage.color = activeColor;
}
}
EventTrigger设置:
这就是最后的样子:
答案 1 :(得分:0)
(这应该是评论,但是有点长,所以请回复我,我会更新答案)
我不知道您为什么会有这个问题,我进行了简单的测试,创建了2个UI按钮,并将突出显示的颜色设置为红色,而将按下的按钮设置为蓝色。
默认情况下(没有脚本附加到任何内容),行为如下:
1。如果按下(并保持)按钮的单击,则该按钮为蓝色,当我释放“压力”时,该按钮将保持红色。
2。虽然第一个按钮是红色的,但是如果我将鼠标拖到第二个按钮上,它也会是红色的。
3。如果现在我按下第二个按钮,则第一个行为将应用于第二个按钮,第一个将再次变为白色。
根据我的理解,这是您想要的以下行为。 因此,如果这不是您想要的行为,请告诉我们更多有关您想要的东西。