2016-05-20 3 views
0

В настоящее время я делаю игру «roll-a-ball» с полностью функциональными элементами управления наклоном, которые работают по отношению к устройству, лежащему на поверхности. После долгих поисков и проб и ошибок множества различных методов я решил обратиться за помощью .. мой скрипт управления наклоном выглядит следующим образом:Единство, как установить смещение наклона?

public class Tilt : MonoBehaviour 
    { 
     public float g = 100f; 

     void Start() 
    { 
      g = g + 110; 
     } 

     void Update() 
     { 
       Physics.gravity = new Vector3 (
       Input.acceleration.x, 
       Input.acceleration.z, 
        Input.acceleration.y 
       ) * g; 
     } 
    } 

Я требую, чтобы «ноль» акселерометр в соответствии с позиции пользователя удерживает устройство на уровне нагрузки, так что отклонение пускового устройства на 45 градусов регистрируется как угол наклона 0 градусов в игровом мире и так далее. Я понимаю, что мне нужно взять текущие положения акселерометра и вычесть их или что-то в этом роде, но мне нужно, чтобы кто-то сделал это довольно ясно, что делать, прежде чем я становлюсь лысым: p Спасибо ..

+1

нет решения, но приятное обновление для векторной арифметики. http://docs.unity3d.com/Manual/UnderstandingVectorArithmetic.html – yes

ответ

0

Из моего опыта работы с наклоном в Единство, вам нужно выполнить некоторую калибровку плоскости.

В самой базовой форме получить первые значения ускорения в Start и в update рассчитать разницу от этого значения до текущего значения.

Я бы также рекомендовал калибровку плоскости в течение более длительного периода времени, чем один кадр. Это сохранит значение для X-времени в начале игры и вычислит среднее из этого.

Кроме того, если я правильно помню, Input дает функцию, которая возвращает все ускорения, отправленные датчиком с момента последнего кадра. Это может быть десятки или сотни в зависимости от датчика. Взятие среднего из них дает более точные значения.

Кроме того, я бы рекомендовал выполнить фильтрацию нижних частот. Документация Unity должна обеспечивать простую реализацию фильтра нижних частот в документации Input.acceleration.

Смежные вопросы