Планетарная гравитация

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

Планетарная гравитация

Сообщение Nuprahtor 21 июл 2010, 20:19

Каким образом можно реализовать планетарную гравитацию?
Например, есть объект-локация - сфера, изображающая планету. Как сделать чтобы все объекты притягивались к ее центру и по этой сфере можно было свободно передвигаться?
Аватара пользователя
Nuprahtor
UNец
 
Сообщения: 41
Зарегистрирован: 06 дек 2009, 16:44
Откуда: http://nuprahtor.wordpress.com/

Re: Планетарная гравитация

Сообщение Neodrop 21 июл 2010, 20:58

Открываем справку и, о Чудо! Видим там : Physics.gravity
Но, если объектов много и все шастают на разных сторонах планеты, то стоит покопать в сторону AddForce
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Планетарная гравитация

Сообщение SegaVZ 05 дек 2011, 22:41

Physics.gravity - глобальная штука, а как её локализовать, если возможно?
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение Левш@ 06 дек 2011, 02:29

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

Re: Планетарная гравитация

Сообщение SegaVZ 06 дек 2011, 08:06

так всё и упирается в если.
вобще мысль такая - нажал кнопку, объект начинает к себе притягивать все ригидбоди в неком радиусе (аля магнит или гравипушка)
если у кого есть какие мысли прошу не оставить без внимания. может это уже гдето упоминалось или был туториал. по крайней мере я не нашёл :(
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение bomberest 06 дек 2011, 16:45

SegaVZ писал(а):так всё и упирается в если.
вобще мысль такая - нажал кнопку, объект начинает к себе притягивать все ригидбоди в неком радиусе (аля магнит или гравипушка)
если у кого есть какие мысли прошу не оставить без внимания. может это уже гдето упоминалось или был туториал. по крайней мере я не нашёл :(

Делать AddForce всем объектам нужным в сторону твоей пушки.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Планетарная гравитация

Сообщение SegaVZ 06 дек 2011, 17:33

если можно поподробней

видел видеоролик с текстом скрипта для пушки, но качество плохое, половину текста не разобрал. пушка собирала все ригидбоди в кучу
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение Avatarchik 06 дек 2011, 19:19

Вот вам пример! :)



Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Планетарная гравитация

Сообщение SegaVZ 06 дек 2011, 19:24

уже забыл где откапал, но вот...
Синтаксис:
Используется javascript
var range : float = 30.0;

function FixedUpdate () {
     var cols : Collider[] = Physics.OverlapSphere(transform.position, range);
     var rbs : Array = new Array();
     for (c=0;c<cols.length;c++) {
         if (cols[c].attachedRigidbody && cols[c].attachedRigidbody != rigidbody) {
             var breaking :boolean = false;
             for (r=0;r<rbs.length;r++) {
                 if (cols[c].attachedRigidbody == rbs[r]) {
                     breaking=true;
                     break;
                 }
             }
             if (breaking) continue;
             rbs.Add(cols[c].attachedRigidbody);
             var offset : Vector3 = (transform.position - cols[c].transform.position);
             var mag: float = offset.magnitude;
             cols[c].attachedRigidbody.AddForce(offset/mag/mag * rigidbody.mass*3);
         }
     }
}

вешаешь на любой ригидбоди и другие ригидбоди к нему притягиваются. я сделал большой шар, а маленьким по нему покатался. типа планета.
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение Левш@ 06 дек 2011, 22:33

так всё и упирается в если

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

Re: Планетарная гравитация

Сообщение SegaVZ 07 дек 2011, 16:58

Левш@, я так понял это если одна планета, а если 2-е и более?
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение Левш@ 07 дек 2011, 17:56

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

Re: Планетарная гравитация

Сообщение SegaVZ 08 дек 2011, 11:24

так со всего мира нормали ловить и не должен, он же их по одному лучу ищет. куда луч упёрся (если упёрся), туда и погнали. или нет?
чтобы найти ответ, нужно понять вопрос
Аватара пользователя
SegaVZ
UNец
 
Сообщения: 35
Зарегистрирован: 06 фев 2011, 16:34
Откуда: Ярославская обл, г Данилов

Re: Планетарная гравитация

Сообщение Левш@ 08 дек 2011, 14:01

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

Re: Планетарная гравитация

Сообщение burlak 11 дек 2011, 01:53

Может быть просто по закону старика Ньютона?
Пренебречь малыми объектами, а все большие чтобы действовали на малые (и, возможно, на большие) с F = g*M1*M1/distance * distance
Если планет не много это может сработать.
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

След.

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

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

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