C# Unity:使用代码生成的AnimationClip不播放,手动创建的AnimationClip不播放

C# Unity:使用代码生成的AnimationClip不播放,手动创建的AnimationClip不播放,c#,animation,unity3d,unity5,C#,Animation,Unity3d,Unity5,我正在Unity进行一个增强现实项目,用户可以在手机上看到一个动画精灵,将相机指向某个特定的图像 精灵将由一位比利时漫画艺术家创作,将相当长。为了让我的生活更轻松,我想创建一个编辑器脚本,从Resources/Sprite文件夹中获取所有精灵并创建一个AnimationClip Sprite[] sprites = Resources.LoadAll<Sprite>("sprite"); AnimationClip animClip = new AnimationCl

我正在Unity进行一个增强现实项目,用户可以在手机上看到一个动画精灵,将相机指向某个特定的图像

精灵将由一位比利时漫画艺术家创作,将相当长。为了让我的生活更轻松,我想创建一个编辑器脚本,从Resources/Sprite文件夹中获取所有精灵并创建一个AnimationClip

    Sprite[] sprites = Resources.LoadAll<Sprite>("sprite");
    AnimationClip animClip = new AnimationClip();
    animClip.frameRate = 25; // fps


    EditorCurveBinding spriteBinding = new EditorCurveBinding();
    spriteBinding.type = typeof(SpriteRenderer);
    spriteBinding.path = "";
    spriteBinding.propertyName = "m_Sprite";

    ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];
    for (int i = 0; i < (sprites.Length); i++)
    {
        spriteKeyFrames[i] = new ObjectReferenceKeyframe();
        spriteKeyFrames[i].time = i / animClip.frameRate;
        spriteKeyFrames[i].value = sprites[i];
    }
    AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);

    AnimationClipSettings animClipSett = new AnimationClipSettings();
    animClipSett.loopTime = true;

    AnimationUtility.SetAnimationClipSettings(animClip, animClipSett);

    AssetDatabase.CreateAsset(animClip, "assets/generated.anim");
    AssetDatabase.SaveAssets();
    AssetDatabase.Refresh();
Sprite[]sprites=Resources.LoadAll(“Sprite”);
AnimationClip animClip=新的AnimationClip();
animClip.frameRate=25;//fps
EditorCurveBinding spriteBinding=新建EditorCurveBinding();
spriteBinding.type=类型(喷洒器);
spriteBinding.path=“”;
spriteBinding.propertyName=“m_Sprite”;
ObjectReferenceKeyframes[]spriteKeyFrames=新的ObjectReferenceKeyframes[sprites.Length];
对于(int i=0;i<(sprites.Length);i++)
{
spriteKeyFrames[i]=新对象引用关键帧();
spriteKeyFrames[i].time=i/animClip.frameRate;
spriteKeyFrames[i].value=sprites[i];
}
SetObjectReferenceCurve(动画剪辑、spriteBinding、spriteKeyFrames);
AnimationClipSettings animClipSett=新的AnimationClipSettings();
animClipSett.loopTime=true;
设置animationclipsettings(animClip,animClipSett);
AssetDatabase.CreateAsset(animClip,“assets/generated.anim”);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
这样做可以创建AnimationClip,但在“动画”面板中使用它时,不会发生任何事情

我手动制作了同样的动画,看看这是否可行

“动画”面板中的蓝色条会移动

显示生成的AnimationClip的Animator面板:

我发现唯一值得注意的区别(除了其中一个正在播放,另一个没有)是,在尝试运行动画后,生成的剪辑的长度更改为0

精灵对象和检查器:

半天来,我一直在努力寻找我做错了什么,一步也没有靠近

我要感谢提前回答这个问题的人

您好


Maethorian

嗨,Maethorian!还建议将代码作为文本插入,并使用问题编辑器设置其格式。请编辑您的问题。感谢您的提示:)更改
spriteKeyFrames[i].time=i/animClip.frameRate
to
spriteKeyFrames[i].time=i
同样的问题,这会不会使动画长度太长?你的答案不能回答这个问题。这是设置精灵动画的另一种方法,但它与您的问题(创建animationclip)无关。