鼠标事件
0左键 1右键 2滚轮
鼠标点击事件实现的三种方式
- Input.GetMouseButton
- 利用事件接口,这种方式可以直接在UI上进行操作。
UnityAction<BaseEventData> enter; UnityAction<BaseEventData> exit; UnityAction<BaseEventData> click; EventTrigger.Entry entry; EventTrigger.Entry entry1; EventTrigger.Entry entry2; EventTrigger trigger; void Start() { enter = new UnityAction<BaseEventData>(OnPointerEnterDelegate); exit = new UnityAction<BaseEventData>(OnPointerExitDelegate); click = new UnityAction<BaseEventData>(OnPointerClickDelegate); trigger = gameObject.AddComponent<EventTrigger>(); entry = new EventTrigger.Entry(); entry1 = new EventTrigger.Entry(); entry2 = new EventTrigger.Entry(); entry.eventID = EventTriggerType.PointerEnter; entry1.eventID = EventTriggerType.PointerExit; entry2.eventID = EventTriggerType.PointerClick; entry.callback.AddListener(enter); entry1.callback.AddListener(exit); entry2.callback.AddListener(click); trigger.triggers.Add(entry); trigger.triggers.Add(entry1); trigger.triggers.Add(entry2); } public void OnPointerClickDelegate(BaseEventData data){} public void OnPointerEnterDelegate(BaseEventData data){} public void OnPointerExitDelegate(BaseEventData data){}
- 挂脚本,直接实现OnMouseDown函数
进度条更新太快
不要使用onvaluechange,而要使用OnEventTriggerEvent,它表示结束拖动滚动条。
onValueChanged变化太快:
progress.onValueChanged.AddListener(v =>
{
var p = videoPlayerObj.GetComponent<VideoPlayer>();
if (p.canSetTime)
{
p.time = v * p.length;
}
});
C#中使用扩展方法为所有的UI空间指定事件回调:
public static class UIBehaviourExtension
{
/// <summary>
/// 添加EventTrigger事件监听
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <param name="type"></param>
/// <param name="action"></param>
/// <returns></returns>
public static T OnEventTriggerEvent<T>(this T self, EventTriggerType type, UnityAction<BaseEventData> action) where T : UIBehaviour
{
var eventTrigger = self.GetComponent<EventTrigger>() ?? self.gameObject.AddComponent<EventTrigger>();
EventTrigger.Entry entry = new EventTrigger.Entry { eventID = type };
entry.callback.AddListener(action);
eventTrigger.triggers.Add(entry);
return self;
}
}
使用的时候直接x.OnEnventTriggerEvent即可。