滚轮旋转体拖拽监听事件的拖拽坐标修正问题

xiaoxiao2021-02-27  449

void Start() { var m_camera = FindObjectOfType<UIRoot>().transform.FindChild("Camera").GetComponent<Camera>(); UICamera.currentCamera = m_camera; UIEventListener.Get(gameObject).onDrag = gearOnDrag; UIEventListener.Get(gameObject).onDragStart = gearOnDragStart; UIEventListener.Get(gameObject).onDragEnd = gearOnDragEnd; } Vector3 m_gearDragPos = Vector3.zero; void gearOnDragStart(GameObject go) { var center = go.transform.localPosition; var touchPos = UICamera.currentTouch.pos; var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f)); pos = UICamera.currentCamera.transform.InverseTransformPoint(pos); var axis = pos - center; m_gearDragPos = axis; } float m_lastEulerAngles; void gearOnDragEnd(GameObject go) { m_lastEulerAngles = go.transform.localEulerAngles.z; } void gearOnDrag(GameObject go, Vector2 delta) { var center = go.transform.localPosition; var touchPos = UICamera.currentTouch.pos; var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f)); pos = UICamera.currentCamera.transform.InverseTransformPoint(pos); var axis = pos - center; var cross = Vector3.Cross(axis, m_gearDragPos); var angle = Vector3.Angle(axis, m_gearDragPos); var eulerAngles = cross.z < 0 ? angle : 360 - angle; go.transform.localEulerAngles = new Vector3(0, 0, eulerAngles + m_lastEulerAngles); }
转载请注明原文地址: https://www.6miu.com/read-528.html

最新回复(0)