Animation with parameters
Hi all,
So I'm trying to create animation in Unity(it is not imported animation). It's quite simple animation - I have a cube that I move from (0, 0, 0) to (1,1,1). So I have 2 keyframes. But I want to make my animation use parameters instead of hard coded values.
I found how to make the starting point dynamic and instead of using (0,0,0) it is using the current object position, but I can't find how to change the end animation position (1,1,1) from code to be (x,y,z). So basically my question is - Is there a way to change keyframe parameters from code(e.g. have animation with dynamic parameters). Note that I'm talking about animation parameters not animator parameters.
Regards Pavel
Answer by Baste · Nov 11, 2015 at 05:11 PM
Not really.
Animations are supposed to be read-only assets that's created in the editor (or an external program), and played back in real time. There are ways to edit the keyframes of an animation asset in scripting, but that's editor time scripts, and it won't work during gameplay.
What you want to do, though, is easy. The AnimationCurve class is freely available to use in scripts. If you have it as a public field on a MonoBehaviour, you can edit it through the inspector. You can also create AnimationCurves, add keyframes to them, and evaluate the curve completely from code.
The best way to do what you're trying to do is probably to use a public AnimationCurve, and interpret it's values as percentage towards the goal. A very easy example would be:
public AnimationCurve moveCurve;
public Vector3 target;
private Vector3 startPoint;
void Awake() {
startPoint = transform.position;
}
void Update() {
transform.position = Vector3.Lerp(startPoint, target, moveCurve.Evaluate(Time.time));
}
Your answer
Follow this Question
Related Questions
Corgi Engine - Attack Animation Won't Play From Idle 1 Answer
Why can't I delete animator parameters? 2 Answers
Have Animator ignore parameters, pass Animation state manually? 0 Answers
root motion problem. direction parameter set to 90 on start 0 Answers
The name animator does not exist in the current context... Help? 1 Answer