I have problems with collision in my game. When the player character runs into a wall or a steep slope, the character jitters violently. I have not seen any way to possibly fix this. Is this just normal collision for BGE/UPBGE? I’ll link the .blend file to see if anyone can help. (The game uses joystick controls).
My old PS2 controller doesn’t want to work on this so I can’t test it.
Anyhoo, probably not your ideal solution, but in case you wonder: way I deal with wonky physics is have my own code clip the movement vector. This is quite problematic and requires subclassing gametypes, plus I haven’t really gotten around to optimizing much. Then why do it? Because I like statics, triangle meshes and predictable behaviour.
Simplest example I can think of;
from bge.types import KX_GameObject class Obj(KX_GameObject): def __init__(self, old_owner, pos, **kwargs): for key, value in kwargs.items(): self.__dict__[key] = value def applyMovement(self, vec, local=False, prop=""): self.clipMove(vec, prop) KX_GameObject.applyMovement(self, vec, local) def clipMove(self, vec, prop=""): vol = self.cullingBox.max xdirn = -1 if vec < 0 else 1 if vec > 0 else 0 ydirn = -1 if vec < 0 else 1 if vec > 0 else 0 zdirn = -0.25 if vec <= 0 else 1 f = 1.5 #do this for every axis. if vec: for y_offset in [ vol, -vol, 0 ]: lpos = self.worldPosition + (self.worldOrientation.col*(vol*f*xdirn)) lpos = lpos + (self.worldOrientation.col*(vol*f*y_offset)) xclip_ray = self.rayCast( objto=[ lpos, lpos, self.worldPosition.z+vol/2 ], objfrom=[ self.worldPosition.x, self.worldPosition.y,self.worldPosition.z+vol/1.25 ], prop=prop) if xclip_ray: vec = 0 break
NINJA EDIT: forgot them imports.
Definitely gonna try this next time it happens. I actually found out what was going on. The platforms I were using were wider at the top than the bottom. I used a Triangle mesh for the collision bounds, so the gap was still present. The character’s collision bounds were a bit taller than the gap left in the platform, so it was freaking out trying to squeeze through. Using a box collision shape now and the collision is much more stable.
Thanks for the help with code, though!