EnhancedTouchSupport를 활성화합니다
Touchscreen.current.touches 배열을 Update에서 매 프레임 순회하면 멀티터치가 겹치거나 프레임 드랍 시 핑거 인덱스가 뒤바뀌어 조준선이 튀는 문제가 발생합니다. EnhancedTouchSupport를 켜고 Touch.onFingerDown 이벤트를 바인딩하면 처음 닿은 손가락만 추적할 수 있습니다.
using UnityEngine;
using UnityEngine.InputSystem.EnhancedTouch;
using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch;
public class DragAimController : MonoBehaviour
{
private Finger activeFinger;
private void OnEnable()
{
EnhancedTouchSupport.Enable();
TouchSimulation.Enable();
Touch.onFingerDown += HandleFingerDown;
Touch.onFingerUp += HandleFingerUp;
}
private void OnDisable()
{
Touch.onFingerDown -= HandleFingerDown;
Touch.onFingerUp -= HandleFingerUp;
EnhancedTouchSupport.Disable();
}
private void HandleFingerDown(Finger finger)
{
if (activeFinger == null)
activeFinger = finger;
}
private void HandleFingerUp(Finger finger)
{
if (activeFinger == finger)
activeFinger = null;
}
}ScreenToWorldPoint의 Z축 거리를 고정합니다
2D 게임에서 카메라의 ScreenToWorldPoint를 호출할 때 z=0으로 넘기면 카메라 근평면에 투영되어 좌표가 0으로 찌그러집니다. z값에 카메라의 -transform.position.z(게임 평면과의 거리)를 명시해야 정확한 월드 위치가 나옵니다.
using UnityEngine;
using UnityEngine.InputSystem.EnhancedTouch;
public class AimWorldProjector : MonoBehaviour
{
[SerializeField] private Camera targetCamera;
public Vector2 GetWorldTouchPosition(Finger finger)
{
if (finger == null || finger.currentTouch.history.Count == 0)
return Vector2.zero;
Vector2 screenPos = finger.screenPosition;
float distanceToPlane = -targetCamera.transform.position.z;
Vector3 worldPoint = targetCamera.ScreenToWorldPoint(
new Vector3(screenPos.x, screenPos.y, distanceToPlane)
);
return worldPoint;
}
}에디터 마우스 시뮬레이션
TouchSimulation.Enable()을 함께 호출하면 PC 에디터에서 마우스 클릭과 드래그가 실제 터치 이벤트로 동일하게 전달되어 기기 빌드 없이도 정확한 조작감을 검증할 수 있습니다.
검증 범위
공식 문서 대조
검증일
Unity 공식 문서와 본문의 코드·절차를 대조해 공개 준비 상태로 전환했습니다. 별도 Unity 프로젝트나 실기기에서 직접 재현한 결과는 아니며, 특정 버전·기기 문의가 들어오면 해당 환경에서 후속 확인합니다.
확인한 공식 문서Unity Input System 터치 매뉴얼 ↗