소소한 개발 공부

[Unity] 터치 스와이프 구현하기 본문

개발/Unity

[Unity] 터치 스와이프 구현하기

이내내 2021. 3. 28. 01:16

유니티 툴로 터치를 감지하고 스와이프를 판정하려면 다음과 같은 코드를 사용할 수 있다.

 

void InputValue()
{
	// 유니티 에디터 상 마우스 테스트 용
    if (Input.GetMouseButtonDown(0))
    {
        dirChosen = false;
        touchStartPoint = Input.mousePosition;
    }
    if (Input.GetMouseButton(0))
    {
        dir = new Vector2(Input.mousePosition.x, Input.mousePosition.y) - touchStartPoint;
    }
    if (Input.GetMouseButtonUp(0))
    {
        if (Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
        	movePos = new Vector3(dir.x, 0, 0).normalized;
        else
            movePos = new Vector3(0, 0, dir.y).normalized;
        dirChosen = true;
    }
     
    // 터치 스크린
    if (Input.touchCount > 0)
    {
        touch = Input.GetTouch(0);
    
        switch(touch.phase)
        {
            case TouchPhase.Began :
                dirChosen = false;
                touchStartPoint = touch.position;
                break;
                
            case TouchPhase.Moved :
                dir = touch.position - touchStartPoint;
                break;
                
            case TouchPhase.Ended :
                if (Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
                    movePos = new Vector3(dir.x, 0, 0).normalized;
                else
            		movePos = new Vector3(0, 0, dir.y).normalized;
                dirChosen = true;
                break;
        }
    }
}

InputValue 함수는 터치를 매 프레임마다 감지할 수 있게 Update문에 넣어 놓는 것을 추천.

 

🤔 MouseButtonDown ? 

이 부분은 마우스 테스트 용으로

에디터 상에서 터치를 하려면 Unity Remote 앱을 다운 받아서 해야하기 때문에 번거롭다.

그래서 마우스 테스트를 스와이프 코드와 유사하게 작성해 놓는다.

 

🤔 스와이프를 감지하는 방법

1. Input.touchCount 는 현재 화면에 닿은 접촉 입력의 개수

2. touch 는 처음 입력을 받은 터치(첫 손가락?) 이고 이 터치의 상태에 따라 switch

3. 스와이프 감지는 (마지막으로 닿아있던 지점) - (첫 터치 지점)을 계산하고

4. 이를 Mathf.Abs로 절댓값을 이용해 상하(y축) 차이와 좌우(x축) 차이를 비교해 차이가 큰 부분으로 방향 벡터를 정한다.

=> 4번에서 계산을 통해 정한 방향 벡터가 스와이프 결과 방향이 되는 것.

 

예시로) 첫 터치가 (0,0) 지점에서 이루어졌는데 (2,0)에서 접촉이 끊겼다. => 방향 벡터는 (1,0) => 캐릭터는 오른쪽(x축의 양의 방향)으로 이동