Получить дочерний объект для копирования анимации родителя в Unity - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь анимировать объект (тело) с несколькими дочерними компонентами (одеждой), которые предназначены для анимации вместе с родителем, используя идентичные контроллеры анимации для родителя, но используемая нами структура кода предназначена только дляобрабатывать один контроллер анимации и он слишком сложен, чтобы перерабатывать его в соответствии с нашими потребностями в сроки, которые мы хотим сделать.В результате получается туловище, но одежда остается статичной.

Быстрое и грязное решение, которое я пытаюсь использовать, - это использовать скрипт, чтобы прочитать состояние анимации родителя и сказать дочерним объектам, чтобы скопировать это состояние., но я не знаю, как это сделать.Кто-нибудь знает, как мне это сделать?Я рассмотрел либо использование сценария, прикрепленного к родительскому объекту, либо сценария, прикрепленного к каждому дочернему объекту, но я не уверен, каков правильный подход.

1 Ответ

0 голосов
/ 22 февраля 2019

Я делаю нечто похожее, когда у меня есть родительский объект, который является персонажем в моей игре, и у него есть набор дочерних объектов для одежды, волос и т. Д. Контроллеры анимации каждого объекта имеют одинаковые именованные параметры.

У меня есть этот скрипт, прикрепленный к «родительскому» объекту (персонажу).Затем вместо вызова GetComponent<Animator>().SetInteger(...) для родителя я вызываю GetComponent<AgentAnimator>().SetInteger(...), и это обрабатывает установку параметров для родителя и его прямых потомков.Если у вашего родительского объекта есть внуки или более глубокие потомки, вам придется обновить этот сценарий, чтобы читать дальше по дереву потомков (или использовать может присоединить AgentAnimator s к вашим детям, и использовать ту же схему для работы с любым уровнемдети).

public class AgentAnimator : MonoBehaviour
{
    public void SetInteger(string id, int value)
    {
        Animator animator = GetComponent<Animator>();
        animator.SetInteger(id, value);
        var childComponents = GetComponentsInChildren<Animator>();
        foreach (var child in childComponents)
        {
           child.SetInteger(id, value);
        }
    }

    // Do the same for SetBool, SetTrigger, etc.
}
...