본문 바로가기
[Unity]

[Unity] 모바일 플랫폼의 터치 입력 처리하기

by 김기승 2023. 9. 24.

모바일에서 터치 입력을 처리하는 기본적인 문법들을 알아보도록 하자.


모든 터치 입력 처리는  Input  클래스에서 관여한다.


터치 입력 정보

 public static Touch[] touches { get; } 
 public static Touch GetTouch(int index

터치 입력은 위의 두 가지 방식으로 받을 수 있고,

터치의 정보를 담은  Touch  구조체를 반환한다.

 

만약,  Input.touches[0] 나  Input.GetTouch(0를 사용했다면,

이는 첫 번째 터치의 정보를 가져온 것이다.

 

 Input.touches 가 조금 더 빠르다고 한다.


터치 입력 개수

 public static int touchCount { get; } 

현재 입력된 터치의 개수를 반환하는 프로퍼티이다.

터치 정보를 가져올 때, 인덱스가 터치 개수를 넘어가지 않도록 하기 위해 필요하다.

 

예를 들어,  Input.touchCount == 1 인데,  Input.touches[1] 을 참조한다면,

Index out of bounds 에러가 발생한다.

 

※  Input.touches.Length 를 써도 되지만 권장하지는 않는다.

※ 매 프레임마다 터치 개수를 판단하여 입력의 변화를 감지할 수도 있다.

※ 특정 개수일 때에만 작동하는 제스쳐(Zoom, Tab, Slide, ...)를 구현할 수도 있다.


터치 입력 위치

 public struct Touch 
 { public Vector2 position { get; set; } 
 public Vector2 rawPosition { get; set; } 
 public Vector2 deltaPosition { get; set; } } 

터치의 위치는 터치 정보를 담은  Touch  구조체 내부에서 얻을 수 있다.

 position 현재 터치 위치를 반환하고,

 rawPosition 터치가 시작된 위치를 반환하며,

 deltaPosition 은 이전 프레임과의 터치 위치 변화량을 반환한다.

모두 Screen Space를 기반으로 한다.

 

만약,  Input.touches[0].position 을 사용했다면, 첫 번째 터치의 위치를 나타내는 것이다.


터치 입력 상태

 public struct Touch 
 { public TouchPhase phase { get; set; }

터치의 상태 Touch  구조체 내부의  phase  프로퍼티에서 얻을 수 있다.

 public enum TouchPhase
 Began = 0
 Moved = 1
 Stationary = 2
 Ended = 3
 Canceled = 4

 phase  프로퍼티는  TouchPhase  Enum 타입으로써, 위와 같은 형태를 가진다.

 

 Began 은 터치 시작 시점에,

 Moved 는 터치 후 움직이는 동안에,

 Stationary 는 터치했으나 가만히 있을 때,

 Ended 는 터치 종료 시점에,

 Canceled 는 터치가 없는 동안에 나타난다.

 

만약,  Input.touches[0].phase == TouchPhase.Moved 이면,

첫 번째 터치가 움직이고 있다는 것이다.


마우스 입력을 처리하기 위한 아래의 함수들도 위와 같은 터치 입력을 받는다.

터치 개수에 따라 마우스의 특정 버튼을 클릭한 것으로 판단한다.

 public static bool GetMouseButton(int button
 public static bool GetMouseButtonDown(int button
 public static bool GetMouseButtonUp(int button

만약, 터치 입력이 세 개가 되면 휠 버튼을 클릭한 것과 동일한 효과로써

 Input.GetMouseButtonDown(2) == true 가 된다.

 

아래의 함수들도 마찬가지로 동일하게 작동한다.

 Input.GetKey(KeyCode.Mouse0) 
 Input.GetKeyDown(KeyCode.Mouse1) 
 Input.GetKeyUp(KeyCode.Mouse2) 

 

댓글