diff --git a/Runtime/FlipPage/FlipPageComponentManager.cs b/Runtime/FlipPage/FlipPageComponentManager.cs index 9e24dee..b3e05cd 100644 --- a/Runtime/FlipPage/FlipPageComponentManager.cs +++ b/Runtime/FlipPage/FlipPageComponentManager.cs @@ -14,10 +14,20 @@ using Component = UnityEngine.Component; namespace XericUI.FlipPage { /// - /// 翻页组件管ç�†å™¨ - /// - /// 对翻页组件的管ç�† + /// 翻页组件管ç�†å™¨(UI层) /// + /// + /// 翻页组件层(UI)脚本,约æ�ŸåŸºæœ¬ç”¨æ³•: + /// + /// FlipPageComponentManager : XericFlipPageIndexVesselBase + /// |-PageComponentInfo 页é�¢ç»„件结构 + /// | |-ItemComponentInfo 项目组件结构 + /// + /// 组件层使用组件容器å°�装,预设的组件引用å�¯ä»¥å®žçŽ°ç±»ä¼¼ä¸‹é�¢çš„æ ·å¼� + /// |< < 2,3,4 > >| + /// 两侧是固定的按钮,中间是一个横å�‘的排列容器,在指定了按钮对象池å�Žï¼Œå°†ä¼šè‡ªåŠ¨ç”Ÿæˆ�绑定好的按钮用于翻页。 + /// 页数按钮需è¦�让button在预制体最外层,它的å­�集中需è¦�包å�«ä¸€ä¸ªTMP_Text。 + /// public class FlipPageComponentManager : XericFlipPageIndexVesselBase { #region 界é�¢å±žæ€§ diff --git a/Runtime/FlipPage/XericFlipPageIndexVesselBase.cs b/Runtime/FlipPage/XericFlipPageIndexVesselBase.cs index 03e1cbe..ca7b03c 100644 --- a/Runtime/FlipPage/XericFlipPageIndexVesselBase.cs +++ b/Runtime/FlipPage/XericFlipPageIndexVesselBase.cs @@ -12,10 +12,22 @@ using XericUI.Core.Vessel; namespace XericUI.FlipPage { /// - /// ·­Ò³¹ÜÀíÆ÷ + /// ·­Ò³¹ÜÀíÆ÷(Âß¼­²ã) /// /// - /// ·­Ò³ÔÊÐí°´Ò³£¬°´ÏîÄ¿½øÐйÜÀí¡£ + /// ·­Ò³Âß¼­²ã½Å±¾£¬Ô¼Êø»ù±¾Ó÷¨£º + /// + /// XericFlipPageIndexVesselBase Âß¼­²ã¹ÜÀíÆ÷ + /// |-PageInfo Ò³ÃæÊý¾Ý½á¹¹ + /// | |-ItemInfo ÏîÄ¿Êý¾Ý½á¹¹ + /// + /// »ù±¾Ó÷¨Ó¦¸ÃÊÇ£¬Ìí¼ÓÊý¾ÝÏîÄ¿£¬Õâ»á×Ô¶¯·ÖÅäµ½ÓÐЧµÄÒ³ÃæÖУ» + /// Èç¹ûÒ³ÃæÏîÄ¿ÒÑÂú£¬Ôòн¨Ò»¸öÒ³Ãæ¼ÌÐøÌî³äÏîÄ¿¡£ + /// »òÕßÖ±½Ó´´½¨Ò³Ã棬½«ÐèÒªµÄÊý¾ÝÏîĿֱ½ÓдÔÚÒ³ÃæÊý¾ÝÖС£ + /// + /// ʹÓÃFlipPage()·­Ò³£¬Õâ»áÁ¢¿ÌÖ´ÐУ¬²¢´¥·¢OnFlipPageº¯Êý£¬ + /// currentPageIndex¿ÉÒÔ»ñÈ¡µ±Ç°Ò³Êý£¬Currentpage»ñÈ¡µ±Ç°Ò³ÃæÊý¾Ý£» + /// ÔÚÒ³ÃæÊý¾ÝÖÐpageNumber¿ÉÒÔ»ñÈ¡×Ô¼ºËùÔÚµÄÒ³Êý£¬itemInfos»ñÈ¡Ò³ÃæÖеÄËùÓÐÊý¾ÝÏîÄ¿¡£ /// public class XericFlipPageIndexVesselBase : XericUIBehaciour { diff --git a/Runtime/Helper.meta b/Runtime/Helper.meta new file mode 100644 index 0000000..4c82804 --- /dev/null +++ b/Runtime/Helper.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d1b1471c80dc411bb9c2745a091dc801 +timeCreated: 1753776687 \ No newline at end of file diff --git a/Runtime/Helper/EventSystemHelper.cs b/Runtime/Helper/EventSystemHelper.cs new file mode 100644 index 0000000..2548f8e --- /dev/null +++ b/Runtime/Helper/EventSystemHelper.cs @@ -0,0 +1,110 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.EventSystems; +using XericLibrary.Runtime.MacroLibrary; + +namespace XericUI.Helper +{ + /// + /// UI输入系统帮助 + /// + public static class EventSystemHelper + { + #region 字段属性 + + private static int raycastResultsFrameIndex = -1; + public static List raycastResults = new List(); + + #endregion + + #region 辅助功能 + + /// + /// æ ¹æ�®é‡�è½½å�¯é€‰è¦†ç›–返回的事件系统 + /// + /// + /// + private static EventSystem GetEventSystem(EventSystem overrideEventSystem = null) + => overrideEventSystem == null + ? EventSystem.current + : overrideEventSystem; + + /// + /// 当å‰�是å�¦æ­¥è¿›å¸§ + /// + /// + /// ä¿�æŒ�状æ€� + /// + private static bool IsFrameIndexChange(ref int frameIndex, bool holdon = false) + { + if (frameIndex == Time.frameCount) + return false; + if (holdon) + return true; + frameIndex = Time.frameCount; + return true; + } + + #endregion + + #region 光标在其上 + + /// + /// 判断当å‰�光标是å�¦å¤„于任æ„�UI对象上 + /// + /// + /// + public static bool IsPointerOverGameObject(EventSystem overrideEventSystem = null) + { + overrideEventSystem = GetEventSystem(overrideEventSystem); + return overrideEventSystem.IsPointerOverGameObject(); + } + + /// + /// 自动更新射线监测 + /// + /// + /// + public static List GetRaycastAllResults(EventSystem overrideEventSystem = null) + { + if (!IsFrameIndexChange(ref raycastResultsFrameIndex)) + return raycastResults; + + overrideEventSystem = GetEventSystem(overrideEventSystem); + var pointerData = new PointerEventData(overrideEventSystem) + { + position = Input.mousePosition + }; + overrideEventSystem.RaycastAll(pointerData, raycastResults); + return raycastResults; + } + + /// + /// 判断当å‰�光标是å�¦å¤„于特定组件上 + /// + /// 返回找到的组件 + /// 是å�¦å�¯ç”¨å…¼å®¹æ€§ï¼Œå½“在所有击中的元素上找ä¸�到目标时,继续å�‘上查找 + /// + /// + /// + public static bool IsPointerOverUIWithComponent(out T component, bool compatibility = true, EventSystem overrideEventSystem = null) + where T : Component + { + var results = GetRaycastAllResults(overrideEventSystem); + if (results.Count <= 0) + { + component = null; + return false; + } + component = results + .Select(a => a.gameObject.GetComponent()) + .FirstOrDefault(a => a != null); + if (compatibility && component == null) + component = results[^1].gameObject.GetComponentInParent(); + return component != null; + } + + #endregion + } +} \ No newline at end of file diff --git a/Runtime/Helper/EventSystemHelper.cs.meta b/Runtime/Helper/EventSystemHelper.cs.meta new file mode 100644 index 0000000..a9e1eae --- /dev/null +++ b/Runtime/Helper/EventSystemHelper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d2386c74c7b74a18b9656a435572352d +timeCreated: 1753776710 \ No newline at end of file