public void OnEndDrag(PointerEventData eventData) { var startWorldPosition = eventData.pointerPressRaycast.worldPosition; var endScreenPosition3D = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance); Vector3 endWorldPosition = Camera.main.ScreenToWorldPoint(endScreenPosition3D); Debug.DrawLine(startWorldPosition, endWorldPosition, Color.red, 50000); //Debug.Log($"Start OnEndDrag {startWorldPosition} , {endWorldPosition}"); var resultVector = endWorldPosition - startWorldPosition; var crossVector = Vector3.Cross(eventData.pointerPressRaycast.worldNormal, resultVector); // We want to turn the cube around the axis that is nearest to this var axisTurningWayPair = AxisExtensions.Vector3ToAxis(crossVector, transform); Axis axis = axisTurningWayPair.Key; float turningWay = Mathf.Sign(axisTurningWayPair.Value); //Debug.Log($"Chosen Axis: {axis}"); float positionValue = AxisExtensions.GetValueAtAxis(axis, eventData.pointerPressRaycast.gameObject.transform.localPosition); cubeScript.RotateSide(axis, positionValue, turningWay * 90); }
public Axis GetNormalAxis() { return(AxisExtensions.Vector3ToAxis(GetNormalVector(), transform.parent.parent.transform).Key); }