How would I play an animation when my object is moved?

I’ve tried several solutions, and while most of them didn’t work at all, some of them did, but because it was in the update function and the object was still moving the animation would repeat before it ended. Here are some of my attempts:

function Update () {
if (rigidbody.velocity.magnitude == 0){
         animation.Play("Idle 1");
     }
     else if (rigidbody.velocity.magnitude >= 1) {
     animation.Play("Fly 1");
     }
}

function Update () {


curPos = transform.Position;
 lastpos = position;
 if(curPos == lastPos) {
     print("Not moving");
     target.animation.Play("Idle 1");
 }
 else {
 target.animation.Play("Fly 1");
 }
 lastPos = curPos;

}
var lastPosition : Vector3;

var myTransform : Transform;

var isMoving : boolean;

 

function Start()

{

     myTransform = transform;

     lastPosition = myTransform.position;

     isMoving = false;

}

 

function Update()

{
var target = GameObject.FindGameObjectWithTag("Player");
     if ( myTransform.position != lastPosition ){

          isMoving = true;
}
     else {

          isMoving = false;
     lastPosition = myTransform.position;
}

if (isMoving == true){
target.animation.Play("Fly 1");
}
else {
target.animation.Play("Idle 1");
}
}

Its pretty confusing and none of these really worked, so any help would be greatly appreciated, thanks.

Create your animation with the entire thing you want to animate as the child(ren) of another game object. That way, you can move the root game object, and the animation is entirely relative to it. If you don’t have a parent to what you’re animating, it does the animation relative to the current position in world space - not what you want.