我在一个场景中得到了两个或更多的相同预制件的实例。它们中的每一个都有一个动画师,并且每个人都有相同的动画师控制器连接到它。当我制作其中一个动画时,所有的动画效果都是一样的。到底发生了什么,有什么线索吗?我应该为现场的每个玩家设置一个单独的动画师控制器吗?如何在C#中将动画师彼此分开?
发布于 2015-03-29 13:01:12
即使你没有把你的代码作为资源,我也会添加这个作为答案。这就是我的赌注。
我已经做了一个游戏,也共享动画与相同的预制,但如果你只是调用需要动画的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");
//设置触发器,SetBool,SetInt。因为它是一个动画师
我使用List而不是Array,但我认为这是我能给出的最基本的一个。
预制件的命名不是解决问题所必需的。但是您需要它,这样您就可以检查它是否是正在调用Animator的正确GameObject
发布于 2015-03-29 17:25:55
不,你可以使用一个动画师控制器来处理几个预制件。我不知道你尝试了什么,你的错误是什么。如果你把你的代码,我可以提供更多的帮助。
所有的预制件都必须有自己的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);
在此之后,您可以使用所有预制动画控制器单独。它不会影响其他预制件AnimatorControllers。
prefabs[0].GetComponent<Animator>().setTrigger("Animation");
https://stackoverflow.com/questions/28987002
复制相似问题