Страница 1 из 1

Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 04:20
jimmm
Как запоминать стартовое положение дивайса?
То есть указать акселерометру точку ноль от которой нужно отсчитывать повороты и наклоны в разные стороны?
Я сделал так:
Синтаксис:
Используется csharp
float startY;
float tornY;
void Start (){
startY = Input.acceleration.y;
}
void Update (){
tornY = (Input.acceleration.normalized.y - startY);
}


Но у меня проблема если дивайс зафексирован в вертикальном положении, тогда наклоны вверх и вниз неправильно просчитываются. Как исправить, чтоб даже если игрок лежит на спине, дивайс правильно просчитывал наклоны назад и вперед корректно относительно игрока??

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 11:43
Cr0c
Делать "нулевое положение" - запоминать положение как базовое и от него считать.

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 12:12
Valentinus
Cr0c писал(а):Делать "нулевое положение" - запоминать положение как базовое и от него считать.

судя по скрипту, он так и пробует делать.

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 12:16
jimmm
Valentinus писал(а):
Cr0c писал(а):Делать "нулевое положение" - запоминать положение как базовое и от него считать.

судя по скрипту, он так и пробует делать.

Да только у меня проблема, когда дивайс стоит строго вертикально, например, тогда наклон на себя не работает. Я так понимаю координата по оси Y уходит в минус и расчет наклона становится не правельным. Можно ли как-то избезать этого?

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 13:19
Valentinus
я с гироскопом не работал, поэтому спрошу - зачем вы делаете normalized ?

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 18:36
Cr0c
Синтаксис:
Используется csharp
Vector3 zero_pos;
void SetZeroPos{
 zero_pos = Input.acceleration;
}
Vector3 GetRelative(){
 return (Input.acceleration - zero_pos).normalized;
}

И уже с него берите данные

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 24 май 2017, 23:43
jimmm
Valentinus писал(а):я с гироскопом не работал, поэтому спрошу - зачем вы делаете normalized ?

Честно говоря не помню

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 26 июл 2017, 02:36
jimmm
Cr0c писал(а):
Синтаксис:
Используется csharp
Vector3 zero_pos;
void SetZeroPos{
 zero_pos = Input.acceleration;
}
Vector3 GetRelative(){
 return (Input.acceleration - zero_pos).normalized;
}

И уже с него берите данные

Это не работает,
Так же когда дивайс строго вертикально(то есть перпендикулярно земле) при отклонении назад, работает так же как и наклон вперед. Я так понимаю переходит через 0 сразу в -0, поэтому высчитывание с вычитанием зерПозиции дает неправильный ответ.
Например zero_pos.y =10 и при наклоне назад, через ноль, получается что вычитание идел минусового значения из 10.

Кто знает как этого избежать?

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 26 июл 2017, 03:52
jimmm
Valentinus писал(а):я с гироскопом не работал, поэтому спрошу - зачем вы делаете normalized ?

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

Re: Как указать нулевое положение акселерометра?

СообщениеДобавлено: 26 июл 2017, 09:51
snezhok_13
У меня была проблема с акселерометром, когда я использовал моментальные значения из acceleration. Вам нужно использовать не моментальные значения, а накопительное значение с кватернионом из Input.gyro (поищите в документации именно кватернион)