- Home /
Animation error at state speed change
I have a simple empty game object with the "Clamp Forever" wrap mode animation and a script to control the speed which causes an error.
The code to reproduce:
void Update () {
if (Input.GetKeyDown(KeyCode.B)) {
foreach (AnimationState state in animation) {
state.speed = 1.0f;
}
animation.Play();
}
if (Input.GetKeyUp(KeyCode.B)) {
foreach (AnimationState state in animation) {
state.speed = -1.0f;
}
animation.Play();
}
}
The animation error message:
oldWrappedTime < newWrappedTime
Assert in file: C:/BuildAgent/work/a0f11f3559d72c6d/Runtime/AnimationState.cpp at line : 259
Answer by koichisenada · Oct 14, 2012 at 04:22 PM
I have found a solution. But please explain the internals or a better solution if you can. Meanwhile, I use the following script code with calling the lower methods as animation events.
void Update () {
if (Input.GetKeyDown(KeyCode.B)) {
foreach (AnimationState state in animation) {
state.speed = 1;
}
animation.Play(PlayMode.StopSameLayer);
}
if (Input.GetKeyUp(KeyCode.B)) {
foreach (AnimationState state in animation) {
state.speed = -1;
}
animation.Play(PlayMode.StopSameLayer);
}
}
void OnAnimationBeginningReached() {
foreach (AnimationState state in animation) {
if (state.speed==-1) { state.speed = 0; }
}
}
void OnAnimationEndingReached() {
foreach (AnimationState state in animation) {
if (state.speed==1) { state.speed = 0; }
}
}
the whole animation state, etc, situation is a fiasco!
i think you basically have to do what you do ... loop over all the animation "states"
if you very simply want to set a thing to be in "a certain position" that seems to be the only way. the whole thing is annoying!
Actually, I need the object not just positioned in a certain position, but follow a smooth progression of chaning the position and rotation as designed by the animation clip. As you can see from my code, I need it to play the animation forward while the key is pressed and then play it back once the key is released.
right - yeah it's the same sort of thing. one always has to do this annoying loop through all the "states"
FWIW I believe there is no alternative. funnily enough I asked someone at Unity about this, and they told me to do jus that (was about a yr ago)
Sure thing the nasty loop itself is weird enough. But why does that strange error appear when I don't set the speed of states to zero before applying a reverse value?
Your answer

Follow this Question
Related Questions
Animation Sometimes Shows Error dt >= 0 0 Answers
'speed' is not a member of 'Object'. when pausing animation 0 Answers
Mecanim Animation Gets Stuck 0 Answers
AnimationEvent has no receiver, but there is no AnimationEvent 1 Answer
install Animation Riggit 0 Answers