// 检查 Cover 状态 internal void CheckCoverStatus() { int coverCount = CoverStatus.Count; for (int i = 0; i < coverCount; i++) { if (CoverStatus[i].PointerID < 0) { // 鼠标判断 int NowX = (int)Input.mousePosition.x; int NowY = (int)Input.mousePosition.y; if (CoverStatus[i].PrevX != NowX || CoverStatus[i].PrevY != NowY) { CoverStatus[i].PrevX = NowX; CoverStatus[i].PrevY = NowY; PointerEventCache.Add(new PointerData() { InputType = PointerInputType.Mouse, EventType = PointerEventType.Cover, PointerID = -1, X = NowX, Y = NowY }); } } else { // 触屏判断 int touchCount = Input.touches.Length; for (int j = 0; j < touchCount; j++) { if (CoverStatus[i].PointerID == Input.touches[j].fingerId) { int NowX = (int)Input.touches[j].position.x; int NowY = (int)Input.touches[j].position.y; if (CoverStatus[i].PrevX != NowX || CoverStatus[i].PrevY != NowY) { CoverStatus[i].PrevX = NowX; CoverStatus[i].PrevY = NowY; PointerEventCache.Add(new PointerData() { InputType = PointerInputType.Touch, EventType = PointerEventType.Cover, PointerID = CoverStatus[i].PointerID, X = NowX, Y = NowY }); } break; } } } } }
// --- Private Function ------------------------------------------------------------------------------------------------------------------------------------------- // // 缓存指针事件 private void CachePointerEvent(PointerEventType type, PointerEventData data) { PointerData pointerData = new PointerData() { InputType = data.pointerId < 0 ? PointerInputType.Mouse : PointerInputType.Touch, EventType = type, PointerID = data.pointerId, X = (int)data.position.x, Y = (int)data.position.y }; PointerEventCache.Add(pointerData); if (pointerData.EventType == PointerEventType.Enter) { // 添加 Cover 状态 CoverStatus.Add(new PointerCoverStatusForUI() { PointerID = pointerData.InputType == PointerInputType.Mouse ? -1 : pointerData.PointerID, PrevX = pointerData.X, PrevY = pointerData.Y }); } else if (pointerData.EventType == PointerEventType.Exit) { // 移除 Cover 状态 int coverCount = CoverStatus.Count; for (int i = coverCount - 1; i >= 0; i--) { if (CoverStatus[i].PointerID == pointerData.PointerID) { CoverStatus.RemoveAt(i); break; } } } }