in 소프트웨어 개발

유니티, 터치패드 컨트롤

유니티 스탠다드 애셋의 CrossPlatformInput에 포함된 TouchPad 컴포넌트는 화면을 스크롤하는 제스쳐를 통해 Axis 값을 제어할수 있게 해준다. 화면에서 손가락을 떼지(point up) 않는 동안만 동작하며, 옵션은 세가지다.

  • Absolute (절대좌표): 터치 패드 컴포넌트가 참조하는 RectTransform의 정 중앙을 (0,0)로 한다. 이전 프레임의 터치지점이 어디든 상관하지 않고 무조건 현재 좌표가 중앙으로 부터 얼마나 거리가 먼지를 기준으로 하기 때문에 Absolute(절대)라고 한다.
  • Related (상대좌표): 처음 터치 지점과 현재 터치 지점 사이의 차이 만큼 Axis 값을 Set 한다. 스와이프하고선 손을 때지 않고 멈추면, 더이상 터치 지점을 움직이지 않아도 지속적으로 스와이프 한 만큼 값이 Set된다.
  • Swipe (스와이프): 스와이프 한 양만큼 이동한다. 즉 스와이프한 양만큼만 Axis에 값을 주며, 손을 때지 않아도 스와이프 제스쳐가 끝나면 Axis에 주어지는 양은 0이 된다. 이는 Axis에 할당하는 값은, 처음 터치지점과 현재 터치지점의 차이가 아니라, 이전 프레임 터치지점과 현재 터치지점의 차이라는 것을 의미한다.

세개의 컨트롤 모드 전부, 스와이프 제스쳐를 사용하나, Axis 를 제어하기 위해 사용되므로 토글식으로 동작하지 못한다.

TouchPad는 유니티 에디터에서 정상동작하지 않으므로, UnityRemote를 사용해서 실제 안드로이드 기기로 동작을 보는게 좋다.

만약 단순 스와이프를 구현하려고 한다면, 유니티 CrossPlatformInput 은 단순 스와이프를 위한 함수는 존재하지 않고, 오버라이드 해서 쓰기에는 오버스펙이다. 또한 단순 스와이프가 토글식 동작인것을 생각할때 지속적인 값으로 파악해야 하는 Axis로 접근하는 것은 불편하다.

이에 대해 가볍게 터치 스와이프 토글을 구현하는 코드는 블로그에 추가해두었다.