/// <summary> /// 是否存在区域内 /// </summary> /// <param name="screenPoint">屏幕坐标</param> /// <param name="size">大小</param> /// <param name="handIndex">手势</param> /// <returns></returns> public static bool IsAreaContains(Vector2 screenPoint, Vector2 size, int handIndex) { //if (!KinectTransfer.IsHandActive(handIndex)) return false; //获取到此时手的屏幕坐标屏幕坐标 Vector3 screenHandPoint = MOperateManager.GetHandScreenPoint(handIndex); //根据自身此时的屏幕坐标,去算区域 return(ScreenPointContains(screenPoint, size, screenHandPoint)); }
/// <summary> /// 是否存在区域内 /// </summary> /// <param name="transform">指定物体</param> /// <param name="handIndex"></param> /// <returns></returns> public static bool IsAreaContains(Transform transform, int handIndex) { //if (!KinectTransfer.IsHandActive(handIndex)) return false; try { //获取到此时手的屏幕坐标屏幕坐标 Vector3 screenHandPoint = MOperateManager.GetHandScreenPoint(handIndex); Vector3 screenPoint = MUtility.UIWorldToScreenPoint(transform.position); //根据自身此时的屏幕坐标,去算区域 RectTransform rectTransform = transform.GetComponent <RectTransform>(); return(ScreenPointContains(screenPoint, rectTransform.sizeDelta, screenHandPoint)); } catch (Exception) { return(false); //throw new Exception("手势可能没激活,如果是在编辑器上遇到此问题,不用理会"); } }
public bool OnUIRay(Ray ray) { if (!IsEnable) { return(false); } RaycastHit hit; //持续按下 if (IsButtonPress && currentButton != null) { currentButton.OnDownStay(InputHand.HandIndex); } if (Physics.Raycast(ray, out hit, 10000, 1 << MOperateManager.layerUI)) { if (uiObject == null) { uiObject = hit.collider.gameObject; EventHandUIRayEnter.SendListener(uiObject, InputHand.HandIndex); } else if (uiObject != hit.collider.gameObject) { EventHandUIRayExit.SendListener(uiObject, InputHand.HandIndex); uiObject = hit.collider.gameObject; EventHandUIRayEnter.SendListener(uiObject, InputHand.HandIndex); } else { } if (hit.collider.gameObject.CompareTag("button")) { //照射到的物体 rayObject = hit.collider.gameObject; if (IsButtonPress || MOperateManager.GetHandStatus(InputHand.HandIndex) != Core.MInputHandStatus.Idle) { return(true); } SetButton(rayObject); } else { //如果没有照射到button,表示没有在UI上了。 rayObject = null; if (IsButtonPress) { return(true); } SetButton(null); } return(true); } else { if (uiObject != null) { EventHandUIRayExit.SendListener(uiObject, InputHand.HandIndex); uiObject = null; } rayObject = null; if (IsButtonPress) { return(true); } SetButton(null); return(false); } }