Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Программирование для мобильных устройств

Программирование для мобильных устройств Android, iOS и другие

Ответ
 
Опции темы
Старый 08.07.2012, 19:25   #1
DeKon
AnyKey`щик
 
Аватар для DeKon
 
Регистрация: 08.07.2012
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Связь с акселерометром

Здравствуйте! Возникла необходимость написать простенькое приложение на андройд. Решил использовать Юнити. Нужно лишь зависимость камеры от акселерометра, двигаться не надо. Сам я не владею ни С++ ни Ява скриптом (знаком только с паскалем ) из-за этого возникают проблемы. На сайте Юнити нашел инфу, как сделать связь с акс.
Возникли две проблемы:
1) Начальная позиция на оси Х - телефон параллелен полу, а мне нужно, что бы начальная позиция была когда телефон перпендикулярен полу. Перепробовал разные способы, которые смог придумать, но при них камера просто постоянно крутилась по оси Х
2) Так как я двигаю телефон только по осям Х и У, мне и нужно получить в итоге движение по ним. Камера отлично слушается, но почему то начинает крутиться и по оси Z. Никак не могу заморозить этот параметр.
Скрипт и скриншот прилагаются, просьба сильно тапками не бить за извращенные методы.

// Move object using accelerometer
var speed = 10;
var dir : Vector3 = Vector3.zero;

function Update () {


// we assume that device is held parallel to the ground
// and Home button is in the right hand

// remap device acceleration axis to game coordinates:
// 1) XY plane of the device is mapped onto XZ plane
// 2) rotated 90 degrees around Y axis



dir.x = Input.acceleration.x;
dir.y = -Input.acceleration.y;




// clamp acceleration vector to unit sphere
if (dir.sqrMagnitude > 1)
dir.Normalize();

// Make it move 10 meters per second instead of 10 meters per frame...
dir *= Time.deltaTime;

// Move object


transform.Rotate (dir * speed * 10);


}


(Offline)
 
Ответить с цитированием
Старый 08.07.2012, 20:01   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Связь с акселерометром

Задачу опиши нормально.
1) попробуй использовать Input.acceleration.z вместо x
2) вращение вероятно можно выполнить как transform.eulerAngles += dir * speed * 10;
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DeKon (08.07.2012)
Старый 08.07.2012, 21:11   #3
DeKon
AnyKey`щик
 
Аватар для DeKon
 
Регистрация: 08.07.2012
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Связь с акселерометром

Во! Отлично! То что нужно. Спасибо.
(Offline)
 
Ответить с цитированием
Старый 08.07.2012, 22:44   #4
DeKon
AnyKey`щик
 
Аватар для DeKon
 
Регистрация: 08.07.2012
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Плохо Ответ: Связь с акселерометром (теперь еще вопрос по скрипту)

А такой еще вопрос. Для большей реалистичности решил все-таки добавить небольшой наклон по оси Z. Но нужно сделать так, что бы, наклонив телефон достаточно сильно, камера поворачивалась по оси Z (например как наклон головой вправо-влево), а при стандартом положении наклон возвращался в стандартное положение ( то есть 0) и оставался таким.
Создав новый скрипт, я анимировал наклон по оси Z при определенном наклоне телефона, но не знаю, что надо использовать, что бы при стандартном положении телефона значение наклона от текущего значения возвращалось к нулю и оставалось таким.
// Move object using accelerometer

var speed = 10;
var dir : Vector3 = Vector3.zero;

function Update () {

dir.z= Input.acceleration.y;
if (dir.sqrMagnitude > 1)
dir.Normalize();

// Make it move 10 meters per second instead of 10 meters per frame...
dir *= Time.deltaTime;

//модуль он у меня почему-то не принял, наверно библиотеку какую-то надо добавить

if (dir.z > 0.0015)
transform.Rotate (dir* speed* 6);
else if (dir.z < -0.0015)
transform.Rotate (dir* speed* 6);
else //что сюда добавить, что бы он от текущего значения возвращался к нулю и оставался таким?//



}
(Offline)
 
Ответить с цитированием
Старый 09.07.2012, 09:22   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Связь с акселерометром (теперь еще вопрос по скрипту)

В общем сейчас ты работаешь с абстрактным вращением, я даже не знаю как лучше... попробуй как-то так:
if (Mathf.Abs(dir.z) > 0.0015
       
transform.Rotate (dirspeed6); 
    else 
    {
         if (
transform.eulerAngles.speed 6
            
transform.eulerAngles.-= speed 6;
         else if (
transform.eulerAngles.< -speed6
            
transform.eulerAngles.+= speed 6;
         else 
            
transform.eulerAngles.0;
    } 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (11.07.2012)
Старый 09.07.2012, 21:10   #6
DeKon
AnyKey`щик
 
Аватар для DeKon
 
Регистрация: 08.07.2012
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Связь с акселерометром (теперь еще вопрос по скрипту)

Камера не реагировала на такое условие, проанализировав данные с акселерометра и камеры, сделал такое условие
if (Mathf.Abs(dir.z) > 0.0015)  
       
transform.Rotate (dirspeed6);  
   else   
    {  if (
transform.eulerAngles.2
           
transform.eulerAngles.=0;
       else if (
transform.eulerAngles.<100
               
transform.eulerAngles.-= 1.3;   
            else 
transform.eulerAngles.+= 1.3;
         
    } 
В целом камера слушается норм, но пока все довольно чувствительно и коряво,делаю мертвые зоны и т.д. калибрую в общем
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:31.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com