获取一个子对象以在Unity中复制父对象的动画

时间:2019-02-22 16:31:18

标签: c# unity3d animation parent-child

我正在尝试对具有多个子组件(衣服)的对象(身体)进行动画处理,这些子组件旨在使用与父对象相同的动画控制器与父对象一起进行动画处理,但是我们使用的代码框架仅设计为只能处理一个动画控制器,而且过于复杂,无法在我们希望完成的时间范围内满足我们的需求。结果是躯干奔跑,但衣服保持静止。

我要使用的快速而肮脏的解决方案是使用脚本读取父对象的动画状态,并告诉子对象复制该状态,但是我不确定该如何处理。有人知道我该怎么做吗?我曾经考虑过使用附加到父对象的脚本或附加到每个子对象的脚本,但是我不确定哪种方法正确。

1 个答案:

答案 0 :(得分:1)

我正在做类似的事情,我有一个父对象,它是游戏中的角色,并且它的衣服,头发等都有很多子对象。每个对象的动画控制器具有相同的命名参数。

我将此脚本附加到“父”对象(字符)上。然后,我调用GetComponent<Animator>().SetInteger(...)而不是在父级上调用GetComponent<AgentAnimator>().SetInteger(...),它处理在父级及其直接子级上设置参数。如果您的父对象有孙子项或更深的子孙,那么您将必须更新此脚本以进一步读取子孙树(或使用可以将AgentAnimator附加到您的子孙上,并使用相同的方案来处理儿童水平。

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.
}