C# 动画组件随机粘贴在帧上

C# 动画组件随机粘贴在帧上,c#,animation,unity3d,gameobject,C#,Animation,Unity3d,Gameobject,编写了一个脚本,用按键触发一个非常快速的动画(24帧)。我想让它感觉像是一个缓慢反冲的脚蹬。我计划用数百个游戏对象自动化这个过程,所以我使用了动画组件,而不是Animator 基本逻辑是1。动画应该以默认速度播放,当它到达终点时,以负半速返回。2.如果动画在后退时再次触发,则应继续前进,如步骤1所示 问题是,动画大约有20%的时间停留在最后一帧上。控制台将其卡住的帧打印为0,但显示最后一帧。它有时也只是跳到0,而不向后设置动画。 我错过了什么愚蠢的事吗 public GameObject go;

编写了一个脚本,用按键触发一个非常快速的动画(24帧)。我想让它感觉像是一个缓慢反冲的脚蹬。我计划用数百个游戏对象自动化这个过程,所以我使用了动画组件,而不是Animator

基本逻辑是1。动画应该以默认速度播放,当它到达终点时,以负半速返回。2.如果动画在后退时再次触发,则应继续前进,如步骤1所示

问题是,动画大约有20%的时间停留在最后一帧上。控制台将其卡住的帧打印为0,但显示最后一帧。它有时也只是跳到0,而不向后设置动画。 我错过了什么愚蠢的事吗

public GameObject go;
private Animation anim;
private AnimationClip clip;
private float animationLength;
private float limit;
private float originalSpeed = 3;
private string name;


void Start(){
    anim = go.GetComponent<Animation>();
    anim.wrapMode = WrapMode.Once;
    anim.playAutomatically = false;
    clip = anim.clip;
    clip.legacy = true;
    name = anim.clip.name;
    animationLength = anim[name].length;
    anim[name].speed = 0;
    anim.Play(name);
}

void Update(){
    if(Input.GetKeyDown("1")){
        trigger();
    }
    animate();
}

void animate(){
    limit = animationLength - (animationLength/24f);
    if(anim[name].time >= limit){
        anim[name].time = limit;
        anim[name].speed = -(originalSpeed/2);
    }
}

void trigger(){
    anim[name].speed = originalSpeed;
    anim.Play(name);
}
公共游戏对象go;
私人动画;
私人动画剪辑;
私有浮动动画长度;
私人浮动限额;
私人浮动原始速度=3;
私有字符串名称;
void Start(){
anim=go.GetComponent();
anim.wrapMode=wrapMode.one;
anim.playAutomatically=false;
clip=anim.clip;
clip.legacy=true;
name=anim.clip.name;
animationLength=anim[name].length;
动画[名称]。速度=0;
动漫游戏(名称);
}
无效更新(){
if(Input.GetKeyDown(“1”)){
触发器();
}
制作动画();
}
void animate(){
极限=动画长度-(动画长度/24f);
如果(动画[名称]。时间>=限制){
动画[名称]。时间=限制;
动画[名称]。速度=-(原始速度/2);
}
}
无效触发器(){
动画[名称]。速度=原始速度;
动漫游戏(名称);
}

您的动画是否在Animator viewer中禁用了“ExitTime”?当你改变它时,有什么改变吗?
WrapMode.Once
是否完全满足您的需要和期望(,请注意关于向后播放的注释)?没有“ExitTime”,因为我使用的是(),而不是()。WrapMode.Once中关于向后行为的注释是我想要的。不幸的是,它在结束时停止或在未播放的情况下将动画弹出到开始。您的动画是否已在Animator viewer中选中“ExitTime”?当你改变它时,有什么改变吗?
WrapMode.Once
是否完全满足您的需要和期望(,请注意关于向后播放的注释)?没有“ExitTime”,因为我使用的是(),而不是()。WrapMode.Once中关于向后行为的注释是我想要的。不幸的是,它会在结尾处停止,或者在没有播放的情况下将动画弹出到开头。