RigidBody FPS Controller(standard assets) gets stuck on mesh colliders

I imported a mesh I had made from Blender into Unity (.dae format). The mesh had a ramp going up to a second floor, the ramp is at a 45deg angle. When the RigidBody FPS Controller from the standard assets tried to walk up the ramp it slow down to a crawl and would occasionally slide back down. It would also get stuck in the corner of the mesh especially after it slid down the ramp. The other SA Fps controller did not have any problems, But I needed it to react to physics for the game so I’m unable to use it. I don’t believe it is sliding/ slowing down due to friction, or a lack there of because I tried using a variety of physic martials on both the controller and the mesh to no effect. The problem could not be replicated using the other collider types. I’ve seen similar problems from other people but no solutions were posted.

Just set the “Shell Offset” variable to 0.1 in the “Advanced Settings” of the “Rigidbody First Person Controller” script.

You should probably not use the built in FPS controllers, so here is a simple movement script and a mouse look script. By the way, the player needs a character controller, and these scripts are aren’t tested.

Movement

using UnityEngine;

public class Player_Movement : MonoBehaviour 
{
	private float jumpSpeed = 8.0F;
	private float gravity = 20.0F;
	private float speed = 10.0F;

	private Vector3 moveDirection = Vector3.zero;

	private CharacterController controller;

	void Start()
	{
		controller = GetComponent<CharacterController>();
	}

	void Update() 
	{
		CheckForWalk();
		CheckForSprint();
	}
		
	void CheckForWalk()
	{
		// Is the controller on the ground?
		if(controller.isGrounded) 
		{
			// Feed moveDirection with input.
			moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection(moveDirection);

			// Multiply it by speed.
			moveDirection *= speed;

			// Jumping.
			if(Input.GetButton("Jump")) 
			{
				moveDirection.y = jumpSpeed;
			}
		}

		// Applying gravity to the controller.
		moveDirection.y -= gravity * Time.deltaTime;

		// Making the character move.
		controller.Move(moveDirection * Time.deltaTime);
	}

	void CheckForSprint()
	{
		if(controller.isGrounded && Input.GetKey(KeyCode.LeftShift)) 
		{
			speed = 11.0F;

			// Feed moveDirection with input.
			moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection (moveDirection);

			// Multiply it by speed.
			moveDirection *= speed;

			// Jumping.
			if(Input.GetKey(KeyCode.LeftShift)) 
			{
				moveDirection.y = jumpSpeed;
			}
		} 

		else if(!Input.GetKey(KeyCode.LeftShift))
		{
			speed = 10.0F;
		}
	}
}

Just set the “Shell Offset” variable to 0.01 in the “Advanced Settings” of the “Rigidbody First Person Controller” script.

Setting values greater than this, may create a gap between the controller and the colliding object.