Before updating to Windows 10 you may need to return your Pro license. More information here

2D - Locking The Z Axis

So, I'm making a 2D Platformer. I've been able to add some nifty features, but lately I've run into a problem. I would like my character to only move on the X and Y axis without any movement in the Z axis. Everytime I collide with a box, my character falls off the platform on the Z axis which I don't want. I've heard about configurable joints, but I'm still unclear about this all.

Thanks In Advance

more ▼

asked Jun 26, 2010 at 01:46 PM

avatar image

98 47 44 47

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

2 answers: sort voted first

This question has been answered in multiple places before. There are 2 common solutions. One, in your player code, every frame call:

function Update () {
    transform.position.z = 0;

//using UnityEngine... public class...
void Update () {
     Vector3 pos = transform.position;
     pos.z = 0;
     transform.position = pos;

or you can add a configurable joint. Then go to z motion and choose locked instead of free or limited.

Other links.

Locking desired axis

more ▼

answered Jun 26, 2010 at 01:55 PM

avatar image

Peter G
18.7k 35 101 221

Thanks for the quick response :D

Jun 26, 2010 at 01:57 PM Flipbee9

@Peter G, one minor point - that's Javascript. In C# you can't assign to Z, you have to do: transform.position = new Vector3(x, y, 0)

Jun 27, 2010 at 06:26 PM Cyclops

Right, I'll post the C# version. Most newcomers seem to choose JS because all the documentation is JS so I write it as such.

Jun 27, 2010 at 08:06 PM Peter G

@Peter G, true, I wasn't suggesting you change the post, I figured anyone seeing the post would also see my comment, which would be enough notice. :)

Jun 27, 2010 at 10:38 PM Cyclops

The C# script completely froze my character so that it wouldn't move in any direction. Anyone know why? I created a C# script with only the contents above and attached it to my gameObject (character controller).

Mar 26, 2012 at 10:36 PM amaranth
(comments are locked)
10|3000 characters needed characters left

Hi, I'm trying to do a similar thing, but I'm just wondering if its possible to make a script that instead of saying "continuously set z to 0" it would say something like "the z can never change to be anything other than 0 in the first place". Its because if I use this script and I walk into a collider thats facing diagonally (i'm making a 2.5d game, and ill try to not have any diagonal colliders, but it might not be completely possible), you can glitch through it, and it goes all messed up.

more ▼

answered Sep 29, 2013 at 06:14 PM

avatar image

16 3 8 12

I experienced this as well, and it's quite unsatisfactory. I haven't came up with a solution of my own, but I've read that rigidbody components have a mechanism to prevent movement in any of the axes. I'm just not very interested in using one as the games I'm making don't use physics, seems like needless overhead.

I'd love to hear an answer on this topic, anyone out there have a good solution?

Sep 20, 2014 at 10:12 PM soxroxr
(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



Answers and Comments



asked: Jun 26, 2010 at 01:46 PM

Seen: 16698 times

Last Updated: Sep 20, 2014 at 10:12 PM