【问题标题】:One script for multiple buttons in unity 5unity 5 中多个按钮的一个脚本
【发布时间】:2016-12-05 10:30:33
【问题描述】:

我正在使用 Unity 5。画布中有 2 个按钮 - YesButton 和 NoButton。我在两个按钮中只添加了一个名为“ButtonScript.cs”的脚本作为组件。

我需要-

  1. 按下 YesButton 时,Debug.Log("Yes");
  2. 按下 NoButton 时,Debug.Log("No");

我应该在我的脚本中写什么?

【问题讨论】:

    标签: c# unity5 unityscript


    【解决方案1】:

    有很多方法可以做到这一点,但我主要使用这个......

    public void buttonDownEvent(BaseEventData eventData){
    
        if (eventData.selectedObject == null)
            return;
    
        string textCheck = eventData.selectedObject.name;
    
        switch (textCheck) {
    
         case "Yes":
            Debug.Log(textCheck); // OutPut is YES;
            break;
         case "NO":
            Debug.Log(textCheck); // OutPut is NO;
            break;
         default:
            break;
     }
    

    【讨论】:

    • 感谢 Ajay kumar。
    【解决方案2】:

    最简单的方法是将参数传递给您要调用的方法OnClick,因此在您的ButtonScript.cs 文件中 - 您可以有这样的东西

    public void ClickLog(string theWord)
    {
        Debug.Log(theWord);
    }
    

    当你将此方法附加到按钮的OnClick时,你可以通过编辑器输入你想要传递给方法的内容。

    如果Buttons 是在代码中创建的 - 您可以像这样向OnClick 事件添加参数

    //Button called newButton
    UnityEngine.Events.UnityAction action1 = () => { ButtonScript.ClickLog("Yes"/*or "No"*/); };
     newButton.onClick.AddListener(action1);
    

    【讨论】:

    • IMO 使用UnityAction 的通用形式会更容易,比如UnityAction<string>
    【解决方案3】:

    有很多方法可以解决这个问题。第一个是你可以对标签进行操作:

    Debug.Log(gameObject.Tag == "YesButton" ? "Yes" : "No");
    

    但是(imo)处理标签很痛苦,所以最简单的方法就是进行一些枚举(用于未来的改进,如“是”、“否”、“取消”等)

    public enum ButtonType : byte {
        YES = 0,
        NO = (1 << 0)
    }
    
    // inside your button code
    [SerializeField]
    ButtonType _myType;
    public ButtonType Type { get { return _myType; } }
    

    编辑:

    与 Unity 的事件一起使用

    // inside ButtonScript.Start() or ButtonScript.Awake()
    this/* Button */.onClick.AddListener(new UnityEngine.Events.UnityAction(ButtonClicked));
    
    // and now make a new method inside ButtonScript
    void ButtonClicked()
    {
        // method with tags:
        Debug.Log(gameObject.Tag == "YesButton" ? : "Yes" : "No");
        // method with enumeration:
        Debug.Log(_myType.ToString());
    }
    

    【讨论】:

    • 我已经编辑了答案以使用 Unity 的事件系统。
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多