Input 클래스
(새로운 Input 시스템이 아닌 이전 버전의 Input 방법)
touchCount 속성
- 모바일 장치 화면에 접촉되어 있는 손가락(Finger)의 갯수를 의미.
보통 if 구문을 이용하여 사용하며, touchCount가 0보다 클 경우 터치가 발생한 것으로 처리.
보다 정확한 처리를 위해서는 switch 구문을 사용하는 것이 바람직하지만
switch 구문의 경우 잘못 사용할 경우 시스템에 불필요한 연산 처리 증가를 불러올 수 있음
(소규모 시스템에서는 딱히 상관 없으나, 대규모의 처리가 요구되는 시스템에서는 성능에 다소 영향을 줄 수 있음)
GetTouch 메서드
- 매개 변수로 전달한 모바일 장치 화면에 접촉한 손가락의 순서에 해당하는
터치의 상태를 나타내는 Touch 구조체를 반환.
(한 개 - 화면에 처음으로 접촉한 터치 정보 - 의 터치만 이용하는 방법은 싱글 터치,
여러개의 손가락의 터치를 이용하는 방법은 멀티 터치로 구분)
일반적으로 GetTouch 메서드로 얻게 된 Touch 구조체의 position 속성을 통해
해당 터치의 위치(position)좌표 정보를 얻을 수 있음
deltaPosition 속성
- 가장 마지막의 프레임에서 발생한 터치의 위치와 현재 프레임에서 발생한 터치 위치의 차이를 의미.
보통 터치의 이동 방향을 추적해야 하는 상황에서 활용 가능.
추가로, 이 속성 값을 이용하여 게임 오브젝트의 위치를 이동시켜 보면, 더 쉽게 파악이 가능.
tapCount
- 특정 위치에 접촉되어 있는 손가락에서 연속적으로 일어난 탭(Tap)의 수를 확인하기 위해 사용.
TouchPhase
- 가장 최근의 프레임에서 손가락이 취한 동작을 나타냄.
TouchPhase.Began
- 터치의 시작(화면을 누르기 시작)
TouchPhase.Moved
- 터치가 이루어지는 상태에서 이동할 경우의 처리
TouchPhase.Stationary
- 터치가 시작된 이후 프레임의 변화가 없는 상태(이동 또는 터치 종료 외 다른 행동이 없는 경우)
TouchPhase.Ended
- 터치가 종료(화면을 누른 손가락이 떨어진 경우)된 상태
TouchPhase.Canceled
- 입력값이 정한 한계를 벗어난 터치 입력이 동시에 발생하여 시스템이 터치의 추적을 취소한 경우 사용
터치 입력 모듈의 흐름 방식은 다음과 같다.
(Unity Documenetation 에서 정의하고 있는 메뉴얼, 2023.2월)
이 모듈은 터치 기기와 작동하도록 설계되었습니다. 사용자 입력에 응답으로 터치와 드래그를 위한 포인터 이벤트를 보냅니다. 이 모듈은 멀티 터치를 지원합니다.
모듈은 현재 어떤 요소가 터치되고 있는지 계산하기 위해 씬에 설정된 레이캐스터를 사용합니다. 레이캐스트는 그때그때 터치마다 각각 발생됩니다.
세부 정보
모듈의 흐름은 다음과 같습니다.
- 각 터치 이벤트
- 새로 누르는 경우
- PointerEnter 이벤트를 계층 구조 상에 있는 오브젝트 중 이 이벤트를 처리할 수 있는 모든 오브젝트에 보냅니다.
- PointerPress 이벤트를 보냅니다.
- 드래그 핸들러(계층 구조 상에 있는 요소 중 이 이벤트를 처리할 수 있는 첫 번째 요소)를 캐시합니다.
- BeginDrag 이벤트를 드래그 핸들러에 전송합니다.
- 이벤트 시스템에서 ‘Pressed’ 오브젝트를 선택됨으로 설정합니다.
- 지속적으로 누르는 경우
- 이동을 처리합니다.
- 캐시된 드래그 핸들러에 DragEvent를 전송합니다.
- 터치가 오브젝트 사이를 이동하는 경우 PointerEnter와 PointerExit 이벤트를 처리합니다.
- 떼는 경우
- PointerPress를 수신한 오브젝트에 PointerUp 이벤트를 전송합니다.
- 현재 호버된 오브젝트가 PointerPress 오브젝트와 같은 경우 PointerClick 이벤트를 보냅니다.
- 캐시된 드래그 핸들러가 있으면 Drop 이벤트를 전송합니다.
- 캐시된 드래그 핸들러로 EndDrag 이벤트를 전송합니다.
- 새로 누르는 경우
유니티 엔진(유티니 툴) 에서의 모바일 게임 개발을 하는 경우,
꼭 유니티에서 작성한 처리 방식을 모바일에서 확인해 주는 것이 필요하다.
이는 기본적으로 작업하고 있는 PC의 환경과 모바일의 환경이 차이가 나는 점을 생각해야 하는 것이며,
PC에서 작업하고 있는 내용이 실제 모바일에서 구현되는 모습과 다를 수 있기 때문이다.
Input의 구현 및 실제 터치 환경을 정확하게 파악하고 적용하기 위해서는
Raycast를 활용하여 실제 인식 범위를 확인하면서 개발을 하는 것이 가장 바람직할 것으로 생각된다.
'Unity' 카테고리의 다른 글
스크립트 라이프사이클 플로우차트(개인 학습용 및 피드백용) (0) | 2023.05.20 |
---|---|
Unity Documentation - 이벤트 함수 실행 순서 확인 매뉴얼 (0) | 2022.12.28 |