- Home /
 
Animation = Trasnslate Speed
Hello everyone. I'm a Unity n00b and I'm trying to perform a task that sounds really simple but I can't for the life of me figure out how to make it work. I'm making a 2D game where my player, a horse, just stays in one position of the screen and I make the environment move towards the left so it looks like it's scrolling. I applied the following script to a platform which works just fine:
 var HorseSpeed : float = 10.0;
     
     function Start () {
     
     }
     
     function Update () {
         transform.Translate(-HorseSpeed * Time.deltaTime, 0, 0); 
     }
 
               But I want to change the float of HorseSpeed depending on the animation that it's doing (e.g. walk, run, etc.). So I thought to make an array and made this script:
 var HorseSpeed : float[];
             
     function Start () {
             //varied speeds are in ThirdPersonCharacterControl script
         HorseSpeed[0] = walkSpeed;
         HorseSpeed[1] = trotSpeed;
         HorseSpeed[2] = runSpeed;
     
     }
     
     function Update () {
         transform.Translate(-HorseSpeed * Time.deltaTime, 0, 0); 
     }
 
               Then I get error messages saying that my speeds are unknown identifiers and that Operator '-' cannot be used with an expression of type 'float[]'. So I went to adjust the code and came up with this:
 var HorseSpeed : float[];
     
     var walkSpeed;
     var trotSpeed;
     var runSpeed;
     
     function Start () {
     
         HorseSpeed[0] = walkSpeed;
         HorseSpeed[1] = trotSpeed;
         HorseSpeed[2] = runSpeed;
     
     }
     
     function Update () {
         transform.Translate(HorseSpeed * Time.deltaTime, 0, 0); 
     }
 
 
               And I get this error message: No appropriate version of 'UnityEngine.Transform.Translate' for the argument list '(System.Array, int, int)' was found.
What am I doing wrong?
Answer by valyard · Nov 09, 2012 at 11:35 PM
HorseSpeed is an array. You need to select an element in it like this:
 transform.Translate(HorseSpeed[0] * Time.deltaTime, 0, 0);
 
               If you want to select speed depending on animation type you would write something like this
 var speed = 0;
 if (animation.IsPlaying("walk")) {
     speed = HorseSpeed[0];
 } else if (animation.IsPlaying("trot")) {
     speed = HorseSpeed[1];
 } else if (animation.IsPlaying("run")) {
     speed = HorseSpeed[2];
 }
 
 if (speed != 0) transform.Translate(speed * Time.deltaTime, 0, 0);
 
               UPDATE:
If you want to use animation object of some other object, in this case your player, add a property
 var PlayerAnimation:Animation;
 
               You'll see this property in unity inspector. Drag player gameobject there and its Animation will be linked with this property. After that change animation to PlayerAnimation in the script.
Well I went and inserted the code you recommended. It looks like this now:
var HorseSpeed : float[];
var speed = 0;
function Start () {
}
function Update () {
 if (animation.IsPlaying("walk")) {
     speed = HorseSpeed[0];
    } 
 else if (animation.IsPlaying("trot")) {
     speed = HorseSpeed[1];
    } 
    else if (animation.IsPlaying("run")) {
     speed = HorseSpeed[2];
    }
 if (speed != 0) transform.Translate(speed * Time.deltaTime, 0, 0);
 transform.Translate(HorseSpeed[] * Time.deltaTime, 0, 0); 
 
                  }
But now I'm getting error messages that's being generated from line 38 saying insert ; here, unexpected token 0, etc. Am I still on the wrong track?
what is on line 38? why did you add transform.Translate(HorseSpeed[] Time.deltaTime, 0, 0); which is syntaxically wronf because you don't have a number between []*?
Wow, I did forget to add the number! I should clarify that this script is for a cube that the player is on top of. After putting the number in HorseSpeed[], the script's trying to find the animations for the cube itself but not the player where all the animations are (the Third Person Controller).
Should I add GetComponent(ThirdPersonController) at function Start () or would this not change a thing?
Sorry for taking up your time.
This line is not needed at all: transform.Translate(HorseSpeed[] * Time.deltaTime, 0, 0); The previous line does the job.
Answer by MadVash2005 · Nov 10, 2012 at 12:33 AM
Well I went and inserted the code you recommended. It looks like this now:
 var HorseSpeed : float[];
 
 var speed = 0;
 
 function Start () {
     
 }
 
 function Update () {
     
     if (animation.IsPlaying("walk")) {
         speed = HorseSpeed[0];
         } 
         
     else if (animation.IsPlaying("trot")) {
         speed = HorseSpeed[1];
         } 
         
         else if (animation.IsPlaying("run")) {
         speed = HorseSpeed[2];
         }
 
     if (speed != 0) transform.Translate(speed * Time.deltaTime, 0, 0);
     
     transform.Translate(HorseSpeed[] * Time.deltaTime, 0, 0); 
 }
 
               But now I'm getting error messages that's being generated from line 38 saying insert ; here, unexpected token 0, etc. Am I still on the wrong track?
Your answer
 
             Follow this Question
Related Questions
Setting Velocity of Rigidbody to Mouse Speed 1 Answer
Problems with 2d arrays , += incrementing values 0 Answers
2d array.What is the difference between these two? 1 Answer
Problem with rotated colliders 0 Answers
Simple Topdown Movement Problem 1 Answer