C# 从不同的AssetBundle加载预制和动画剪辑

C# 从不同的AssetBundle加载预制和动画剪辑,c#,unity3d,assetbundle,C#,Unity3d,Assetbundle,我试图从一个AssetBundle加载Prefact,并从另一个AssetBundle加载相应的AnimationClips。 到目前为止,从AssetBundle和实例化加载预置是成功的 AssetBundle assetBundle = AssetBundle.LoadFromFile(path); if (assetBundle == null) { return; } GameObject prefab = assetBundle.LoadAsset<GameObjec

我试图从一个AssetBundle加载Prefact,并从另一个AssetBundle加载相应的AnimationClips。 到目前为止,从AssetBundle和实例化加载预置是成功的

AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
if (assetBundle == null) {
     return;
}

GameObject prefab = assetBundle.LoadAsset<GameObject>(name);
Instantiate(prefab, targetTransform.position, targetTransform.rotation);
assetBundle.Unload(false);
AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
if (assetBundle == null) {
     return;
}

List<AnimationClip> animationClips = new List<AnimationClip>();
foreach (string name in names) {
     AnimationClip animationClip = assetBundle.LoadAsset<AnimationClip>(name);
     if (animationClip != null) {
        animationClips.Add(animationClip);
     }
}
assetBundle.Unload(false);
AssetBundle AssetBundle=AssetBundle.LoadFromFile(路径);
if(assetBundle==null){
返回;
}
GameObject预置=assetBundle.LoadAsset(名称);
实例化(预置、targetTransform.position、targetTransform.rotation);
资产绑定卸载(假);
加载AnimationClips(遗留动画)并将其添加到上述实例化的游戏对象中也是成功的

AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
if (assetBundle == null) {
     return;
}

GameObject prefab = assetBundle.LoadAsset<GameObject>(name);
Instantiate(prefab, targetTransform.position, targetTransform.rotation);
assetBundle.Unload(false);
AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
if (assetBundle == null) {
     return;
}

List<AnimationClip> animationClips = new List<AnimationClip>();
foreach (string name in names) {
     AnimationClip animationClip = assetBundle.LoadAsset<AnimationClip>(name);
     if (animationClip != null) {
        animationClips.Add(animationClip);
     }
}
assetBundle.Unload(false);
AssetBundle AssetBundle=AssetBundle.LoadFromFile(路径);
if(assetBundle==null){
返回;
}
List animationClips=新建列表();
foreach(名称中的字符串名称){
AnimationClip AnimationClip=assetBundle.LoadAsset(名称);
如果(animationClip!=null){
添加(animationClip);
}
}
资产绑定卸载(假);
当我尝试播放动画时,它不起作用,但我没有得到任何错误

Animation animation = prefab.GetComponent<Animation>();

foreach (AnimationClip animationClip in animationClips) {
      string clipName = animationClip.name;
      animation.AddClip(animationClip, clipName);
}
foreach (AnimationClip animationClip in animationClips) {
      string clipName = animationClip.name;
      animation.PlayQueued(clipName, QueueMode.CompleteOthers);
}
Animation-Animation=prefact.GetComponent();
foreach(AnimationClip中的AnimationClip AnimationClip){
字符串clipName=animationClip.name;
AddClip(animationClip,clipName);
}
foreach(AnimationClip中的AnimationClip AnimationClip){
字符串clipName=animationClip.name;
PlayQueued(clipName,QueueMode.CompleteOthers);
}

我是否遗漏了任何内容或应该如何做?

问题是您试图在预置而不是实例化对象上播放动画:

GameObject prefab = assetBundle.LoadAsset<GameObject>(name);
//You instantiated object but did nothing with it. What's the point of the instantiation?
Instantiate(prefab, targetTransform.position, targetTransform.rotation);
//Don't do this. The Animation is attached to the prefab
Animation animation = prefab.GetComponent<Animation>();

现在,你可以玩了。

预制什么?连接了动画组件的网格?@Programmer Yes Game Object网格和动画组件。