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