(Решено) Сколко оборотов вокруг одной из осей сделал объект?

Программирование для iPhone & Android

(Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 23 сен 2010, 18:19

Всем, хаюшки!
У меня есть герой, который в игровом мире движется по двум осям, камера на него смотрит сбоку и визуально мы видим как он перемещается вверх/вниз, влево/вправо, я с помощью Torque вращаю героя по третьей оси, так вот: я даю толчок для вращения и вижу что герой сделал 3 полных оборота,
вопрос: как это определить програмно и как определить в какую сторону крутимсо?
Последний раз редактировалось EnterTheWork 24 сен 2010, 18:12, всего редактировалось 1 раз.
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение Zaicheg 23 сен 2010, 18:22

EnterTheWork писал(а):я даю толчок для вращения и вижу что герой сделал 3 полных оборота,
вопрос: как это определить програмно и как определить в какую сторону крутимсо?

Проверять каждый кадр transform.rotation или transform.eulerAngles, брать разницу ну и складывать для получения суммарного оборота.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 23 сен 2010, 19:33

Спасибо за скорый ответ, я так делал, а как тогда решить проблему возвращаемых значений transform.rotation.eulerAngles.x ниже на рисунке:
circle.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение DbIMok 24 сен 2010, 11:04

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dc244.4shared.com/download/xxcss-_E/rotation.unity3d&w=320&h=240&t=false&preview=1' height='"+(240+30)+"' width='320' frameborder='0' scrolling='no'></iframe>"); </script>

Синтаксис:
Используется javascript
#pragma strict

var angle: float;

function Update () {
        var delta: float = transform.eulerAngles.y;
        transform.Rotate(Vector3.up * Time.deltaTime*90, Space.World);
        if (transform.eulerAngles.y > delta) {
                angle += transform.eulerAngles.y - delta;
        } else {
                angle += (360 - delta) + transform.eulerAngles.y;
        }
}

function OnGUI() {
        GUI.Label (Rect(10,10,50,20), (angle/360).ToString());
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 16:13

Благодарю за скрипт, я попробовал его приспособить под себя, но так и не вышло, зато заметил что он будет работать и в таком случае:
Синтаксис:
Используется javascript
#pragma strict

var angle: float;

function Update () {
        transform.Rotate(Vector3.up * Time.deltaTime*90, Space.World);
        angle++;
}

function OnGUI() {
        GUI.Label (Rect(10,10,50,20), angle.ToString());
}
 

Это говорит о том, что в данном случае при постоянном вращении (rotation) мы можем параллельно инкрементить значение "угла" каждый Update() в моем случае это не подходит!

У меня на прямую нужно получать значение отклонения угла, а так как я вращаю свой объект только при определенном событии, в момент которого я даю
Синтаксис:
Используется javascript
rigidbody.AddRelativeTorque( Vector3( 0.4, 0, 0 ), ForceMode.VelocityChange );
 

со временем это значение затухает после того как я в любой момент могу прекратить событие (отпустить клавишу).

Так что задача пока не решена, и я нахожусь в активных поисках решения! Если будут идеи, подкидывайте, я буду очень благодарен!

Кстати, я нашел вот такой метод :
Синтаксис:
Используется javascript
transform.rotation.ToAngleAxis(angle, axis);
 

тут значение angle возвращает на какой угол был повернут объект вокруг одной из осей вот как работает: первый рисунок - делаю первый оборот, начиная движение с нуля по часовой стрелке и возвращаюсь в 360, а на втором рисунке я продолжаю двигаться в том же направлении, делая второй оборот
.jpg

.jpg


Мне в голову пока что адекватные решения не приходят, просто при текущем положении вещей нужно чтоб при втором повороте опять все начиналось с тех же значений угла как и при первом повороте.
Может кто-то знает что с такой штукой можно сделать?
У вас нет доступа для просмотра вложений в этом сообщении.
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение DbIMok 24 сен 2010, 16:39

EnterTheWork писал(а):он будет работать и в таком случае

в таком случае у вас вместо количества оборотов будет счетчик апдейтов
EnterTheWork писал(а):У меня на прямую нужно получать значение отклонения угла

отклонения от чего? ранее запомненного состояния. запоминайте, получайте, в чем вопрос?
вращение стрелками вправо-влево
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dc236.4shared.com/download/GeDEf3IR/rotation2.unity3d&w=320&h=240&t=false&preview=1' height='"+(240+30)+"' width='320' frameborder='0' scrolling='no'></iframe>"); </script>

Синтаксис:
Используется javascript
#pragma strict

var angle: float;

function Update () {
        var delta: float = transform.eulerAngles.y;
        if (Input.GetKey (KeyCode.RightArrow)) {
                transform.Rotate(Vector3.up * Time.deltaTime*90, Space.World);
                if (transform.eulerAngles.y > delta) {
                        angle += transform.eulerAngles.y - delta;
                } else {
                        angle += (360 - delta) + transform.eulerAngles.y;
                }
        }
        if (Input.GetKey (KeyCode.LeftArrow)) {
                transform.Rotate(Vector3.up * Time.deltaTime*-90, Space.World);
                if (transform.eulerAngles.y < delta) {
                        angle -= delta - transform.eulerAngles.y;
                } else {
                        angle -= delta + (360 - transform.eulerAngles.y);
                }
        }
}

function OnGUI() {
        GUI.Label (Rect(10,10,50,20), (angle/360).ToString());
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 18:07

Кстати, уважаемый, Ваш скрипт постоянно заходит только в эту ветку ( и значения delta = transform.eulerAngles.y )
Синтаксис:
Используется javascript
        } else {
                angle += (360 - delta) + transform.eulerAngles.y;    //здесь у Вас получается что: angle += 360     - проверьте это
        }
 

из выше описаного получается, что у Вас инкремент в апдейте только на 360 градусов, а не на 1-цу, как это описал я, так что разницы не вижу!

Моя исходная задача заключается в том,
что нужно програмно определить сколько оборотов делает игровой герой вокруг одной из осей,
если я кручу героя давая торкъю или нет!
В общем я еще немного покумекал: короче инкрементирую разницу старого и нового угла поворота, получаю суммарный угол поворота, разделивши на 360, узнаю скока оборотов сделал!

Встал другой вопрос - как определить сторону в которую я кручусь: по часовой или против?
Хотя я это уже определяю когда нажимаю кнопки куда крутить, просто в булевой переменной буду отображать куда кручу в зависимости от нажатой клавиши или ГУИ кнопки!
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: Сколько оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 18:11

Все, разобрался, оно оказалось как всегда просто!
И темка получилась нубская, сори!
Но все равно спасибо огромное а то сидел долговато над этой задачей, хорошо что есть такие люди которые могут дать пинок чтобы двигаться в нужную сторону ( по часовой стрелку или против - это уже в зависимости от задачи )!
Надеюсь эта темка может еще кому-то поможет!
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение DbIMok 24 сен 2010, 18:23

EnterTheWork писал(а):Кстати, уважаемый, Ваш скрипт постоянно заходит только в эту ветку

не может быть! )
EnterTheWork писал(а):у Вас инкремент в апдейте только на 360 градусов, а не на 1-цу, как это описал я, так что разницы не вижу!

жаль, что вы так ничего и не поняли :(
EnterTheWork писал(а):здесь у Вас получается что: angle += 360

нет. к angle всегда прибавляется разница углов до поворота и после. в итоге там накапливается суммированный угол, из которого в гуи получается кол-во оборотов делением на 360.
EnterTheWork писал(а):как определить сторону в которую я кручусь: по часовой или против?

можно изначально смотреть разницу в обе стороны и довольно обоснованно предполагать, что поворот произошел в ту сторону, где разница меньше.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 18:35

Все я прекрасно понял про накопление угла, а в результате получилось то, что я описал! Проверивши работу Вашего скрипта и своего, вы удивитесь наверное, но значения angle ( которое выводится в ГУИ лабел ) и у Вас и у меня получаются одинаковые!
Я даже запускал синхронно ваш метод и свой - значения одни и те же! Не верите проверьте!
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение DbIMok 24 сен 2010, 18:55

эх, а я глупец какие-то углы считаю. нет чтобы инкремент/декремент кадров туда-сюда. дааа... век живи - век учись! ^:)^
P.S. ждем продолжения темы, когда "дойдет" (окажется, что все совсем не так, как предполагал автор).
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 19:23

:-j

Все что я предпологал - все получилось! Все что задумывалось - реализовалось! И я никого не собирался учить, просто описал то, что вижу, короче говоря высказал свое мнение!
Важно благодаря кому я пришел к результату, неважно как я к нему пришел, и самое важное что я к нему пришел!
За это Вам благодарность и почет! ^:)^
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение DbIMok 24 сен 2010, 20:26

какой результат-то? поворот считается как 1 градус за 1 кадр?
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: (Решено) Сколко оборотов вокруг одной из осей сделал объект?

Сообщение EnterTheWork 24 сен 2010, 20:46

какой результат-то? поворот считается как 1 градус за 1 кадр?


Вот как я решил ( я же писал ):
В общем я еще немного покумекал: короче инкрементирую разницу старого и нового угла поворота, получаю суммарный угол поворота, разделивши на 360, узнаю скока оборотов сделал!
EnterTheWork
UNец
 
Сообщения: 29
Зарегистрирован: 13 июл 2009, 02:26
  • ICQ


Вернуться в iPhone & Android

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4