내 탁구공 튕기기 게임은 공이 스마트폰의 기울어진 정도와 상관없이 실제 중력의 방향으로 떨어지고, 스마트폰을 돌려서 공을 튕기는 게임이기 때문에 실제 중력의 방향을 알 수 있어야 한다.
스마트폰의 기울기를 받아오는 방법에는 가속도 센서를 쓰는 방법, 자이로 센서를 쓰는 방법이 있다.
가속도 센서는 Input.acceleration, 자이로 센서는 Input.gyro.rotationRate 로 받아올 수 있다.
가속도 센서 : 장치에 가해지는 현재 "가속도"를 측정
자이로 센서 : 장치의 "회전 변화량"을 측정
이걸 알기 쉽게 소개한 글이 있다. https://forum.unity.com/threads/unity-and-the-accelerometer-vs-the-gyroscope-a-complete-guide.451496/#post-3133054
결국 스마트폰의 회전값을 정확하게 알아내려면 어떻게 해야 하는가?
가속도 센서의 장점과 자이로 센서의 장점을 섞으면 된다.
자이로 센서는 상대적으로 정확한 회전 변화량을 측정하지만 적분 오차가 쌓이고,
가속도 센서는 다른 외력이 없으면 항상 중력 가속도의 방향을 알려준다.
하지만 두 센서의 값을 적절하게 섞는건 내가 할 수 있는 범위의 일이 아니다.
다행히도 유니티에서 이 둘을 섞어주는 기능을 만들어 놨다.
바로 Input.gyro.gravity 다. 이건 Input.acceleration과 비슷하게 중력의 방향을 벡터로 알려주는데, 유니티에서 자체적으로 계산해서 외력의 영향을 어느정도 줄여주고, 지터링도 거의 없다. 다만 중력 축 회전은 측정하지 못한다. 아마 acceleration을 기반으로 지터링과 외력 제외 계산을 자이로를 섞어서 하는게 아닐까 싶다.
다만 자이로 센서가 없는 기기에서는 Input.acceleration과 완전히 똑같이 작동하는지, gyro 활성화가 안되서 접근이 안되는건지는 그런 기기가 없어서 못해봤다.
일단은 SystemInfo.supportsGyroscope로 기기가 자이로를 지원할때는 Input.gyro.gravity를, 안할때는 Input.acceleration 사용하도록 만들었다.
또한 자이로 센서는 가속도 센서에 비해 배터리 소모량이 크단다. 별로 차이가 안날수도 있지만 배터리를 아끼고 싶을때를 위해 자이로 센서가 있음에도 가속도 센서를 선택할 수 있게 만들었다. 요약 : 중력의 방향을 검출하고 싶으면 Input.acceleration 말고 Input.gyro.gravity 쓰자.
와 너 대단하다
고마워요. 개초보라 아는것도 없고 자신감도 없는데 공부할 힘이 됩니다
뭐 어때 뭐라도하는게 대단하지
아이디어도 좋은 것 같아! 나중에 출시하면 알려줘 ㅎㅎ