我有上述元素,由于有点久了忘了他怎么制造出来了的,这个元素比较特别,是一个Sprite,并非UI元素。使用EventTrigger绑定事件监听鼠标无任何反应,百思不得其解。代码怎么看都没问题(使用了StrangeIoc框架)如下:
using GameLogic.signal;
using strange.extensions.mediation.impl;
using UnityEngine;
using UnityEngine.EventSystems;
namespace GameLogic.view
{
public class UI_GameObjSelect : View
{
[Inject]
public GameObjClickSignal GameObjClick { get; set; }
internal void init()
{
//调用
AddEventTrigger(this.transform, EventTriggerType.PointerDown, DropFun);
}
/// <summary>
/// event事件绑定的方法
/// </summary>
/// <param name="insObject">事件物体</param>
/// <param name="eventType">事件类型</param>
/// <param name="myFunction">事件需要的回调方法</param>
public void AddEventTrigger(Transform insObject, EventTriggerType eventType, UnityEngine.Events.UnityAction<BaseEventData> myFunction)//泛型委托
{
EventTrigger trigger = insObject.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = insObject.transform.gameObject.AddComponent<EventTrigger>();
}
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventType;
entry.callback.AddListener(myFunction);
trigger.triggers.Add(entry);
}
//回调函数
public void DropFun(BaseEventData data)
{
PointerEventData thisEvent = (PointerEventData)data;
string strClickType = "";
if (thisEvent.button == PointerEventData.InputButton.Left)
{
strClickType = "Left";
}
else if (thisEvent.button == PointerEventData.InputButton.Right)
{
strClickType = "Right";
}
//发送消息
GameObjClick.Dispatch(strClickType, this.transform.name);
}
}
}
最终,给gameobjcet元素增加了一个UI的属性
我硬给它塞了一个Image属性,把Material设置了一个透明效果。并且把元素都放置到Canvas内,问题就解决了。
原理我没去深究,但是从结果来看,需要注意以下两点
1.EventTrigger的gameobjcet对象是否为一个UI元素
2.这个对象是否在相机内,在相机外有可能不能被点击到