VeryHotShark / First-Person-Controller-VeryHotShark

This is a project where im trying to create a quite generic first person controller that can be use in different games and extended for your own needs. I started this project because i wanted to create a controller for my walking simulator game so that's why controller fits better with this genre. I Also use a free extension from Unity Store called Naughty Attributes to help me keep this project nice and tidy.
MIT License
348 stars 72 forks source link

A few bugs and improvement suggestions #9

Open infidelitY1 opened 5 years ago

infidelitY1 commented 5 years ago

Hi,

I've been long searching for a polished, smooth, high quality first person player controller, and I finally found this, which is 90% there.

I've been rigorously testing it for the past few days, and would love to provide some feedback:

1) I can't rotate the controller to face any other direction than Y 90. When I click play in the editor, the controller automatically zeroes out the rotation, no matter the initial set rotation.

2) When walking off the ledge of a steep object, the controller will slowly creep downwards. This is a pretty popular issue, but basically, it's due to the capsule shape of the controller. Would be great to have the controller feel more like a cube when standing near edges, rather than a capsule. One possible solution I've heard about is basically having a gameobject where the capsule collider starts rounding off, and shooting a ray downwards.. Kinematic Character Controller also has some options to deal with this.

3) Stepping on top of objects (character controller step offset) isn't very smooth. It'd be nice there was some smoothing applied to this. There also seems to be a slight hiccup with the camera when stepping on an object, as it moves slightly down, then moves back up again. I think this is due to the landing behavior.

https://youtu.be/7a0Wcm2Vj2o

I've alleviated this by adding smoother collisions, but obviously this is very labor intensive, as I basically have to have a "smooth" collision for every object that I want the player to be able to step on top of.

https://youtu.be/OyWWM2J7HuY

4) Doesn't play nice with Cinemachine. If I want to make the camera look at something, and set a look target, the player controller's input will be as if the camera is looking at the pre-Cinemachine look target direction. So, if I set a look target that's off to the left of the player, the camera will look at the object, but if I press W, I will walk forward in the forward direction of the controller, not the camera. Perhaps this has something to do with the first bug?

5) Smoothing out wall collisions. If you've played the game ZED, when you walk into a wall, you don't instantly stop, but smoothly come to a stop. I wonder if that'd be possible here as well.

6) Wall friction. Ultimate Character Controller has this (ctrlf+f "wall glide"), but basically, the more you look into a wall, the slower you move. So if you were colliding with a wall, and were looking at it at 35 degrees angle, you'd be moving slower versus if you were looking at it at a 75 degrees angle. It also uses a curve to modify this behavior, which would be perfectly fitting here.

And that's about it. Overall, it's a fantastic controller, just that after using so many of them, I've analysed pretty much every nook and cranny and found some issue with all of them. I think if these issues were solved, it would be straight up the smoothest, easiest to use first person controller by far.

One of these can be attributed to being very game-centric, like Cinemachine, but overall, I feel like all of the things I've outlined would be really awesome additions to this already great controller. I honestly wouldn't mind even paying for something so well made if it had the features/fixed bugs above.

I know the developer is busy, so I'll gladly wait for anything. As I said, this is already great, so huge props.

VeryHotShark commented 4 years ago

Hi, im coming back to this project now so i will try to fix all those issues ;)

Necrospasm commented 4 years ago

Might I add a few little things to the above list (which I partly did myself but not working so good). Enable/Disable Zoom, Enable/Disable Cursor lock and Right click to rotate instead of free look. As i said, I did do these and the zoom simply commented out the right mouse button, commented out the cursor lock but the right mouse button, when i enclosed the x/y inputs in an IF (input.getbutton) it works but if i give the turn momentum, it just keeps spinning. Also, well done..this is by far the smoothest and easiest fps controller I've seen...and I've seen quite a few made in unity. Thank you

NeKoRoSYS commented 1 year ago

For number 3, it is a game design choice. Developers can either use actual stair mesh colliders or add an invisible smooth slope surface collider.