I'm trying to determine which way a user is rotating their finger around the screen in a circular motion. I'm currently trying to use the cross product and using the z component to determine which way the user is rotating. This is producing results which are working for the bottom half of the and are reversed on the top half of the rotation.
Can anyone shed some light on what I'm doing incorrectly?
if ( ( Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved && GameStateManager.CurrentGameState == GameState.Minigame) )
{
Vector3 touchPos = Vector3.zero;
if( Camera.mainCamera != null )
{
touchPos = Camera.mainCamera.ScreenToWorldPoint( new Vector3( Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, Camera.mainCamera.nearClipPlane ));
}
if( prevTouchPos == Vector2.zero )
{
prevTouchPos = new Vector2( touchPos.x, touchPos.y );
return;
}
//need angle between last finger position and this finger position
Vector2 prevVec = new Vector2( prevTouchPos.x - transform.position.x, prevTouchPos.y - transform.position.y );
Vector2 currVec = new Vector2( touchPos.x - transform.position.x, touchPos.y - transform.position.y );
float ang = Vector2.Angle(prevVec, currVec);
Vector3 cross = Vector3.Cross( new Vector3(prevVec.x, prevVec.y, 0), new Vector3(currVec.x, currVec.y, 0));
Debug.Log(cross.normalized);
if (cross.z < 0)
{
Debug.Log("Prev Vec: " + prevVec);
Debug.Log("Curr Vec: " + currVec);
Debug.Log("ROTATE RIGHT");
transform.Rotate( 0, 0, ang);
}
else
{
Debug.Log("Prev Vec: " + prevVec);
Debug.Log("Curr Vec: " + currVec);
Debug.Log("ROTATE LEFT");
transform.Rotate( 0, 0, -ang);
}
//Debug.Log(ang);
//Debug.Log( "TouchPos: " + touchPos );
prevTouchPos = new Vector2( touchPos.x, touchPos.y);
}