Files
MinFt/Client/Assets/Scripts/UIExtend/UIButtonDouble.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

85 lines
2.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using static UnityEngine.EventSystems.ExecuteEvents;
public class UIButtonDouble : Button
{
public int ExecuteCount = 1;
public int curExecuteCount = 0;
private ButtonClickedEvent m_OnDown = new ButtonClickedEvent();
private ButtonClickedEvent m_OnUp = new ButtonClickedEvent();
PointerEventData _pointerEventData;
public PointerEventData PointerEventData => _pointerEventData;
public ButtonClickedEvent onDown
{
get { return m_OnDown; }
set { m_OnDown = value; }
}
public ButtonClickedEvent onUp
{
get { return m_OnUp; }
set { m_OnUp = value; }
}
public override void OnPointerClick(PointerEventData eventData)
{
RaycastThrough(eventData, pointerClickHandler);
base.OnPointerClick(eventData);
}
public override void OnPointerDown(PointerEventData eventData)
{
RaycastThrough(eventData, pointerDownHandler);
m_OnDown.Invoke();
base.OnPointerDown(eventData);
}
public override void OnPointerUp(PointerEventData eventData)
{
RaycastThrough(eventData, pointerUpHandler);
m_OnUp.Invoke();
base.OnPointerUp(eventData);
}
public void RaycastThrough<T>(BaseEventData baseEventData, EventFunction<T> eventFunction) where T : IEventSystemHandler
{
_pointerEventData = (PointerEventData)baseEventData;
List<RaycastResult> raycastResults = new List<RaycastResult>();
//当前处理的gameobject
GameObject currentObj = gameObject ?? _pointerEventData.pointerDrag;
//获取当前射线检测到的所有结果
EventSystem.current.RaycastAll(_pointerEventData, raycastResults);
curExecuteCount = 0;
bool isExecute = false;
for (int i = 0; i < raycastResults.Count; i++)
{
//}
//foreach (var item in raycastResults)
//{
var item = raycastResults[i];
GameObject nextObj = item.gameObject;
if (nextObj != null && nextObj == currentObj)
{
isExecute = true;
}
if (isExecute && nextObj != null && nextObj != currentObj)
{
GameObject excuteObj = GetEventHandler<T>(nextObj);
if (excuteObj != null && excuteObj != currentObj)
{
//执行下一层事件,如果你还需要继续执行下面层UI事件可以不return我这里只检测下一层的所以我循环一次就直接return
Execute(excuteObj, _pointerEventData, eventFunction);
}
curExecuteCount++;
if (curExecuteCount >= ExecuteCount)
{
return;
}
}
}
}
}