3
我想確定用戶以圓周運動的方式圍繞屏幕旋轉手指的方式。我目前正在嘗試使用交叉產品並使用z組件來確定用戶正在旋轉的方式。這是產生的結果是在下半部分工作,並在上半部分旋轉。確定手指旋轉方向
任何人都可以闡明我做錯了什麼?
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);
}
我現在無法測試代碼,無法繞過'Vector3.Cross'包裝。我明白它做了什麼以及你想做什麼,但我無法測試它以確定發生了什麼問題。您可以嘗試在代碼中的'ROTATE RIGHT/LEFT'之前添加'Debug.Log(「Crossvalue:」+ cross)「。這可能會讓你對發生什麼事情和發生錯誤有所瞭解。 – Joetjah
我認爲你可以找到一個方法來做到這一點與 [此帖] [1] [1]:http://stackoverflow.com/questions/18579902/uiimage-which-follow-touches ++ –
可能重複[如何確定多邊形點的列表是否按順時針順序?](http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list -of-多邊形點-是式時針順序) –