Вторник, 16 Апреля 2024, 21:12

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Движение объектов по орбитам
Движение объектов по орбитам
DebieCooperДата: Воскресенье, 12 Апреля 2015, 18:59 | Сообщение # 1
частый гость
Сейчас нет на сайте
Доброго времени суток. Подскажите, достоверный источник с данными необходимыми для программирования движения планет солнечной системы вокруг Солнца.
И дайте пожалуйста ссылки на похожие темы где-нибудь, чтобы можно было посмотреть как пишется скрипт для подобного движения по орбитам. А то я что-то не знаю даже с чего начать)

Так же интересуют книги по Unity API если таковые существуют на русском.
robertonoДата: Воскресенье, 12 Апреля 2015, 19:20 | Сообщение # 2
Чокнутый Кот
Сейчас нет на сайте
DebieCooper, самая лучшая книга по Unity API это документация (серьезно).
Так же стоит погуглить, вписав в начале unity (или unity3d, что покажет более старые результаты, ведь юнити так раньше назывался).

Как бы сделал это я ?

Я бы сделал пустой GameObject, разместил его бы как ось орбиты.
И внутрь этого объекта я бы вставил планету (переместив её на линию орбиты (например по X просто отодвинул бы) ). И вращал бы саму орбиту. Тогда планета будет крутиться по так называемой орбите.
Но это только если орбита полностью круглая (в любом случае скриптами и овальную можно сделать).


Сообщение отредактировал robertono - Воскресенье, 12 Апреля 2015, 19:20
berilДата: Воскресенье, 12 Апреля 2015, 19:21 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
вот есть нечто подобное cool



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
DebieCooperДата: Воскресенье, 12 Апреля 2015, 20:29 | Сообщение # 4
частый гость
Сейчас нет на сайте
Не получается так как в видео сделать. Я создал две сферы, налепил на них скрипты как в видео и стопицот ошибок кароч и ничего не понятно)
У меня должен быть один статический объект, вокруг которого вращается множество остальных по своим орбитам, со своей скоростью и т.п.

Добавлено (12 апреля 2015, 20:29)
---------------------------------------------
Всё, получилось. Один объект вращается вокруг другого. Но теперь возникли следующие вопросы:
1) Что означает каждая строчка в каждом скрипте:)
2) Как задать эллиптическую орбиту.
3) И как добавь уже вращающемуся объекту еще один, который уже будет вокруг него самого вращаться.
4) Не получается изменить скорость вращения объекта, меняю поле speed, но разницы никакой.
5) Хотелось бы создать один скрипт, который вешается на любой объект, и просто меняя параметры мы будем задавать свою орбиту, скорость и т.п. С эти так не получается.


Сообщение отредактировал DebieCooper - Воскресенье, 12 Апреля 2015, 20:39
TymonrДата: Воскресенье, 12 Апреля 2015, 21:06 | Сообщение # 5
With OpenSource forever
Сейчас нет на сайте
Собственно, для движения по орбитам достаточно задать расстояние(Произвольное число), угол(Произвольное число), который постепенно увеличивать(Или уменьшать), координату, вокруг которой будет вращаться, и устанавливать координаты в соответствии с синусом и косинусом помноженным на расстояние и прибавлунной начальной координатой. Т.е., например,
Код

Angle = 0;
цикл{
Angle++;
X = cos(Angle) + StartCoord.x;
Z = sin(Angle) + StartCoord.z;}


Цитата DebieCooper ()
2) Как задать эллиптическую орбиту.

Домножай синус или косинус на чуть большее значение, например
Цитата DebieCooper ()
3) И как добавь уже вращающемуся объекту еще один, который уже будет вокруг него самого вращаться.

те же стартовые координаты
Цитата DebieCooper ()
4) Не получается изменить скорость вращения объекта, меняю поле speed, но разницы никакой.

Изменяешь число меняющее угол


Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
DebieCooperДата: Воскресенье, 12 Апреля 2015, 21:12 | Сообщение # 6
частый гость
Сейчас нет на сайте
А может кто-нибудь сделать один скрипт (для примера) для движения земли вокруг солнца.
Просто мы хотим сделать, чтобы все более-менее соответствовало действительности, поэтому я заодно ищу достоверный источник с нужными значениями орбит планет солнечной системы.


Сообщение отредактировал DebieCooper - Воскресенье, 12 Апреля 2015, 21:38
MANMANAДата: Воскресенье, 12 Апреля 2015, 23:28 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
первый скрипт от Scribe рисует красивую траекторию через LineRenderer
http://answers.unity3d.com/questio....it.html, причем есть настройки траектории


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Воскресенье, 12 Апреля 2015, 23:29
DebieCooperДата: Понедельник, 13 Апреля 2015, 00:54 | Сообщение # 8
частый гость
Сейчас нет на сайте
Код
void Update () {
           transform.RotateAround(Vector3.zero, Vector3.up, 360 * Time.deltaTime);
       
    }

Нашел в документации, работает нормально. Только если объект поднять вверх, то он просто по кругу вращается. А нужно чтобы он все равно вращался вокруг другого объекта, иначе придется просто все планеты выстроить в одну плоскость. Ну и если я попробую таким же образом сделать луну, то она не вокруг земли будет вращаться, а на одном месте. И расстояние не получится задать нормально)
П.С, Сейчас посмотрю что вы скинули.

Добавлено (12 апреля 2015, 23:50)
---------------------------------------------
Уже все перечитал, но все равно не понимаю как задать объекту такую же орбиту как у Земли (ну или примерно).

Добавлено (13 апреля 2015, 00:54)
---------------------------------------------
Еще один вопрос возник. Как мне расставить объекты относительно одного неподвижного учитывая реальные пропорции расположения планет в солнечной системе?)

Сообщение отредактировал DebieCooper - Понедельник, 13 Апреля 2015, 00:39
MANMANAДата: Понедельник, 13 Апреля 2015, 02:18 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
если орбита устроит не эллиптическая, а в форме окружности, то

создаешь на сцене сферы по размеру планет
создаешь на сцене сферу - солнце, на него вешаешь скрипт
создаешь сферу поменьше для Луны и делаешь ее дочерней к Земле (перетаскиваешь в инспекторе Луну на Землю)

Код
using UnityEngine;
using System.Collections;

public class PlanetsScript : MonoBehaviour {
     //переменные, в которые необходимо перетащить в инспекторе созданные на сцене объекты (сферы, к примеру). создавать объекты можно в любой точке сцены
     public GameObject mercury;
     public GameObject venus;
     public GameObject earth;
     public GameObject moon;
     //public GameObject mars;
     //public GameObject jupiter;
     //public GameObject saturn;
     //public GameObject uranus;
     //public GameObject neptune;
     //public GameObject pluto;
     private float baseMercuryPeriod = 87.969f;//период обращения Меркурия вокруг Солнца
     //Переменные обращения каждой из планет вокруг Солнца в относительных единицах (по отношению к периоду обращения Меркурия вокруг Солнца)
     private float periodMercury;
     private float periodVenus;
     private float periodEarth;
     private float coeff = 50.0f;//период обращения планет вокруг собственных осей. здесь - один для всех. можно поставить разный

     void Start ()
     {
      periodMercury = 87.969f/baseMercuryPeriod;//=1
      periodVenus = 224.7f/baseMercuryPeriod;
      periodEarth = 365.26f/baseMercuryPeriod;
      transform.position = new Vector3 (0.0f,1.0f,0.0f);//стартовая позиция Солнца
      mercury.transform.position = new Vector3 (5.79f,1.0f,0.0f);//стартовая позиция Меркурия и т.д. (расстояние от Солнца *10 млн км)
      venus.transform.position = new Vector3 (10.82f,1.0f,0.0f);
      earth.transform.position = new Vector3 (14.96f,1.0f,0.0f);
      moon.transform.position = new Vector3 (16.0f,1.0f,0.0f);
     }
         
     void Update () {
      transform.RotateAround(Vector3.zero, Vector3.up, 10 * Time.deltaTime);//вращаем Солнышко вокруг собственной оси (нужно ли?). Если нужно, то можно заменить эту строку на transform.Rotate (Vector3.up);
      mercury.transform.RotateAround(Vector3.zero, Vector3.up, 10 * periodMercury *Time.deltaTime);//вращаем Меркурий вокруг Солнца
      mercury.transform.Rotate (Vector3.up * coeff * Time.deltaTime);//вращаем Марс вокруг собственной оси
      venus.transform.RotateAround(Vector3.zero, Vector3.up, 10 * periodVenus * Time.deltaTime);//вращаем Венеру вокруг Солнца
      venus.transform.Rotate (Vector3.up * coeff * Time.deltaTime);//вращаем Венеру вокруг собственной оси
      earth.transform.RotateAround(Vector3.zero, Vector3.up, 10 * periodEarth * Time.deltaTime);//вращаем Землю вокруг Солнца
      earth.transform.Rotate (Vector3.up * coeff * Time.deltaTime);//вращаем Землю вокруг собственной оси
      moon.transform.RotateAround(earth.transform.position, Vector3.up, 10 * periodEarth * Time.deltaTime);//вращаем Луну вокруг Земли
     }
}


В инспекторе перетаскиваешь созданные планеты сферы в соответствующие слоты скрипта.
Вуаля.

тот маленький звезденыш около земли - это Луна.


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Понедельник, 13 Апреля 2015, 02:20
DebieCooperДата: Понедельник, 13 Апреля 2015, 02:27 | Сообщение # 10
частый гость
Сейчас нет на сайте
Благодарствую от души. Сейчас уже спать пойду, голова пухнет от всего прочитанного про орбиты всякие, завтра отпишусь если что)
П.С. Только картинка не отображается ваша)


Сообщение отредактировал DebieCooper - Понедельник, 13 Апреля 2015, 02:28
MANMANAДата: Понедельник, 13 Апреля 2015, 02:46 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
Цитата DebieCooper ()
П.С. Только картинка не отображается ваша)

крикните, у кого еще не отображается, а то у меня все отображается


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
DebieCooperДата: Понедельник, 13 Апреля 2015, 13:50 | Сообщение # 12
частый гость
Сейчас нет на сайте
Код
mercury.transform.position = new Vector3 (5.79f,1.0f,0.0f);//стартовая позиция Меркурия и т.д. (расстояние от Солнца *10 млн км)

1) А как мне рассчитать расстояние учитывая правильные пропорции? Как мне понять какое я сделал расстояние от земли до луны например? Или если я хочу землю поставить на таком же расстоянии как в реальности (только меньше в 10.000 раз например)
Код
mercury.transform.RotateAround(Vector3.zero, Vector3.up, 10 * periodMercury *Time.deltaTime);//вращаем Меркурий вокруг Солнца     
          mercury.transform.Rotate (Vector3.up * coeff * Time.deltaTime);//вращаем Марс вокруг собственной оси

2) Можно подробней про то как работают эти методы?
3) А можно как-нибудь сделать так, чтобы я менять скорость "игры" и все объекты подчинялись. Например, по дефолту я сделал так что все объекты имеют такое же время обращения вокруг солнца.Год, для земли например. А потом меняя одно значение я ускоряю этот период.
Код
transform.Rotate(Vector3.up);

4) Как мне регулировать скорость вращения вокруг своей оси?)
5) Как мне настроить, чтобы меркурий реально вращался вокруг солнца со скоростью: 1 оборот за 88 дней?) Просто мне нужны начальные параметры реальные, как и расстояния. И непонятно как в юнити расстояние измерять и ориентироваться) И если отсчет идет от (0,0,0) позиции Солнца, а Солнце у меня огромных размеров, то планеты попадают внутрь Солнца. Нельзя делать как-нибудь отсчет от края Солнца?)


Сообщение отредактировал DebieCooper - Понедельник, 13 Апреля 2015, 14:15
HPlusDieseДата: Понедельник, 13 Апреля 2015, 16:33 | Сообщение # 13
участник
Сейчас нет на сайте
DebieCooper, По линейке у тебя был трояк. По любому.
MANMANAДата: Понедельник, 13 Апреля 2015, 17:22 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Цитата HPlusDiese ()
1) А как мне рассчитать расстояние учитывая правильные пропорции? Как мне...


mercury.transform.position = new Vector3 (5.79f,1.0f,0.0f);//стартовая позиция Меркурия и т.д. (расстояние от Солнца *10 млн км)

5.79*10 = 57,9 млн км до солнца. открой интернет и проверь эту цифру для Меркурия. Для остальных также. Это все есть в комментариях к коду. 5.79 - это в единицах Юнити. По-умолчанию 1 Unity-единица равна 1 метру.

Цитата DebieCooper ()
2) Можно подробней про то как работают эти методы?

transform.RotateAround
transform.Rotate
transform.position
void Start ()
void Update()

Цитата HPlusDiese ()
3) А можно как-нибудь сделать так, чтобы я менять скорость "игры" и все объекты подчинялись. Например, по дефолту я сделал так что все объекты имеют такое же время обращения вокруг солнца.Год, для земли например. А потом меняя одно значение я ускоряю этот период.

перед стартом public float coeffSpeed;

в Start
coeffSpeed = 100.0f;//теперь можно в инспекторе менять скорость вращения планет, но только перед нажатием кнопки play
periodMercury = coeffSpeed * 87.969f/baseMercuryPeriod;
periodVenus = coeffSpeed * 224.7f/baseMercuryPeriod;
periodEarth = coeffSpeed * 365.26f/baseMercuryPeriod;

если хочется менять скорость по ходу работы приложения, поставь эти четыре строки сразу после Update(){ или просто скопируй

Цитата DebieCooper ()
4) Как мне регулировать скорость вращения вокруг своей оси?)

mercury.transform.Rotate (Vector3.up * coeff * Time.deltaTime);//вращаем Марс вокруг собственной оси
т.е. даже комментарии в коде читать не хотим
Цитата MANMANA ()
private float coeff = 50.0f;//период обращения планет вокруг собственных осей. здесь - один для всех. можно поставить разный

назови это скоростью вращения вокруг собственной оси

Цитата DebieCooper ()
5) Как мне настроить, чтобы меркурий реально вращался вокруг солнца со скоростью: 1 оборот за 88 дней?)

хрена се ты долгожитель... приходи через 2,5 месяца, скажешь - правильно работает или нет...
все планеты вращаются с условными периодами обращения, взятыми из энциклопии (можешь проверить):
Цитата MANMANA ()
periodMercury = 87.969f/baseMercuryPeriod;//=1
periodVenus = 224.7f/baseMercuryPeriod;
periodEarth = 365.26f/baseMercuryPeriod;

в секунды переведи все это сам уж...
если хочешь сделать шкалу времени 1:1, то почитай про Time.deltaTime, тогда тебе станет понятна запись
Цитата DebieCooper ()
mercury.transform.RotateAround(Vector3.zero, Vector3.up, 10 * periodMercury *Time.deltaTime);//вращаем Меркурий вокруг Солнца

10*-ку я поставил, чтобы не ждать пару минут, когда планеты обернутся хотя бы раз вокруг солнца


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Понедельник, 13 Апреля 2015, 17:24
harmoxyneДата: Понедельник, 13 Апреля 2015, 17:30 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Цитата DebieCooper ()
А как мне рассчитать расстояние учитывая правильные пропорции?

А как насчет подучить физику, и взять, да и реализовать законы Кеплера в Юнити. Если есть хоть какие-либо навыки - всё найдешь, что нужно. Я, когда надо было, и не было необходимых навыков, потратил около получаса, и всё было реализовано. В интернете написано более, чем достаточно.
DebieCooperДата: Понедельник, 13 Апреля 2015, 17:35 | Сообщение # 16
частый гость
Сейчас нет на сайте
Спасибо всем за помощь.
П.С. Самое интересное, это то что я учился на ФПМЕ(прикладная математика и информатика) на специальности математик-программист smile Но последние 3 года я вообще не занимался математикой и крайне благополучно все забыл. А теперь резко взялся за все это обратно и мозг начинает уже с непривычки конфликтовать) Как будто первый раз в жизни все это вижу)
QNicolya Не все занимаются этим как вы с 13 лет. Я начал в 17-19 изучать математику и программирование. Вы даже не представляете как это ужасно, когда не привыкаешь к этому с детства) Так что не сравнивайте пожалуйста с собой) Я очень рад за вас.


Сообщение отредактировал DebieCooper - Понедельник, 13 Апреля 2015, 17:46
harmoxyneДата: Понедельник, 13 Апреля 2015, 17:58 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
DebieCooper, я же не говорил о том, что сделал сам.
Заходишь в гугл, находишь пример на ютубе, находишь текстовые ответы, ещё ответы.
Главное - искать.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Движение объектов по орбитам
  • Страница 1 из 1
  • 1
Поиск:

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