Пятница, 22 Ноября 2024, 22:47

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Движение к точке по орбите
romeo98Дата: Пятница, 05 Сентября 2014, 17:33 | Сообщение # 1
участник
Сейчас нет на сайте
Здравствуйте!
У меня есть 2D плоскость и есть объект. Я хочу, чтобы объект приближался к точке с одной скоростью и по орбите. Движение по направлению к точке я с начала сделал так:
Код
  void FixedUpdate () {
                 Vector3 dir = (Vector3.zero - transform.position);
                 dir.Normalize();
                 transform.Translate(dir * -gravity);  
         }

точка находиться в координате 0, 0, 0.

Потом я захотел добавить орбиту, попробовал так: добавил пустой объект, сделал основной объект дочерним к пустому и повесил код на пустой объект.

Код
void Update()
         {
                 transform.Rotate(0, 0, realSp * Time.deltaTime);
         }
  


Получившийся объект летает не так, как задумано. Должен летать по орбите, постепенно спускаясь к нулевой точке. Когда он касается коллайдера в нулевой точке должен сработать мой скрипт.

Объясните ошибку. Предполагаю, что тут логическая ошибка. что-то, чему-то мешает...


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender
MANMANAДата: Пятница, 05 Сентября 2014, 23:26 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
smile
поиграться коэффициентами
Стационартная

Код
public class orbit : MonoBehaviour {
  float speed = 60.0f;
  public float orbite = 10.0f;
  void Update () {
   transform.Translate(new Vector3(0, 0, 1) * Time.deltaTime * speed);
   transform.Rotate (Vector3.right * orbite * Time.deltaTime);
  }
}

ускоряющееся вращение по орбите с уменьшением радиуса орбиты до определенного значения, зависящего от скорости и уменьшения вектора направления.
Код
public class orbit : MonoBehaviour {
  float speed = 60.0f;
  public float orbite = 0.0f;
  void Update () {
   transform.Translate(new Vector3(0, 0, 1) * Time.deltaTime * speed);
   transform.Rotate (Vector3.right * orbite * Time.deltaTime);
   orbite -= 0.1f;
  }
}

интересные загогулины получаются, если вращать в разных плоскостях, + и - орбиты также интересности кажут smile


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

Последнее:

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

Как запатентовать, защитить техническое решение, игру, идею
romeo98Дата: Пятница, 05 Сентября 2014, 23:56 | Сообщение # 3
участник
Сейчас нет на сайте
Мне подсказали функцию, которую я как-то пропустил (transform.RotateAround)... я сократил код и вытащил объект из дочерних.

Код

    void FixedUpdate () {
     Vector3 dir = transform.position;
     dir.Normalize();
     transform.Translate(dir * -gravity);

     transform.RotateAround(Vector3.zero, Vector3.forward, orbiteSp * Time.deltaTime);
    }

Единственный код, который отвечает за движение объекта. Итог вот такой:


(синий цвет- орбита)


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender


Сообщение отредактировал romeo98 - Суббота, 06 Сентября 2014, 00:01
MANMANAДата: Суббота, 06 Сентября 2014, 00:19 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
transform.Translate (Vector3.left * 0.1f*Time.deltaTime); //вместо Vector3.left может потребоваться другая ось.

данный пример годен для следующей ориентации объекта
http://s1.uploadpics.ru/images/byytoK9Cz.jpg


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

Последнее:

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

Как запатентовать, защитить техническое решение, игру, идею
  • Страница 1 из 1
  • 1
Поиск:

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