07
22

Input.acceleration은?

주로 모바일 기기에서 사용된다.

기기의 가속도계를 통해 사용자의 움직임을 감지하고, 그에 따른 입력을 처리하는 데 사용된다.

예제 1
- 틸트 제어(Tilt Control)

모바일 기기를 기울이는 동작으로 플레이어의 캐릭터나 오브젝트를 움직이는 경우에 사용한다.

기기의 가속도계 센서를 활용하여 기기를 좌우, 상하로 기울일 때마다
해당 방향으로 캐릭터나 오브젝트를 이동시킬 수 있다.
  • 예제 코드
using UnityEngine;

public class TiltControl : MonoBehaviour
{
    public float moveSpeed = 5f;

    void Update()
    {
        float horizontalInput = Input.acceleration.x;
        float verticalInput = Input.acceleration.y;

        Vector3 movement = new Vector3(horizontalInput, 0f, verticalInput);
        movement = Vector3.ClampMagnitude(movement, 1f); // 입력 벡터를 정규화하여 길이를 1로 제한

        transform.Translate(movement * moveSpeed * Time.deltaTime);
    }
}

예제 2
- 기울기 기반 게임(Tilt-based Games)

모바일 기기를 기울여서 공을 굴리거나 비행기를 조종하는 등, 기울기를 기반으로 한 게임에서 흔히 사용한다.

기울기에 따라 오브젝트의 방향과 속도를 제어하여 게임 플레이를 구현한다.
  • 예제 코드
using UnityEngine;

public class TiltBasedGame : MonoBehaviour
{
    public float tiltSpeed = 30f;

    void Update()
    {
        float tiltInput = Input.acceleration.x;

        Vector3 rotation = new Vector3(0f, tiltInput * tiltSpeed, 0f);
        transform.Rotate(rotation * Time.deltaTime);
    }
}

예제 3
- 스마트폰 측정 기기 활용(Smartphone Sensors Integration)

Input.acceleration은 가속도계 센서 외에도 자이로스코프와 결합하여 기기의 방향과 회전 등을 감지할 수 있다.

따라서 이러한 기기의 측정 기능을 활용하여
게임 내의 카메라 움직임, 오브젝트 회전 등을 조작하는 데에 사용한다.

예제 4
- 기울기에 따른 물리 효과(Physics-based Effects)

플레이어가 기기를 기울이는 동작으로 게임 내의 물리 효과를 조작하는 데에 활용된다.

기울기에 따라 물리 효과가 적용되는 방향이나 강도를 조정하여 게임의 물리 시뮬레이션을 향상시킬 수 있다.
  • 예제 코드
using UnityEngine;

public class TiltPhysics : MonoBehaviour
{
    public float forceMultiplier = 10f;

    void Update()
    {
        float tiltInput = Input.acceleration.x;

        Vector3 force = new Vector3(tiltInput * forceMultiplier, 0f, 0f);
        GetComponent<Rigidbody>().AddForce(force, ForceMode.Force);
    }
}

예제 5
- 이동 및 회전 제어(Movement and Rotation Control)

플레이어가 기기를 기울여서 캐릭터나 오브젝트를 이동시키거나 회전시키는 기능을 구현할 때 사용한다.

특히 가속도계 센서의 값에 대한 필터링과 보간을 통해 부드러운 움직임을 구현하는 데에도 유용하게 사용된다.
  • 예제 코드
using UnityEngine;

public class MovementAndRotationControl : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float rotationSpeed = 100f;

    void Update()
    {
        float horizontalInput = Input.acceleration.x;
        float verticalInput = Input.acceleration.y;
        float rotationInput = Input.acceleration.z;

        Vector3 movement = new Vector3(horizontalInput, 0f, verticalInput);
        movement = Vector3.ClampMagnitude(movement, 1f);

        transform.Translate(movement * moveSpeed * Time.deltaTime);

        Vector3 rotation = new Vector3(0f, rotationInput * rotationSpeed, 0f);
        transform.Rotate(rotation * Time.deltaTime);
    }
}

'유니티 개발 기술 > 물리 & 시뮬레이션' 카테고리의 다른 글

Physics.RaycastAll vs Physics.RaycastNonAlloc  (0) 2023.10.09
오일러 각, 쿼터니언  (0) 2023.07.31
Raycast 살펴보기  (0) 2023.05.23
Joints  (0) 2023.05.06
AddTorque 함수, Physic Material  (0) 2023.05.05
COMMENT