Стабилизация физики для двигателей вертикального подъема.

Программирование на Юнити.

Стабилизация физики для двигателей вертикального подъема.

Сообщение Courvee 25 июл 2010, 15:43

Пытаюсь сделать машину, на 4х двигателях вертикального подъема. На подобие как была в Mass Effect 2. Принцип действия такой: Каждый двигатель это ригидбоди. От них идет рэйкаст в низ, достигает препятствия, и возвращает расстояние до земли. Если расстояние меньше 4м, то на объект идет сила вверх, через АддФорс, что имитирует подъемную силу, если расстояние больше 4х метров до вертикальная сила уменьшается, и объект снова опускается вниз, под силой гравитации. Всё бы ничего. Система работает, и двигатели висят в воздухе. Но постоянно дергаются вверх - вниз, что выглядит неестественно. Как можно их стабилизировать, что бы они стояли на месте. Или может есть другие способы заставить работать эту систему. Вот часть кода двигателей:

Синтаксис:
Используется javascript
 if (FLdistance < 4)
                 {                     
                         engineFL.rigidbody.AddForce  (0, 20, 0);
                         engineFL.rigidbody.drag = 10;
                 }
                   else  
                     {
                             engineFL.rigidbody.AddForce  (0, 8, 0);
                                 engineFL.rigidbody.drag = 1;
                         }
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Левш@ 25 июл 2010, 17:18

Ввести новую переменную - скорость подьема.
Увязать с тайм.дельта тайм.
Тогда все начнет работать плавно, без рывков.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Courvee 25 июл 2010, 17:58

Сейчас вот такой код висит на каждом из двигателей:

Синтаксис:
Используется javascript
var power = 5.0;
var airRes = 1.0;
var accelerate = 5.0;
private var earthDistance : RaycastHit;

function FixedUpdate ()
        {
                var powerUp;
                var powerDown;

                Physics.Raycast (transform.position, -Vector3.up, earthDistance) ;
                print (earthDistance.distance + " meters");
               
                if (earthDistance.distance < 4)
                {
                        powerUp = power*0.5;
                        this.rigidbody.AddRelativeForce (Vector3.up * powerUp);
                        this.rigidbody.AddForce (Vector3.up * powerUp);
                }
       
                else
                {
                        powerDown = power * 0.8;
                        this.rigidbody.AddRelativeForce (Vector3.up * powerDown);
                }
               
                if (earthDistance.distance == 4)
                {
                        rigidbody.drag = 50;
                }
               
                else
                {
                        rigidbody.drag = 1;
                }
 


В воздухе висит неплохо. Дрэг неплохо затормаживает положение, и в принципе не мешает управлению, т.к. в этой точке двигатели бывают редко. Однако теперь его тянет влево... не пойму почему :(
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Левш@ 25 июл 2010, 18:39

Двигатель один или несколько?
Думаю лучше один использовать.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Courvee 25 июл 2010, 19:50

Двигателя четыре. Хочется сделать чуть более рельно, потому использую все двигатели, а не просто корабль. Управление WASD. Если перевернетесь - поставить обратно нельзя. Только перезапустить фрейм. Подскажите теперь мне, как реализовать систему стабилизации... дабы не кувыркался, и летал более плавно...

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/uQpgmkgE/Carrier_test.unity3d&w=600&h=450&t=false&preview=1' height='"+(450+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Serge 26 июл 2010, 04:32

Прикольное получается, но помочь, к сожалению не чем не могу. Если добиваетесь реализма, может, стоит поискать информацию каким образом достигается стабилизация в реальных механизмах? :-?
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Courvee 26 июл 2010, 06:12

Думаю всё же придется перейти на один "двигатель", так будет проще, и аккуратнее, хотя и не сильно правдоподобно. )))
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение fox 26 июл 2010, 09:32

ты можешь ввести систему типа гироскопа, которая будет считать отклонения от горизонтали и исходя от этого регулировать мощность двигателей. не поленись реализуй, получается довольно интересно.
Добавить foxumkov в Skype
Мои проекты:
Turbodrive
Изображение

Изображение
Аватара пользователя
fox
UNITрон
 
Сообщения: 255
Зарегистрирован: 07 ноя 2008, 13:02
Откуда: Питер
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Левш@ 26 июл 2010, 14:14

Нет смысла... лишняя нагрузка на движок.
А реалистичности можно добиться способами проще.
Если конечно это игра, а не симулятор требующий реальных параметров.
Оптимизация, производительность и т.д. :)
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Tutanhomon 26 июл 2010, 15:08

очень приятное управление. С удовольствием полетал, мне вспомнился пиликан из halo :ymdaydream:
можно еще addforce применять не к самим движкам, в смысле не по их координатам, а как будто они разнесены значительно шире, хотя и не меняя саму геометрию. Плюс еще было бы интересно не триггер использовать (смотреть ровно по высоте), а изменять подъемную силу каждого движка пропорционально расстоянию до земли...
вообще классно получается :-bd
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Tutanhomon 26 июл 2010, 15:10

опять таки, да - смотреть углы по двум осям и пропорционально наклону увеличивать соответствующую тягу...
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Гаврош 26 июл 2010, 16:44

С трудом,но на крышу ложится.Очень интересная задумка.
Аватара пользователя
Гаврош
UNIт
 
Сообщения: 67
Зарегистрирован: 22 июл 2010, 00:37

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Courvee 26 июл 2010, 19:13

Не ожидал такого количества положительных отзывов :) Спасибо. Попробую два варианта. Анти симулятор, с одним скриптом на весь корабль и с гироскопом. Что будет лучше, то и оставлю :)
Моя специализация: 3D. Моделирую, текстурирую, анимирую.
Аватара пользователя
Courvee
UNIт
 
Сообщения: 91
Зарегистрирован: 19 фев 2010, 08:11
Откуда: Россия, г. Оренбург
  • Сайт
  • ICQ

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение Vyrd 07 авг 2010, 18:15

Тут основная сложность чтобы двигатели были расположены на одинаковом расстоянии от центра масс всего объекта, судя по всему сейчас это не так
Кстати, насчёт удержания одной высоты, думаю стоит сделать подъёмную силу на высоте 4м равную силе тяжести
Vyrd
UNец
 
Сообщения: 4
Зарегистрирован: 09 июл 2009, 09:57

Re: Стабилизация физики для двигателей вертикального подъема.

Сообщение LiteLight 18 ноя 2010, 05:39

Courvee писал(а):
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/uQpgmkgE/Carrier_test.unity3d&w=600&h=450&t=false&preview=1' height='"+(450+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>

А не выложите-ли вы проект?
Да и чтобы не переворачивался сделать больше двигателей? Например 6?
Аватара пользователя
LiteLight
UNIт
 
Сообщения: 77
Зарегистрирован: 18 сен 2010, 17:23
Откуда: Заб. край, п.Ясногорск

След.

Вернуться в Скрипты

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

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