Character moving on x : hits non-perpendicular collider : starts sliding on z?

So I’m using the Character Motor script and Character Controller component. I’m making a 2D platformer so the player is only allowed to move on x and y.

The problem is if there are any collide-able objects in the players path that aren’t perfectly perpendicular and the player continues to try to push themselves into them, the player starts sliding on z until they’ve moved enough to get around it.

I went into the characterMotor and changed the controller.Move calls so that any Vector3’s .z = 0 and while that prevented player inputs on z, the sliding problem still happened.

I then tried a hacky route and just had a update / fixedupdate script with transform.position.z = 0 and now the player thinks they’re the juggernaut and plows through the colliders.

Any ideas? : /

1 Answer

1

Well for now, using CharacterController.Move to reset z seems to work. There’s a tiny bit of jitter and I’d rather not do it this way if possible, but it works for the moment. I’d still like to know if anyone has a better solution.

private var controller : CharacterController;

function Awake () {
	controller = GetComponent(CharacterController);
}

function Update() {

if(transform.position.z > 0 || transform.position.z < 0){
     controller.Move(Vector3(0,0,(transform.position.z * -1)));
}

}