代码之家  ›  专栏  ›  技术社区  ›  flaurens

如何在鼠标悬停在单击后提高按钮的颜色?

  •  2
  • flaurens  · 技术社区  · 8 年前

    我正在做一个钢琴应用程序,被认为是在移动设备(Android)上播放的。所有的钢琴键都是UI按钮,按“property”键时颜色为灰色,以便正确指示钢琴键何时发出声音。
    我现在的问题是,当我第一次点击一个键,然后把鼠标拖到下面的键上时,只有我点击的第一个键得到了颜色的变化(这个想法是,当其他键发出声音时,颜色持续时间的变化就结束了,然后我通过鼠标手指的新键得到了灰色)。
    我还尝试将highlighted color属性设置为与按下的颜色相同的颜色,并将导航参数设置为none(如果设置为automatic,则会发生某种错误,即在我发出另一个键的声音之前,颜色会被“卡住”),但结果仍然相同。

    编辑:
    我用我取得的一些进展来更新这个问题:
    我想用脚本来改变按下的颜色,感谢事件指针的进入和退出(两个事件都放在每个按钮上的事件触发器)。
    代码:

    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;
        }
    
    }
    

    我得到的唯一改进是,现在当我拖动鼠标(维护它)时,第一个按钮返回到白色,但我认为这正在发生,因为现在我只设置为灰色按下的颜色选项。。。
    有人知道为什么我在剧本里按的颜色没有变化吗?当我拖动鼠标到另一个按键时不被认为是按下的按钮吗?

    当做!

    2 回复  |  直到 8 年前
        1
  •  1
  •   obywan    8 年前

    我不确定你是否还在寻找答案,但我终于有时间亲自尝试了。 我所做的是改变颜色和调试日志转换的名称,而不是播放声音。 我的图像/按钮代码(附加到每个图像,我没有使用 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;
    }
    }
    

    事件触发器设置:

    <code>Event trigger</code> Settings

    这就是它最后的样子:

    enter image description here

        2
  •  0
  •   Lotan    8 年前

    (这应该是一个评论,但有点长,所以回复我,我会更新答案)

    我不知道你为什么会有这个问题,我做了一个简单的测试,创建两个UI按钮,将突出显示的颜色设置为红色,将按下的设置为蓝色。

    默认情况下(没有附加任何脚本),行为如下:

    1.如果我按下(并保持)一个按钮,该按钮是蓝色的,当我释放“按下”,按钮保持红色。

    2.当第一个按钮是红色时,如果我将鼠标拖到第二个按钮上,它也会是红色的。

    3.如果我现在按下第二个按钮,第一个行为适用于第二个按钮,第一个按钮将再次变白。

    根据我的理解,这是你想要的以下行为。 所以,如果这不是你想要的行为,告诉我们你想要什么。