Making my own Character Control

I am developing a game that is a mixture of Megaman Legends and Megaman X and Dungeon Crawler all at once.



The biggest problem at the moment, is the Character Control for it. Since it will have to support things like ‘Wall Jumping and Sliding’(or w/e it’s called). The default Character Control won’t detect wall collision, so i have to make my own and i will need some help to do that. I remember when i tried to make a character about 9 months ago, spent about 2 months trying and got nowhere.

My expectations with this thread is answers like: “no, don’t even try it like this, i have tried and it won’t work because …, try like this instead” or something like it.



http://s16.postimage.org/5ut1mwoc5/Untitled.png

The collision will be composed of:

4 Cylinders, 3 of them are Ghost Control and the other one is a Kinematic Control

Yellow one is wall collision, if it is colliding with a wall and the player is moving the character towards the wall, set the character state to ‘wall sliding’

Green one is for detecting when i am ‘on ground’. Also used to go down steps instead of falling. If the purple one y speed < 0 (and was not caused by jumping) and the green one is collides with ground, teleport the purple one to the ground

Blue one works in a similar fashion. If it is colliding with a wall and the yellow one is not, then it’s a step, and you can teleport the purple one to it.

Purple one is the actual character and it can’t go through things.



I am not even sure if any of this makes any sense in the engine or at all, but that’s the concept i managed to come up with. One of the potential problems is ramps, or even walking, if i remember correctly the cylinder will try it’s best to roll and it can’t. But that ‘might’ be avoided if i manage to make the cylinder to hover over the ground or have 0 friction. The forces will be manually added depending on w/e you are moving or not and to which direction. This way you can control air movement but not instantly.



Is there any obvious flaw on it? Is there a way better way to do it?