Смещение при наклоне телефона. Ошибка акселерометра

Я делаю несколько гоночную игру. Машина автоматически движется вперед, но чтобы повернуть ее боком, я измеряю поворот телефона. Поскольку мне нужно измерить ускорение по оси x, я использую:

Direction.x = Input.acceleration.x * Time.deltaTime; 
Transform.translate (Direction.x * 5f);

Когда я играю в игру, машина поворачивается так, как я хочу, когда я наклоняю телефон по оси x. Однако проблема в том, что когда я кладу телефон на стол, машина движется влево очень медленно, что не имеет смысла, поскольку она находится под углом 0 градусов. Чтобы убедиться, что это не из-за поверхности стола, я поиграл в Unity Simultator, и произошло то же самое. Машина едет влево супер медленно. Когда я отлаживаю.log, он говорит, что Direction.x составляет около -0,000147..., очень маленькое число. Есть ли способ исправить эту проблему, чтобы когда телефон не двигался, Direction.X автомобиля был равен 0, или что-то не так с моим кодом.


person Infinity Max    schedule 05.11.2016    source источник


Ответы (1)


Иногда в Unity Translate функция дает сбои, т.к. лучше использовать стандартные операции с векторами. Так же попробуйте урезать минимальные значения акселерометра:

float min_value = 0.01f

if(Mathf.Abs(Input.acceleration.x) < min_value)
    Direction.x = Input.acceleration.x * Time.deltaTime;
else
    Direction.x = 0;

transform.position = transform.position + Direction.x * 5f;
person OnionFan    schedule 05.11.2016