characters slipping and sliding

How can I make my characters stick to the ground better? As it is now, they can only manage gentle slopes without sliding slowly to the bottom of the hill. I’ve been using “rigid body” on them.

 I did come up with a fix some time ago.  I just told the character object to always move down unless it collided with an object with a certain material(the floor).  It was okay.  But it was kinda jerky and I didn't want to have to assign the same material to every collision object.

Any suggestions?

-Wynn

on your characters, go to the materials, and right next to RGB and HSV is a third button, DYN. click that, set the friction, then go to the logic buttons, click ‘Do Fh’ and you should be good.

Rather than change the settings on all the materials, I like using servo motion.

http://blenderartists.org/forum/showpost.php?p=1476880&postcount=5

I’m actually liking the results on this:). There’s just one glitch where the character will pop through the ground on especially steep hills. Do you have this problem too?

Maybe my expectations are a little unrealistic. I think I just need to design my levels more neatly.

-Wynn

are you using loc, force, linV, or servo?

I’m using loc.

-Wynn

Hello
If you want to use “Physics”, or you know what you’re doing, you should use “force” or the “servo motion” to move your player!
Bye

or linV. i heard once that loc just teleports it closer and closer, doesn’t actually move it, so when you collide with something the physics engine tries its best, but…

And after several replies/answers, you will end up by following Excalaberr’s probably invisible advice.
Another link.

thanks, dude. i’ve been trying to curb the ‘i walk on air!’ problem for a while now. never thought to try that. very helpful.

edit: it’s not invisible, i just had lots of un-fun with servos before now.

Thanks guys for your feedback. I’m really liking linv. I have no more problems with running up steep hills. Unfortunately, when the character runs down a steep hill it “flies” or “glides” through the air until I let go of the button. Is there a way to correct this? This is the main reason I had been using loc all this time.

-Wynn

Edit: Never mind, I just read Cray’s link and found a work around. Thanks for the info.

I realize this topic is 10 years old, but I had the same question.

Changing the physics type from character to dynamic & increasing the friction seemed to work for me.

you can also, use a simple smoothing on your Motion actuator’s values. Just need to tune the a according your preference (small a = lot of inertia)

newmotion = [x,y,z]
motion.dLoc = (1-a) * motion.dLoc + (a) * newmotion

What about for the “Character Physics” is there any way to make that have less “slipping”?

1 Like

change the material Physics of the ground

image

Better use something like a tiny script, to set velocity on 0 when no player input. Playing with friction can cause other problems, because you cannot turn of the friction. If yo increase the ground then all objects will need to fight the friction. If you put it on the player, it will stick to walls if you jump. If you just let it be at 0 and set the velocity then you won’t have any of those problems.

For slopes you can use python, to sniff them out and at an up force to the player, now you can easily make sand slopes(hard to climb), snow slopes (sliding off, or unable to climb without let’s say spike shoes, etc.) it gives you more control.

2 Likes

This is something that I had considered the only problem is deceleration while jumping, if the movement key is not pressed when the player is mid air, that ssentually freezes the jump.

Restore the velocity when in air.

Take a look in my blend here:

lines:
49-52
100-107 (102)
121

1 Like

I see what you have done here. What you have created is nothing short of wonderful! Great solution. Seems pretty watertight, also should really help prevent “launchings”!

1 Like

Unfortunately it won’t prevent the launching of ramps/slopes. That’s one of the reasons why i use an additional collision box below the player.