#unity3d
#unity3d
Вопрос:
создал сборку для door и добавил сборные двери в сцену. У этой сборных дверей есть аниматор. Проблема в том, что когда я пытаюсь изменить положение аниматора x, y, z на второй двери в сцене, это меняет первую дверь.
Я попытался дублировать двери и изменить положение x y z, но это изменило аниматор для первой двери.
У меня просто есть скрипт, который воспроизводит аниматор.
Ожидаемым результатом должно быть то, что я могу перетаскивать двери по мере необходимости, не создавая отдельных аниматоров для каждой двери. Похоже, мне нужно создавать аниматоров для каждой двери, и это, вероятно, потребует от меня создания новых сценариев для каждой двери. Это кажется неудобным, поскольку я должен иметь возможность добавлять двери и просто изменять положение x y z в аниматоре.
Комментарии:
1. Все работают вместе? — так в чем проблема?
Ответ №1:
Проблема в том, что их Animator
компонент использует тот же AnimatorController
ресурс, который использует определенные AnimationClip
ссылки на ресурсы для своих состояний.
Я не знаю, есть ли более простой способ для достижения, но я бы сделал следующее:
- Для того, что вы хотите, вам нужно будет скопировать
AnimatorController
ресурс (CTRL D), а такжеAnimationClip
ресурс, который вы хотите изменить. - Затем в клонированном
AnimatorController
щелкните соответствующее состояние, которое вы хотите изменить, и в инспекторе укажите соответствующее клонированноеAnimationClip
. - Теперь у вас есть копия с
AnimatorController
использованием другогоAnimationClip
, но с теми же состояниями, традициями и т. Д. таким образом, вы можете редактировать как анимации, так и контроллеры по отдельности. - наконец, в
Animator
компоненте ссылаются на соответствующиеAnimatorController
для каждого сборного.
Оставшаяся проблема, возможно, заключается в том, что в будущем, если вы измените состояния, переходы и особенно параметры, вам придется делать это в обоих AnimatorController
активах по отдельности.
Комментарии:
1. Я понимаю. Вау, я просто не могу поверить, что что-то настолько распространенное не так просто исправить. Я также подумал, что в моем сценарии имя аниматора должно совпадать с именем игрового объекта, а затем мне просто нужно создать аниматора для каждой двери, аниматор будет похож на doorOpendoor1 doorOpendoor2 и т. Д. Объединяя имена, у меня не будет проблем с конфликтующими аниматорами. Что вы думаете?
2. Извините, я не понял вопроса. Как уже было сказано, основными элементами являются не the
Animator
, аAnimatorController
s иAnimationClip
s. Да, я обычно вызываю их в соответствии с именем объектов I, чтобы не путать их и упаковывать все конкретные анимационные клипы в одну равную папку с именем 😉 однако вы знаете, что вам это нужно только в том случае, если вы хотите другого поведения для этих дверей. Если основная причина, по которой вы меняете их все, на самом деле — это просто другое положение и поворот в мире, скорее дайте им родительский объект и расположите / поверните его вместо этого 😉
Ответ №2:
Возможно, это не из-за аниматора, а из-за специфического поведения анимации в Unity. Анимация анимирует свойство преобразования в соответствии с родительским, насколько я понимаю. Итак, первый родительский элемент вашего сборного элемента захвачен, и его свойство transform используется для анимации. Но я не совсем уверен в этом объяснении — фактическое поведение описано в исходном коде Unity. Общее решение для этого, которое я нашел, — создать родительский элемент или контейнер внутри сборного объекта вашего объекта. Я не знаю, почему это работает, но это работает. Возможно, потому, что родительский элемент вашего анимированного объекта теперь всегда один и тот же.
Parent может быть просто пустым игровым объектом. Итак, вы создаете сборную дверь, помещаете в нее другой пустой игровой объект, делаете свою дверь дочерней по отношению к этому контейнеру, устанавливаете 0 для всех координат вашей двери в соответствии с контейнером и для самого контейнера. Теперь вы можете добавить компонент animator к своему объекту, который вы хотите анимировать (не контейнер), и анимировать его внутри сборных сцен. После этого вы можете разместить копии этого сборного (контейнер ваш анимированный объект внутри) в любом месте вашей игровой сцены — все анимации копий будут выполняться независимо.