deadsputnik
@deadsputnik
около-Gamedev

Можно ли изменять Transform объекта, не меняя Transform его дочернего объекта?

При изменении Position и Rotation объекта, все его дочерние объекты меняют эти параметры вместе с нми. Можно ли как то заставить их игнорировать эти команды или вовсе заморозить на некоторый период времени (или навсегда)

Пытаясь это провернуть я просто заставил дочерний объект двигаться и поворачиваться зеркально родителю. Но итог меня не удовлетворил, т.к. дочерний объект в итоге немного смещается вниз.

el.transform.position += new Vector3(0.05f, 0, 0);
                el.transform.GetChild(0).transform.position += new Vector3(-0.05f, 0, 0);
                el.transform.rotation = Quaternion.Euler(0, 0, 10);
                el.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, 0);

                yield return new WaitForSeconds(0.02f);
                el.transform.position += new Vector3(-0.05f, 0, 0);
                el.transform.GetChild(0).transform.position += new Vector3(0.05f, 0, 0);
                el.transform.rotation = Quaternion.Euler(0, 0, -10);
                el.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, 0);

                yield return new WaitForSeconds(0.02f);
                el.transform.position += new Vector3(0.05f, 0, 0);
                el.transform.GetChild(0).transform.position += new Vector3(-0.05f, 0, 0);
                el.transform.rotation = Quaternion.Euler(0, 0, 10);
                el.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, 0);

                yield return new WaitForSeconds(0.02f);
                el.transform.position += new Vector3(-0.05f, 0, 0);
                el.transform.GetChild(0).transform.position += new Vector3(0.05f, 0, 0);
                el.transform.rotation = Quaternion.Euler(0, 0, 0);
                el.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, 0);
  • Вопрос задан
  • 1002 просмотра
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos Куратор тега Unity
Если вам это нужно делать - то у вас проблемы с иерархией.
А вообще - ЛОКАЛЬНЫЕ координаты детей не меняются. А то что он глобально переместился - ну так коммон, для того иерархия и нужна )

А по факту - или делаете как сказал freeExec, или к дочернему применяете обратную трансформацию (движение/поворот/скейл в другую сторону на ту же величину).
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
1) Запоминаешь мировые координаты дочерних объектов;
2) Двигаешь родителя
3) Выставляешь дочерним объектам запомненные координаты.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы