Unity 모바일 디바이스 입력 가이드
목차
- 모바일 디바이스의 입력
- 모바일 키보드
- 멀티터치 스크린
- 터치 입력 예제
- 마우스 시뮬레이션
- 가속 센서
- 가속 센서를 활용한 오브젝트 이동
- 로우 패스 필터 적용
- 가속 센서 데이터 정확도
- 입력 관리자
- 결론
모바일 디바이스의 입력
모바일 키보드
모바일 디바이스에서 입력을 받기 위해 Input
클래스를 사용할 수 있습니다. 터치 스크린이나 가속 센서와 같은 다양한 입력 방식이 지원됩니다.
멀티터치 스크린
iPhone, iPad 등에서는 최대 5점 터치를 인식합니다. Android 디바이스는 기기에 따라 다르며, 구형 기기는 2점 터치, 최신 기기는 5점 터치를 인식할 수 있습니다.
터치 입력 예제
사용자가 화면을 터치할 때마다 광선을 방사하는 예제 스크립트는 다음과 같습니다.
using UnityEngine;
public class TouchInput : MonoBehaviour
{
GameObject particle;
void Update()
{
foreach(Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
Ray ray = Camera.main.ScreenPointToRay(touch.position);
if (Physics.Raycast(ray))
{
Instantiate(particle, transform.position, transform.rotation);
}
}
}
}
}
마우스 시뮬레이션
Unity는 iOS/Android에서 마우스 시뮬레이션도 지원합니다. 마우스 입력은 Input
클래스를 통해 사용할 수 있으며, 단일 터치만 지원합니다. 터치 입력과 마우스 입력은 다르므로 개발 초기에는 마우스 시뮬레이션으로 시작하고 빠른 전환을 추천합니다.
가속 센서
모바일 디바이스의 가속 센서는 3차원 공간에서의 선형 가속도를 제공합니다. 이를 통해 오브젝트를 제어할 수 있습니다.
가속 센서를 활용한 오브젝트 이동
가속 센서를 사용하여 오브젝트를 움직이는 예제는 다음과 같습니다.
using UnityEngine;
public class Accelerometer : MonoBehaviour
{
float speed = 10.0f;
void Update()
{
Vector3 dir = Vector3.zero;
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;
if (dir.sqrMagnitude > 1)
dir.Normalize();
dir *= Time.deltaTime;
transform.Translate(dir * speed);
}
}
로우 패스 필터 적용
가속 센서의 값이 요동칠 수 있으므로 로우 패스 필터를 적용하여 신호를 부드럽게 만들 수 있습니다.
using UnityEngine;
public class LowPassFilterExample : MonoBehaviour
{
float accelerometerUpdateInterval = 1.0f / 60.0f;
float lowPassKernelWidthInSeconds = 1.0f;
private float lowPassFilterFactor;
private Vector3 lowPassValue = Vector3.zero;
void Start()
{
lowPassFilterFactor = accelerometerUpdateInterval / lowPassKernelWidthInSeconds;
lowPassValue = Input.acceleration;
}
private void Update()
{
lowPassValue = LowPassFilterAccelerometer(lowPassValue);
}
Vector3 LowPassFilterAccelerometer(Vector3 prevValue)
{
Vector3 newValue = Vector3.Lerp(prevValue, Input.acceleration, lowPassFilterFactor);
return newValue;
}
}
가속 센서 데이터 정확도
가속 센서 데이터를 읽을 때 정확한 값을 얻기 위해선 다음과 같은 점을 고려해야 합니다. Unity는 하드웨어를 일정 주기로 샘플링하며, CPU 부하에 따라 샘플링 간격이 일정하지 않을 수 있습니다.
public class AccelerationEvents : MonoBehaviour
{
void Update()
{
GetAccelerometerValue();
}
Vector3 GetAccelerometerValue()
{
Vector3 acc = Vector3.zero;
float period = 0.0f;
foreach(AccelerationEvent evnt in Input.accelerationEvents)
{
acc += evnt.acceleration * evnt.deltaTime;
period += evnt.deltaTime;
}
if (period > 0)
{
acc *= 1.0f / period;
}
return acc;
}
}
입력 관리자
Unity의 입력 관리는 다양한 디바이스에서 입력을 쉽게 관리할 수 있게 도와줍니다.
결론
모바일 디바이스에서 Unity를 통해 다양한 입력 방식을 쉽게 구현할 수 있습니다. 가속 센서와 터치 입력을 통해 게임의 인터랙티브한 요소를 강화할 수 있으며, 이를 통해 사용자 경험을 향상시킬 수 있습니다. 다양한 예제를 통해 자신만의 게임 및 어플리케이션을 구현해보세요.