Unity 3d show specific frame of animation - animation

I'm trying new unity 3d options for 2d games. I'm trying to create background that changes depending on actions i made. So if i press button one i get sprite one as background and if two i get sprite two. Since I have 32 options, I figure out the best way would be to have an Animator, that changes frame depending on button click. So i created animator and animation. But the problem is I can't set time to where to stop animation to show selected frame.
I'm trying like that:
Animator ani=background.GetComponent<Animator>();
ani.animation["field_back_anim"].time=0.5f;
ani.speed=0;
But it fails at second line with that error:
MissingComponentException: There is no 'Animation' attached to the "background" game object, but a script is trying to access it.
You probably need to add a Animation to the game object "background". Or your script needs to check if the component is attached before using it.
However if I do no code the animation just plays trough all 16 frames. So i gues there is animation after all.
On the background GameObject I have 2 components first is sprite renderer and second is animator. When I open animator in Animator view i see there green rectangle saying Any state and yellow one with "field_back_anim". I don't get what i'm doing wrong.
I will also except any other solution that does the following.
Thanks!

The animator component is used to control transition between many animation clips. If you're going to playing an animation clip on a gameobject, an animation component is proper, not the animator. Remove the animator and add an animation component to your background gameobject in the inspector. If you set animation property to field_back_anim, your gameobject will animate well. Manipulation codes should be changed like below.
Animation ani = background.GetComponent<Animation>();
ani["field_back_anim"].time = 0.5f;
ani["field_back_anim"].speed = 0;

Related

Unity 2D animation seems blocked

I have an animation in Unity, its 2D, made from Sprites.
My animation is blocked, I mean, I can't add a new sprite, click play button, or add a new Property.
In order to animate an object in Unity you have to have a valid object selected, that is to say, the object can be animated.
This is typically a game object that is selected in the hierarchy.
Without this, how does the animation window know what it can and can't animate? That is the way that properties are animated in Unity, it needs to know what it is supposed to be animating, the valid object tells it what can be animated. Without this knowledge, the animation window will lock down certain features, adding keys and playing the animation.
In your case, select the game object that you want to have animated and, if you have a valid animator controller in place, the animation window will set itself up with all the necessary bits and pieces, namely the animation clips. Then you can animate to your hearts content.
Here's the animation window reference:
https://docs.unity3d.com/Manual/animeditor-UsingAnimationEditor.html
Hopefully this answers your question.

Unity - animation moves game object away from where it is spawned?

Ok, this is frustrating but Ive created an animation loop on a prefab however after the prefab is spawned the animation (which is changes in position/rotation) runs the animation (thus moving the prefab) far away from where the prefab is spawned.
For example if my prefab is spawned at the origin, because of where I placed the prefab when I animated it, it animates in THAT place.
I need my prefab to run the animation but in the PLACE where it was spawned, not where I animated the original prefab. How can I fix this? What am I doing wrong?
I animated using Unity's animator.
This is an common mistake in unity animation.
It's the case when you have to animate the position and at the same time change the position from the code.
In this case the simplest workaround would be to move your visuals to a child game object and animate the position of that object. Now you can change the position of the "parent" game object from code and still have the additive animation on the "child" game object.
Uncheck "Apply Root Motion" in the animator. This will prevent the animator from moving the object. The object will then move using only your code.

Unity3d Updating position with animation simultaneously

I have an animation for humanoid models to simulate climbing. I have been looking for a way to stimulate this animation when the model comes next to the window. I used the triggers to determine where the model is and it worked. However, when I execute the animation, the position of the model is not being updated according to the animation. I am using offmesh links and nav mesh agent and I disable nav mesh agent when the model triggers. How can I use the animation and provide the update simultaneously?
Animation Properties
Thanks in advance.
I don't think the animation should take care of the movement. You should control that somewhere else. You could make the animation climb from y = 0 to 5 but then it won't work if your ladder is at y = 3.
You'd better have a method that is called from the animation using AnimationEvent so that when you trigger the animation, it also triggers a movement of the object upwards/downwards regardless of the current position of the object. It would simply use Translate and disabled input until the animation ends.

Unity Image Component for 2D Animation

I'm developing a 2D game in Unity (Version 5.1.2) which has an animation.
The animation is generated by flipping through the sprites in the sprite sheet.
My problem is that the animation is playing as it should in the "Scene View" but not in "Game View".
I normally create animations by using the sprite editor and then drag & drop all the sprites on the screen (Scene View).
It creates a Sprite Renderer to switch the sprites but I would like the Image Component to flip through the sprites. It seems like only sprites in the Image Component is being displayed in the "Game View".
Is there any way I can get some assistance on this please.
Its really strange that you are only seeing that in your Scene View. If the animation is your default animation? Otherwise, make sure that you are sending the right parameters to your animator. A good way to test it is opening your Animator windows, checking all transitions, and manually filling the parameters to see how it works wile the game is running. Also, check if the transitions between animations has exit times and transition durations, and disable them.

Unity Animation not working on different scene

I'm working on a menu scene where the options come down from top, so I tried to use Unity simple Animator. The problem is the animation won't work. The weird part is, when I tried the same thing on my game scene the animation works.
-I've checked that the animation is attached to the object
-Culling type is Always Animate
-I've also added a script and tried to force the animation with no results.
Why doesn't the animation not working anything other than the main scene? Do I need to trigger something for it to work?
Things you could check:
Make sure you are using the same kind of component in both scenes. Animator is different from Animation.
If you have an Animator component make sure you have an the right Animation Controller attached to it.
If you have an Animation component make sure that the Animation field is set and holds your animation file and Animations is set too and holds the list of possible animations of your (UI) object.
Even though they have the same extension, .anim files created when an Animation component is attached are different from .anim files created when an Animator component is attached so if you try to play an Animator .anim it won't play with an Animation component.
Is your Animation set to play automatically? If not, are you giving the animation.Play() command somewhere in your code?

Resources