kravchik / moveen

6 stars 0 forks source link

Moveen Stepper breaks when travelling under low, thin ceiling. #1

Closed Electro-Mantis closed 6 years ago

Electro-Mantis commented 6 years ago

When a character's top is too close to the ceiling, the legs attempt to stick to the floor above the ceiling. Afterward the Stepper is unable to move at all as if it's "locked". You can see the red ray on the top of the character going haywire (not sure what that ray represents).

2017-12-03_13-41-44

This poses a problem when the character needs to travel through a tube or a small tunnel. This is glitch doesn't seem to happen when the ceiling is "thicker"

2017-12-03_14-02-02

Maybe there's a setting that exists that fixes this that I'm not seeing perhaps? If not, I suppose it's a bug.

kravchik commented 6 years ago

I've been looking at this. The problem here is that SurfaceDetector has to discern a steep slope and another surface level and decide if the model must go over it. An even bigger problem arises when it needs to consider a situation when a model is just fell through the ground and needs recovery. The solution I came to is to set MoveenSurfaceDetector2.preferLowerThanHigher to some higher number. You can see the effect in the video.

But I would say that this is a solution that is too close to hack. You have to thoroughly test how it behaves on your level layout.

There are plenty of other situations when you can see some odd behavior - intertwined geometry, low ceilings, thin fence, etc. Overall, I would say that if you have some non-trivial terrain, or have some specific points on it - you would need to modify or replace SurfaceDetector script (extend ISurfaceDetector). It is why both SurfaceDetector1 and SurfaceDetector2 are located in the examples package. They can do the job for the most terrains. And when you have some non-trivial one, or if your gameplay requires something special - you can rewrite surface detector to your needs.