using UnityEngine; using UnityEngine.Events; //using Pvr_UnitySDKAPI; namespace MyFrameworkPure { public class UnityEventFloat : UnityEvent { } public class GestureTool : CSingletonMono { public float HThreshold { get; set; }//水平阈值 public float VThreshold { get; set; }//垂直阈值 public UnityEvent onHorizontalMove = new UnityEventFloat(); public UnityEvent onVerticalMove = new UnityEventFloat(); public float mouseSpeed = 20; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { #if UNITY_EDITOR || UNITY_STANDALONE if (!Input.GetMouseButton(0)) return; float deltaX = Input.GetAxis("Mouse X") * mouseSpeed; float deltaY = Input.GetAxis("Mouse Y") * mouseSpeed; if (Input.touchCount > 0) { deltaX = Input.touches[0].deltaPosition.x; deltaY = Input.touches[0].deltaPosition.y; } Vector2 mousePos = Input.mousePosition; if (mousePos.x <= 0) { deltaX = -mouseSpeed * 0.5f; } else if (mousePos.x >= Screen.width) { deltaX = mouseSpeed * 0.5f; } if (mousePos.y <= 0) { deltaY = -mouseSpeed * 0.5f; } else if (mousePos.y >= Screen.height) { deltaY = mouseSpeed * 0.5f; } if (Mathf.Abs(deltaX) > HThreshold) { onHorizontalMove?.Invoke(deltaX); } if (Mathf.Abs(deltaY) > VThreshold) { onVerticalMove?.Invoke(deltaY); } #endif #if PICO int mainHandNess = Pvr_UnitySDKAPI.Controller.UPvr_GetMainHandNess(); if (Controller.UPvr_GetControllerState(mainHandNess) != ControllerState.Connected) return; bool pressTouchpad = Controller.UPvr_GetKey(mainHandNess, Pvr_KeyCode.TOUCHPAD); if (!pressTouchpad) return; Vector2 touchPos = Controller.UPvr_GetAxis2D(mainHandNess); if (Mathf.Abs(touchPos.x) > Mathf.Abs(touchPos.y)) { touchPos.y = 0; touchPos.x = Mathf.Sign(touchPos.x)*5; onHorizontalMove?.Invoke(touchPos.x); } else if (Mathf.Abs(touchPos.x) < Mathf.Abs(touchPos.y)) { touchPos.y = Mathf.Sign(touchPos.y)*5; touchPos.x = 0; onVerticalMove?.Invoke(touchPos.y); } #endif } } }