private void OnCubeRoll(CubeRollEvent evt) { if (this != controller.stateMachine.state || Vector3.zero == evt.deltaPosition) { return; } Vector3 direction = controller.camera.transform.right * evt.deltaPosition.x + controller.camera.transform.up * evt.deltaPosition.y; Vector3 forward = controller.camera.transform.forward; AxisType rightAxis, upAxis, forwardAxis; AxisUtil.GetRollAxis(controller.magicCube.transform, direction, forward, out rightAxis, out upAxis, out forwardAxis); controller.rollAxis = upAxis; bool isHorizontal = Mathf.Abs(evt.deltaPosition.x) > Mathf.Abs(evt.deltaPosition.y); if (isHorizontal) { float dot = Vector3.Dot(controller.camera.transform.up, AxisUtil.Axis2Direction(controller.magicCube.transform, upAxis)); controller.rollAngle = evt.deltaPosition.x * dot > 0 ? -90 : 90; } else { float dot = Vector3.Dot(controller.camera.transform.right, AxisUtil.Axis2Direction(controller.magicCube.transform, upAxis)); controller.rollAngle = evt.deltaPosition.y * dot > 0 ? 90 : -90; } controller.stateMachine.Enter<TestState>(); CubeTestEvent cubeTestEvent = new CubeTestEvent(); cubeTestEvent.cube = evt.cube; cubeTestEvent.rightAxis = rightAxis; cubeTestEvent.upAxis = upAxis; cubeTestEvent.forwardAxis = forwardAxis; EventSystem<CubeTestEvent>.Broadcast(cubeTestEvent); }
private void OnInputEnd(InputEndEvent evt) { if (m_RollInputId == evt.gesture.inputId) { m_RollInputId = int.MinValue; CubeRollEvent cubeRollEvent = new CubeRollEvent(); cubeRollEvent.cube = m_SelectCube; cubeRollEvent.deltaPosition = evt.gesture.position - m_StartPosition; EventSystem<CubeRollEvent>.Broadcast(cubeRollEvent); } else if (m_ViewInputId == evt.gesture.inputId) { m_ViewInputId = int.MinValue; } }