Я думаю, что проблема заключается в вашей иерархии. Ваш Images
игровой объект (родитель вашего DisplayImage
) имеет шкалу (1.88,1,1)
. Попытка повернуть дочерние объекты, чьи родительские объекты имеют неравномерный масштаб в Unity, дает неожиданные результаты. Попробуйте сбросить масштаб вашего объекта Images
до (1,1,1)
и посмотрите, поможет ли это.
Такое поведение возникает из-за характера отношений «родитель / ребенок». Система координат ребенка относительно его родителей. Мы можем думать об этом как о родителе, определяющем систему координат для наших детей. Это то, что мы называем локальное пространство . Таким образом, когда мы выполняем какие-либо линейные преобразования для родителя, мы как бы выполняем их для всей родительской системы координат, которую наши дети используют для определения своей ориентации. Таким образом, перевод родителя переместит все его потомки вместе с ним, потому что все наше локальное координатное пространство переместилось вместе с родителем. Обратите внимание, что у наших детей все еще будет тот же localPosition
, но их глобальный position
изменится.
Та же логика применима к масштабированию и повороту. Вращение родителя по существу вращает все координатное пространство, которое наш ребенок использует вокруг центральной точки родителя (которая будет точкой (0,0,0)
в локальном пространстве). Таким образом, все дети будут вращаться, как если бы они были расширением родительского объекта.
В нашей ситуации мы масштабировали нашего родителя, таким образом масштабируя всю систему координат, которую мы используем для определения нашего дочернего объекта. Это означает, что все, что использует координатное пространство родителя, также будет масштабировано в соответствии с масштабом родителя . В нашей ситуации родитель был масштабирован на (1.88,1,1)
. Таким образом, все, что привязано к родителю, было также масштабировано вдоль оси X родителя на 1,88 , что привело к странному эффекту, замеченному на ваших скриншотах. Несмотря на вращение нашего дочернего объекта, он все еще масштабируется вдоль оси X родителя.
( Ссылка на официальную документацию по этому вопросу.)
Решением этого является применение ваших линейных преобразований как можно глубже в иерархии. Здесь вместо масштабирования родителя масштабируйте дочерний элемент. Если родительский объект необходимо масштабировать или его масштаб меняется на лету, другим решением было бы удалить дочерний элемент из иерархии родительский / дочерний и управлять его преобразованием на основе преобразования старого родительского объекта в сценарии. В этом случае вы можете установить положение и поворот несвязанного потомка в положение и поворот родителя, но игнорировать масштаб.