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를 통해 다양한 입력 방식을 쉽게 구현할 수 있습니다. 가속 센서와 터치 입력을 통해 게임의 인터랙티브한 요소를 강화할 수 있으며, 이를 통해 사용자 경험을 향상시킬 수 있습니다. 다양한 예제를 통해 자신만의 게임 및 어플리케이션을 구현해보세요.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA