Вторник, 10 Декабря 2019, 11:15

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Изменение поворота объекта при извлечении из группы (Проблема с ориентацией объекта в пространстве)
Изменение поворота объекта при извлечении из группы
KUPRUMДата: Четверг, 08 Августа 2019, 12:21 | Сообщение # 1
уже был
Сейчас нет на сайте
Доброго времени суток, на 3D сцене есть ряд объектов, которые активно перемещаются, при этом одни могут стать дочерними по отношению к другим. Столкнулся с проблемой связанной с применением Quaternion. Объект, переставая быть дочерним изменяет свою ориентацию в пространстве(полагаю это происходит из-за изменения системы координат с локальных на глобальные и наоборот). Тоже самое происходит при включении его обратно в группу. Вращение объектов происходит через Quaternion.Euler. Кто-то сталкивался с подобным?

Изменение transform.localRotation на transform.rotation не подходит так как родительский объект также активно перемещается в пространстве.

Код упрощен C#

Код

void Update()
{
       float y += (Input.GetAxisRaw("Mouse X"));
       transform.localRotation = Quaternion.Euler(0, y, 0);
}

void OnTriggerStay(Collider other)
{
       GameObject vr = other.gameObject;
       if (transform.parent==false)
           if (vr.GetComponent<OnTrigger>())
                transform.parent = vr .transform;
}

void OnTriggerExit(Collider other)
{
        GameObject vr = other.gameObject;
        if (vr.GetComponent<OnTrigger>())
            transform.parent = null;
}
drcrackДата: Четверг, 08 Августа 2019, 12:31 | Сообщение # 2
старожил
Сейчас нет на сайте
ну проблема понятна — у тебя в Update
Код
transform.localRotation = Quaternion.Euler(0, y, 0);

т.е. ты задаешь вращение относительно родителя, а он постоянно меняется
если ты хочешь сохранять вращение после вытаскивания из группы и далее крутить его по Y относительно того что было, тебе нужно сделать как-то так:

Код

Quaternion rotation;

void Update()
{
      float y += (Input.GetAxisRaw("Mouse X"));
    
   if(transform.parent) {    
    transform.localRotation = Quaternion.Euler(0, y, 0);
   } else {
    transform.rotation = rotation * Quaternion.Euler(0, y, 0);
   }
}

void OnTriggerStay(Collider other)
{
       GameObject vr = other.gameObject;
       if (transform.parent==false)
           if (vr.GetComponent<OnTrigger>())
                transform.parent = vr .transform;
}

void OnTriggerExit(Collider other)
{
        GameObject vr = other.gameObject;
        if (vr.GetComponent<OnTrigger>()) {
      rotation = transform.parent.rotation;
            transform.parent = null;
    }
}
KUPRUMДата: Четверг, 08 Августа 2019, 12:44 | Сообщение # 3
уже был
Сейчас нет на сайте
Хах как всегда самый простой вариант просмотрел, спасибо!)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Изменение поворота объекта при извлечении из группы (Проблема с ориентацией объекта в пространстве)
  • Страница 1 из 1
  • 1
Поиск:

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