# 2D Plattformer Controller

I'm currently developing a 2D Plattformer in Unity. And now I'm stuggling with the Character Controller. I know there are a lot of usefull tips for 2D Plattformer Controller in a Mario or Donkey Kong way of Controlling, which are great, but they don't fit my type of 2D Plattformer. My Levels have a similar concept to those in Ori and the Blind Forest and I wanted to have a similar kind of Movement. So does Anybody know how they achieved this kind Character Movement?

For those unfamiliar with Ori and the Blind Forest Control:

In Mario and Donkey Kong the Levels are very horizontal and you run from left to right. The Ground is sometimes interrupted and you have to jump on several Plattforms to reach the next part of the Ground. The Environment like Ground, Plattforms, Walls are mostly boxes.

in Ori and the Blind there is no run from left to right. The Levels go in all Directions. The Environment is more realistic so you have to slide down curvy Walls and no disappearance of the Ground. Also Plattforms are very rare. So instead of jumping through the Level you have to climb through.

I don't know if that Description is enough so here is some Gameplay.

EDIT: I tried .addForce() for every Movement, but this had a weird Slipping Effect. After releasing a button the Charracter slips a few Meters until it finally stops. So I'm currently manipulating the rigidbody.velocity directly for normal horizontal Movement and addForce for the rest like jumping or dashing.

But I have a lot trouble with Sliding along Walls. As mentioned above the Walls are curvy so just cancelling out horizontal Movement and apply some Vertical Force with rb.velocitiy doesn't work. The Character have to follow along the Wall shape. Thus I added a Force towards the Wall, which pressed the Character to the Wall. But this doesn't work very well with my jumping.

• For those unfamiliar with Blind Forest and Ori, can you describe the type of User Control features you would like to achieve. What sets these games apart from Mario or Donkey kong as you have mentioned. – ErnieDingo May 7 '18 at 1:08
• I edited my Question, with my current state. (the Answer had to many Characters for a Comment.) – Jonathan Wright May 7 '18 at 12:23

In Unity terms, the difference between the two movement types are Coordinate Based Movement, and Physics Based Movement
Coordinate Based Movement is used largely with tile based games like pretty much any NES game like the Mario you mentioned, Chess, Checkers, etc. Games like this take player input, and adjust the WorldSpace Coordinate of the GameObject based on rules. This usually means the GameObject moves by whole units; 1 left, 2 up, etc.
Physics Based Movement is used in games like you've described, Terraria, etc. These games move GameObjects by applying forces and allowing the Physics Engine to adjust their WorldSpace Coordinates. GameObjects moving under this scheme can be positioned on any float representable value; not limited to whole units.
Your mention of sliding down the curvature of the ground is a pretty good indicator that you want to use Physics Based Movement in your game.
Sliding when the player input stops is an indicator that the Friction Coefficient of your Physics Material is not at a value to get the behavior you like. Have a look at the documentation to learn more about how this works.