x


Translate a game object on horizontal and vertical axis?

Ok so I'm VERY new to Unity and I'm working on my first practice game but the only thing in my way right now is that I'm having trouble making a game object move horizontally and vertically

I have a script for each one and the horizontal one works but the vertical one just makes it go even more horizontal

//horizontal    
function Update () {
        var horiz : float = Input.GetAxis("Horizontal");
 transform.Translate(Vector3(horiz,0,0));
}

And for the vertical I have

//vertical
function Update () {
        var vert : float = Input.GetAxis("Vertical");
 transform.Translate(Vector3(vert,0,0));
}

I know it's a noob question but I'm really stuck on it

more ▼

asked Mar 03, 2011 at 02:50 AM

Dyson6 gravatar image

Dyson6
5 9 6 7

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

I can tell you are extremely new to this and don't really understand what the functions you are using actually 'do'. I advice to you make good use of this website to look anything you use up.

Let me explain the basic idea here though.

The Input.GetAxis horizontal and vertical stuff is a predefined function of unity, saving you the trouble of having to do this yourself. What it does is when a positive horizontal key is pressed (right arrow or d if you use wasd) it gives a positive value and viceversa. For vertical it does the same. So this variable you defined is either positive or negative depending on the key imput.

Now put this into a Vector3(x,y,z): Vector3(horiz,0,vert) will now 'point' into the direction of the arrow key are pressing. Since you want it to move into this direction take this as the direction of your movement and multiply it by your desired speed over the desired time. Time is important here, else the speed will depend on how quick your computer is.

transform.Translate(Vector3(horiz,0,vert) * speed * Time.deltaTime);

Now be sure to stick var speed = 10; at the top of your function. Now you can easily alter the movementspeed.

more ▼

answered Mar 03, 2011 at 04:19 AM

Joshua gravatar image

Joshua
6.9k 46 46 100

(comments are locked)
10|3000 characters needed characters left

You're using the same Vector3 for both horizontal and vertical. You'd need to use a different axis for vertical. Also, that code is framerate-dependent, and will run at different speeds on different devices (as well as on the same device, depending on what else is going on). You need to use Time.deltaTime.

more ▼

answered Mar 03, 2011 at 02:59 AM

Eric5h5 gravatar image

Eric5h5
107k 51 180 648

So what do I put instead? do I need to add a y somewhere?

And I'm not sure what you want me to replace with Time.deltaTime

Mar 03, 2011 at 03:16 AM Dyson6

@Dyson: Please see the docs for Time.deltaTime and transform.Translate.

Mar 03, 2011 at 05:35 AM Eric5h5
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x67
x54

asked: Mar 03, 2011 at 02:50 AM

Seen: 2959 times

Last Updated: Mar 03, 2011 at 02:50 AM