预制件之间的动画重复

6

我在场景中有两个或更多相同的预制体实例。每个实例都有一个动画师,并且每个实例都连接着同样的动画控制器。当我对其中一个进行动画操作时,所有实例都得到了相同的动画效果。你是否知道是什么原因导致这种情况? 我应该为场景中的每个玩家分别创建一个动画控制器吗?如何在C#代码中将不同的动画师分开处理呢?


请发布您正在使用的触发动画的代码。 - dav_i
2
场景中的预制件共享同一个动画控制器的引用。 - Anthony Raimondo
2个回答

1
我会将这个回答添加为一个答案,即使你没有将你的代码作为资源提供。这只是我的猜测。
我制作了一个游戏,它与相同的预制件共享动画师,但如果你只调用需要进行动画处理的GameObject,它不应该调用其他Animator。每次实例化对象时,都会使用不同的Animator,即使Animator文件相同。
为了测试这一点,我建议每次你实例化你的GameObject时,给它命名一个不同的名字。例如。
public GameObject[] myPrefabs; //make sure to add the size in the inspector

myPrefabs[0] = (GameObject)Instantiate(nameofPrefab);
myPrefabs[0].name = "myPrefabs0"; // this is to make sure that name (Clone) is removed;

// Then call the animation.
myPrefabs[0].GetComponent<Animator>().SetTrigger("Attack");

//SetTrigger, SetBool, SetInt. 由于它是一个Animator

我使用List而不是Array,但我认为这是我可以提供的最基本的一个。

预制件的命名并不需要修复您的问题。但是您需要它以便检查是否是正确的GameObject正在接受您的Animator调用。


1
不,您可以为多个预制件使用动画控制器。我不知道您尝试了什么,出了什么错误。如果您提供代码,我可以提供更多帮助。
所有预制件必须拥有自己的Animator组件。然后,这些对象可以使用相同的动画控制器。
例如,
Animator animator;

GameObject prefab;
List<GameObject> prefabs;

prefab = (GameObject)Instantiate(Resources.Load("prefabNameinAssets"));
prefab.AddComponent<Animator>(); // add each prefab its own Animator component

animator = prefab.GetComponent<Animator>();
animator.runtimeAnimatorController = (RuntimeAnimatorController)Instantiate(Resources.Load("animatorControllerNameinAssets"));
//get prefab's Animator Component and set its controller

prefab.name = "prefabName";
prefabs.Add(prefab);

之后,您可以单独使用所有prefab动画控制器。这不会影响其他prefab的AnimatorControllers。

prefabs[0].GetComponent<Animator>().setTrigger("Animation");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接