using UnityEngine; using System.Collections; public class TouchInput : MonoBehaviour { public struct TouchState { public int touchCount; public Vector2 Position; public Vector2 deltaPosition; public SwipeDirection swipeDirection; public void update() { touchCount = Input.touchCount; if (touchCount > 0) { Position = Input.GetTouch(0).position; deltaPosition = Input.GetTouch(0).deltaPosition; swipeDirection = TouchInput.getSwipeDirection(this); } else { Position = Vector2.zero; deltaPosition = Vector2.zero; swipeDirection = SwipeDirection.NONE; } } } static TouchState[] TouchStateSamples = new TouchState[_touchInputSamples]; private static int _touchInputSamples = 16; public static int TouchInputSamples { get { return _touchInputSamples; } set { _touchInputSamples = value; TouchStateSamples = new TouchState[value]; } } private static int sampleCount = 0; public static TouchState GetTouchState() { TouchState currentTouchState = new TouchState(); currentTouchState.update(); sampleCount++; if (sampleCount >= _touchInputSamples) { sampleCount = 0; TouchStateSamples = new TouchState[_touchInputSamples]; } TouchStateSamples[sampleCount] = currentTouchState; Vector2 avarageDelta = Vector2.zero; int collectedSamples = 0; for (int i = 0; i < _touchInputSamples; i++) { if (TouchStateSamples[i].Position != null ) { avarageDelta += TouchStateSamples[i].deltaPosition; collectedSamples++; } } avarageDelta /= collectedSamples; currentTouchState.deltaPosition = avarageDelta; currentTouchState.swipeDirection = getSwipeDirection(currentTouchState); return currentTouchState; } public enum SwipeDirection { LEFT, RIGHT, DOWN, UP, LEFTUP, RIGHTUP, LEFTDOWN, RIGHTDOWN, NONE } // Use this for initialization void Start() { TouchStateSamples = new TouchState[_touchInputSamples]; } // Update is called once per frame void Update() { } public static SwipeDirection getSwipeDirection(TouchState touchState) { if (Input.touchCount < 1) { return SwipeDirection.NONE; } float angle = Vector2ToAngle(touchState.deltaPosition); if (angle == 0) { return SwipeDirection.NONE; } if (angle > 2.5f && angle < 3.5f) { return SwipeDirection.RIGHT; } else if (angle > -1.5f && angle < 1.5f) { return SwipeDirection.LEFT; } return SwipeDirection.NONE; } static float Vector2ToAngle(Vector2 point) { return (float)Mathf.Atan2(point.y, point.x); } }