Пятница, 19 Апреля 2024, 02:09

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос профессионалам Android (Акселерометр, C#)
Вопрос профессионалам Android
dzrone3488Дата: Пятница, 22 Июля 2016, 02:26 | Сообщение # 1
участник
Сейчас нет на сайте
Всем привет! Я начинаю свой новый проект... Есть проблема, пытаюсь сделать отслеживание движения телефона в пространстве. Пока без успешно. Пытался осуществить покадровым прибавлением Input.acceleration, но работает он не правильно (Кубик движется в ту,или иную сторону относительно оси). Я понял почему он работает именно так. Я сравнил значения акселерометра телефона (*#0*# - Sensor) с значениями Unity, и понял, что они очень сильно отличаются. Если прибавлять телефонные значения акселерометра, то всё должно идеально работать, ибо по графику прекрасно видно, с какой скоростью по определённой оси движется телефон. Как я считаю Unity подсчитывает значения по другому, именно чувствительность (Размах) акселерометра, в отношение оси. И так вопрос:

1) Как мне осуществить моё желание в Unity? Как получить пригодные значения акселерометра? Или если это можно сделать иначе, прошу объяснить! Буду очень благодарен!
2) Если это сделать нельзя используя обычные библиотеки Unity, какие есть библиотеки способные получить нужные значения акселерометра?

На всякий случай скину скрин графика с датчика (акселерометра), для ленивых, у кого нет доступа у телефону, или тем у кого не Samsung (Попасть можно набрав *#0*# - Sensor)

Добавлено (22 июля 2016, 02:26)
---------------------------------------------
lovegcup


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

TLTДата: Суббота, 23 Июля 2016, 00:05 | Сообщение # 2
Сейчас нет на сайте
Есть же стандартные примеры работы с акселерометром. В чём проблема - глянь?

Дао, выраженное словами, не есть истинное Дао.
LertmindДата: Суббота, 23 Июля 2016, 00:42 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Не понимаю, проблема только в чувствительности? Тогда просто умножь на какое-то число.
Возможно телефонные данные ты читаешь от гироскопа, попробуй его получить и сравнить с Gyroscope.userAcceleration.

Добавлено (23 июля 2016, 00:42)
---------------------------------------------
Нашёл плагин https://github.com/kshoji/Unity-Android-Sensor-Plugin, попробуй и эти данные сравнить.

dzrone3488Дата: Суббота, 23 Июля 2016, 02:05 | Сообщение # 4
участник
Сейчас нет на сайте
Цитата Lertmind ()
Не понимаю, проблема только в чувствительности? Тогда просто умножь на какое-то число.
Возможно телефонные данные ты читаешь от гироскопа, попробуй его получить и сравнить с Gyroscope.userAcceleration.


Ха, в моём смартфоне нет гироскопа

Цитата Lertmind ()
Нашёл плагин https://github.com/kshoji/Unity-Android-Sensor-Plugin, попробуй и эти данные сравнить.


Сейчас посмотрю...


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

LertmindДата: Суббота, 23 Июля 2016, 02:19 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
dzrone3488, так что с чувствительностью? Из твоего описания не понятно как именно отличаются данные.
Я бы советовал использовал всё-таки стандартные методы, а не плагин для сенсоров. Проверь, что правильно понимаешь по каким осям Unity возвращает значения. Для большей точности попробуй использовать этот пример.
dzrone3488Дата: Суббота, 23 Июля 2016, 22:02 | Сообщение # 6
участник
Сейчас нет на сайте
Цитата Lertmind ()
dzrone3488, так что с чувствительностью? Из твоего описания не понятно как именно отличаются данные.
Я бы советовал использовал всё-таки стандартные методы, а не плагин для сенсоров. Проверь, что правильно понимаешь по каким осям Unity возвращает значения. Для большей точности попробуй использовать этот пример.


Я попробовал использовать скрипт. В консоли он пишет значения. Только все они выглядят - (0.0,0.0,0.0) даже когда я совершаю резкие движения телефона


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

LertmindДата: Суббота, 23 Июля 2016, 23:52 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
dzrone3488, используешь Unity Remote? Там передаются данные от сенсоров, а игра по сути запускается на компе, поэтому есть подозрение, что плагины не участвуют.

Добавлено (23 июля 2016, 23:52)
---------------------------------------------
В общем, собрал и вывел на экран планшета тремя способами:
1. Каждый кадр Input.acceleration.
2. С помощью примера от Unity отсюда.
3. С помощью примера для плагина отсюда.
Код
_0.5390625, -0.7773438, -0.1601563
_0.0125682, -0.0181238, -0.003734
-5.171476 ,  7.73806  ,  1.570596

Получилось, что данные от Unity к плагину различаются примерно в -10.
Разница между данными от Unity тоже сопоставима, в 42.89.
Так что я не вижу проблемы, используй данные от Unity и умножай на константу для настройки чувствительности.


Сообщение отредактировал Lertmind - Воскресенье, 24 Июля 2016, 01:30
dzrone3488Дата: Понедельник, 25 Июля 2016, 02:26 | Сообщение # 8
участник
Сейчас нет на сайте
Цитата Lertmind ()
dzrone3488, используешь Unity Remote? Там передаются данные от сенсоров, а игра по сути запускается на компе, поэтому есть подозрение, что плагины не участвуют.

Добавлено (23 июля 2016, 23:52)
---------------------------------------------
В общем, собрал и вывел на экран планшета тремя способами:
1. Каждый кадр Input.acceleration.
2. С помощью примера от Unity отсюда.
3. С помощью примера для плагина отсюда.
Код
_0.5390625, -0.7773438, -0.1601563
_0.0125682, -0.0181238, -0.003734
-5.171476 ,  7.73806  ,  1.570596

Получилось, что данные от Unity к плагину различаются примерно в -10.
Разница между данными от Unity тоже сопоставима, в 42.89.
Так что я не вижу проблемы, используй данные от Unity и умножай на константу для настройки чувствительности.


Нет... Дело не в чувствительности. Просто я думаю, что тип возвращаемых данных Unity и самого смартфона отличаются. Думаю легче будет показать...

И так... Вот это то что я хочу осуществить (с помощью одного акселерометра)



А вот-то что я на делал, я считаю, что этого должно быть достаточно, но к сожалению он работает совсем не так...

Код

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    
    void Start () {
    
  
  
    }
    
    
    void Update () {
    
  float x;
  float y;
  float z;
  
  x = transform.position.x+Input.acceleration.x;
  y = transform.position.x+Input.acceleration.y;
  z = transform.position.x+Input.acceleration.z;
  
  transform.position = new Vector3(x,y,z);
    }
}


При этом, я уверен что, чтобы осуществить это, хватит одного акселерометра, ибо его основная задача отслеживать ускорения в ту или иную сторону, соответственно имея показатели ускорений можно на каждый кадр, обновлять позицию (кубика) прибавляя эти значения. Однажды я даже сделал отслеживание поворота головы, с помощью акселерометра (гироскопа у меня нет), и пусть мог я поворачивать камеру только вверх и вниз, это работало прекрасно! Не смотря на то что эту задачу должен исполнять совсем другой датчик - гироскоп (который как я повторяюсь у меня отсутствует). :(

Добавлено (25 июля 2016, 02:19)
---------------------------------------------

Цитата Lertmind ()
dzrone3488, используешь Unity Remote? Там передаются данные от сенсоров, а игра по сути запускается на компе, поэтому есть подозрение, что плагины не участвуют.

Добавлено (23 июля 2016, 23:52)
---------------------------------------------
В общем, собрал и вывел на экран планшета тремя способами:
1. Каждый кадр Input.acceleration.
2. С помощью примера от Unity отсюда.
3. С помощью примера для плагина отсюда.
Код
_0.5390625, -0.7773438, -0.1601563
_0.0125682, -0.0181238, -0.003734
-5.171476 ,  7.73806  ,  1.570596

Получилось, что данные от Unity к плагину различаются примерно в -10.
Разница между данными от Unity тоже сопоставима, в 42.89.
Так что я не вижу проблемы, используй данные от Unity и умножай на константу для настройки чувствительности.


Нет... Дело не в чувствительности. Просто я думаю, что тип возвращаемых данных Unity и самого смартфона отличаются. Думаю легче будет показать...

И так... Вот это то что я хочу осуществить (с помощью одного акселерометра)



А вот-то что я на делал, я считаю, что этого должно быть достаточно, но к сожалению он работает совсем не так...

Код

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    
    void Start () {
    
  
  
    }
    
    
    void Update () {
    
  float x;
  float y;
  float z;
  
  x = transform.position.x+Input.acceleration.x;
  y = transform.position.x+Input.acceleration.y;
  z = transform.position.x+Input.acceleration.z;
  
  transform.position = new Vector3(x,y,z);
    }
}


При этом, я уверен что, чтобы осуществить это, хватит одного акселерометра, ибо его основная задача отслеживать ускорения в ту или иную сторону, соответственно имея показатели ускорений можно на каждый кадр, обновлять позицию (кубика) прибавляя эти значения. Однажды я даже сделал отслеживание поворота головы, с помощью акселерометра (гироскопа у меня нет), и пусть мог я поворачивать камеру только вверх и вниз, это работало прекрасно! Не смотря на то что эту задачу должен исполнять совсем другой датчик - гироскоп (который как я повторяюсь у меня отсутствует). :(

Добавлено (25 июля 2016, 02:26)
---------------------------------------------
Извиняюсь, случайно по каким-то причинам сообщение выше, опубликовалось дважды ;)


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

LertmindДата: Понедельник, 25 Июля 2016, 04:22 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
dzrone3488, хе-хе. Значит проблема не в Unity, а в том, что ты не знаешь как работает акселерометр.
Нет, такое у тебя не получится. Открываем википедию:
"Благодаря акселерометрам осуществляется управление положением изображения на мониторе мобильного устройства и отслеживание его ориентации относительно направления постоянно действующей силы гравитации Земли".
То есть акселерометр возвращает только поворот устройства относительно себя, ты не узнаешь движется ли устройство. Вот ещё кусок о гироскопе:
"Изначально единственным датчиком ориентации в смартфонах был трехосевой МЭМС-акселерометр, чувствительный лишь к ускорению. В состоянии относительного покоя он позволял приблизительно оценить направление вектора силы тяготения Земли (g). С 2010 года смартфоны стали дополнительно оснащаться трехосевым вибрационным МЭМС-гироскопом, одним из первых был iPhone 4. Иногда также устанавливается магнитометр (электронный компас), позволяющий компенсировать дрейф гироскопов."
Гироскоп по сути просто точный акселерометр.

По ссылки на видео чего-то не договаривают, там как-то определяют позицию.

Я в этом не разбираюсь, но слежение за позицией задача не простая. Есть даже такой проект Tango https://developers.google.com/tango/, они каким-то образом собирают информацию (компьютерное зрение и камера в том числе), но данные всё равно не точные и нужно иметь устройство совместимое с Tango. У них даже есть SDK для Unity https://developers.google.com/tango....racking. На wiki короче и лучше написано.

И посмотри на HTC Vive, там для определения положения шлема и контроллера используются инфракрасные лучи от базовых станций. Ещё вспомни Kinect. Это я к тому, что тебе стоит забыть о своей затеи.


Сообщение отредактировал Lertmind - Понедельник, 25 Июля 2016, 04:56
TymonrДата: Понедельник, 25 Июля 2016, 10:21 | Сообщение # 10
With OpenSource forever
Сейчас нет на сайте
Позиция фиксируется либо камерой(Смотри в сторону либо opencv, либо osvr. Про вторую не знаю, но первая либа очень простая и понятная). Lertmind, никаких "инфракрасных лучей для определения камеры" не используется, точнее, просто камера снимает в инфракрасном диапазоне — а в очки всроенно с десяток светодиодов, но по факту обычная картинка.


Либо тремя радио-датчиками(Читай голубой зуб). Тут с либами не помогу, знаю лишь, что есть пара контор, у которые занимаются радиолокацией и очень гордятся своими решениями — но сама технология очень древняя и в общем-то простая, так что на гитхабе должно быть достаточно решений

То что в ролике — подозреваю, что все они договаривают, но просто немного поработали над этой задачей и решили ее. Но методами того, что встроено в телефон - скорее всего фиг


Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
LertmindДата: Понедельник, 25 Июля 2016, 11:08 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Tymonr, я не говорил "инфракрасных лучей для определения камеры", про HTC Vive перефразировал из этого обзора:
"Далее, под потолком по углам комнаты по диагонали надо повесить две базовых станции. Это излучатели инфракрасных лучей, которые определяют положение в пространстве вашего шлема и контроллеров."
Как устроен Vive не разбирался, поэтому ничего сказать не могу.

Цитата Tymonr ()
То что в ролике — подозреваю, что все они договаривают
Скудное описание и на видео только указано наличие преблуд, про реализацию практически ничего нет. Если магия в "u-blox 6T", то ОК.

Спасибо за методы, но вряд ли dzrone3488 будет заниматься этим и делать игру только для себя, потому что кроме него никто не будет себя обременять дополнительными устройства и действиями.
dzrone3488Дата: Понедельник, 25 Июля 2016, 23:43 | Сообщение # 12
участник
Сейчас нет на сайте
Цитата Lertmind ()
Спасибо за методы, но вряд ли dzrone3488 будет заниматься этим и делать игру только для себя, потому что кроме него никто не будет себя обременять дополнительными устройства и действиями.

Действительно это так. Похоже я не до конца понимал всё это время, как работает акселерометр. Очень жаль.
Ну ладно, тогда придётся воздержаться от моей идеи, и ждать пока современные устройства будут полностью оснащены нужными датчиками, и как я считаю это будет совсем скоро... Про Tango я знаю, а с Kinect'ом я уже давно работаю, было сделано пару проектов. Но пока не хватает инфы для разработки полноценной сцены. Также прискорбно, что это пока не столь актуально для обычного пользователя, пусть конечно установка дров это не так трудно, но думаю у обычного человека это может вызвать некоторые трудности. Всё равно всем спасибо за помощь! ^_^


Я делаю игры, а вы в них играете! :)
Моя группа по созданию игр - www.vk.com/dzrone

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос профессионалам Android (Акселерометр, C#)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг