统一5中多个按钮的一个脚本
One script for multiple buttons in unity 5
我正在使用 Unity 5。Canvas 中有 2 个按钮 - YesButton 和 NoButton。我在两个按钮中只添加了一个名为 "ButtonScript.cs" 的脚本作为组件。
我需要-
- 按下 YesButton 时,
Debug.Log("Yes");
- 按下 NoButton 时,
Debug.Log("No");
我应该在脚本中写什么?
有很多方法可以解决这个问题。第一个是您可以对标签进行操作:
Debug.Log(gameObject.Tag == "YesButton" ? "Yes" : "No");
但是 (imo) 处理标签很痛苦,所以最简单的方法就是做一些枚举(为了将来的改进,比如 "Yes"、"No"、"Cancel" 等)
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());
}
最简单的方法是将一个参数传递到您要调用的方法中 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);
有很多方法可以做到这一点,但我主要使用这个...
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;
}
我正在使用 Unity 5。Canvas 中有 2 个按钮 - YesButton 和 NoButton。我在两个按钮中只添加了一个名为 "ButtonScript.cs" 的脚本作为组件。
我需要-
- 按下 YesButton 时,
Debug.Log("Yes");
- 按下 NoButton 时,
Debug.Log("No");
我应该在脚本中写什么?
有很多方法可以解决这个问题。第一个是您可以对标签进行操作:
Debug.Log(gameObject.Tag == "YesButton" ? "Yes" : "No");
但是 (imo) 处理标签很痛苦,所以最简单的方法就是做一些枚举(为了将来的改进,比如 "Yes"、"No"、"Cancel" 等)
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());
}
最简单的方法是将一个参数传递到您要调用的方法中 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);
有很多方法可以做到这一点,但我主要使用这个...
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;
}