Я делаю нечто похожее, когда у меня есть родительский объект, который является персонажем в моей игре, и у него есть набор дочерних объектов для одежды, волос и т. Д. Контроллеры анимации каждого объекта имеют одинаковые именованные параметры.
У меня есть этот скрипт, прикрепленный к «родительскому» объекту (персонажу).Затем вместо вызова 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.
}