因为4.6 unity使用了一个新的UI系统,我从未使用过。到现在为止。
我尝试做的是以动态方式生成按钮,因此我还必须以动态方式添加onClick事件(或至少通过脚本编写)。
我试图扩展onClick Listener,但它并不想工作:
btn.GetComponent<Button>().onClick.AddListener(() => { placeBuilding(obj.name); });
它会给出这个错误,这个错误听起来很清楚:
Assets/Scripts/Menu/btnBouwen.cs(72,45): error CS0119: Expression denotes a 'method group', where a 'variable', 'value' or 'type' was expected
但是我不知道如何使用UnityAction
,因为它似乎是通话所需的类型。
感觉像我错过了一些非常简单的事情。希望有人可以帮助我。
亲切的问候, Nkmol
答案 0 :(得分:3)
我有一些工作,可能适合您的需求。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class MainLab : MonoBehaviour, IPointerClickHandler {
// Use this for initialization
void Start () {
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Hello");
}
}
在此我们添加了UnityEngine.EventSystems,然后添加了接口IpointerClickHandler。仅供参考,您还可以添加拖动或任何您想要的界面。
然后只是和方法接口。右键单击IPinterClickHandler,然后选择“实现接口”以检查它具有的其他方法。
您需要将此附加到gameObject。任何GameObject。包括按钮。
动态地在您的按钮列表中,您要将其添加为组件。 AddComponent();我将我的班级称为MainLab用于测试目的。
答案 1 :(得分:1)
我遇到的问题是我的Button
与我称为Button.cs
的自定义类冲突。现在我已经学会了不使用已经存在于环境中的类名^^
使用指向Class的直接路径修复它:
UnityEngine.UI.Button btn = newButton.GetComponent<UnityEngine.UI.Button>();
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() => placeBuilding(obj.name));
<强>码强>
GameObject button = Resources.Load <GameObject>("Button"); //loading from resource
GameObject newButton = Instantiate(button);
newButton.transform.parent = panel.transform;
newButton.GetComponentInChildren<Text>().text = obj.name;
newButton.transform.position = button.transform.position;
newButton.transform.position += new Vector3(20*x, -70 * z, 0);
UnityEngine.UI.Button btn = newButton.GetComponent<UnityEngine.UI.Button>();
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() => placeBuilding(obj.name));
此代码位于循环
中答案 2 :(得分:0)
如何将Lambda作为委托传递?
btn.GetComponent<Button>().onClick.AddListener(delegate
{
() => { placeBuilding(obj.name); }
});
答案 3 :(得分:0)
以下行应该可以正常工作。
btn.GetComponent<Button>().onClick.AddListener(() => { });
问题出在placeBuilding(obj.name);
,确保它在lambda之外工作。咨询this page。