【问题标题】:Use Right click instead of left click for a unity button使用右键单击而不是左键单击作为统一按钮
【发布时间】:2021-02-23 23:09:48
【问题描述】:

我正在 Unity 中制作游戏,并创建了一个对话框,其中包含一组动态按钮回复,这些按钮回复通过代码在按钮预制件中生成。我对按钮进行了编码以转到下一行对话,如下所示:

 btn.GetComponentInChildren<Button>().onClick.AddListener((() =>
                        {
                            AnswerClicked(index);
                        }));

但是如果我想用鼠标右键运行AnswerClicked(index);呢?
当我有静态按钮选项时,我会添加一个名为RightButtonEvent的脚本,它会检查光标的位置以及用户是否像这样右键单击:

 void Update()
    {
        if ((Input.GetMouseButtonDown(1))&&(isOver))
        {
            onRightDown.Invoke();
        }
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        isOver = true;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        isOver = false;
    }
}

如何在上面的动态按钮中实现这一点?

【问题讨论】:

    标签: c# unity3d button


    【解决方案1】:

    不要为此使用按钮组件,而是将脚本添加到您想要交互的 UI 组件并使用OnPointerDown。要检查鼠标单击是左/右,请使用可从 OnPointerDown 方法访问的PointerEventData.button。以下是如何获取按钮的示例:

    public virtual void OnPointerClick(PointerEventData eventData)
    {
        if (eventData.button == PointerEventData.InputButton.Right)
            // Do what you want
    }
    

    【讨论】:

    • 这与RightButtonEvent'. I can't put this in the prefab that parents the dynamic button options. I have a dynamic index of answers available, I have no fixed number of ui elements. The index depends on a scriptable object that contains the dialog text and answers. Based on the number of index, it creates a number of child buttons as answers. thats why I use btn.GetComponentInChildren
    • 首先从您的预制件中移除按钮组件。然后,您可以创建一个实现 OnPointerDown 的 MonoBehaviour 脚本。您可以在那里轻松查看RMB。最后,在实例化时将脚本作为组件附加到您的预制件中。
    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2015-03-03
    • 2019-05-03
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多