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);
}
}