Strange ground-snapping behaviour of Character Controller on hard edges. Please help!

I’ve decided to try and learn how to use the Unity engine, and as my first project I’ve been following a youtube tutorial to build the basics of an FPS. While, so far, everything’s worked OK, I’ve been coming across some very weird and perplexing behaviours involving ‘sharp’ edges. Building a rudimentary test level in Blender, I’ve been following instructions to select all faces in edit mode, mark them all as smooth shading, and then apply an edge-split modifier to get the ideal final result when the model is opened and lit in Unity. I can’t help but notice that the ‘edge split’ modifier seems to duplicate many of the vertices, and entirely separate many faces of the model, which, although a cursory google search assured me was correct behaviour, appears to be the stem of the problem.

I’m using a standard character-controller setup, with the main camera parented to it as is standard practice. I’ve enclosed my entire code so far below, although I’m not sure if it’s the source of the problem, as the youtube tutorial I’m following didn’t appear to suffer these difficulties.

using UnityEngine;
using System.Collections;

[RequireComponent (typeof(CharacterController))]
public class FirstPersonController : MonoBehaviour {
	
	public float movementSpeed = 5.0f;
	public float mouseSensitivity = 5.0f;
	public float verticalViewRange = 89.0f;
	public float jumpSpeed = 5.0f;
	float currentRotVertical = 0.0f;
	float verticalVelocity = 0.0f;
	CharacterController characterController;
	
	// Use this for initialization
	void Start () {
		Screen.lockCursor = true;
		characterController = GetComponent<CharacterController>();
	}
	
	// Update is called once per frame
	void Update () {
		//Rotation
		float rotHorizontal = Input.GetAxis ("Mouse X") * mouseSensitivity;
		transform.Rotate (0, rotHorizontal, 0);
		
		float rotVertical = Input.GetAxis ("Mouse Y") * mouseSensitivity;
		
		float desiredRotVertical = currentRotVertical - rotVertical;
		
		desiredRotVertical = Mathf.Clamp (desiredRotVertical, -verticalViewRange, verticalViewRange);
		currentRotVertical = desiredRotVertical;
		
		Camera.main.transform.localRotation = Quaternion.Euler(desiredRotVertical, 0, 0);
		
		//Movement
		float forwardSpeed = Input.GetAxis ("Vertical") * movementSpeed;
		float sideSpeed = Input.GetAxis ("Horizontal") * movementSpeed;
		
		verticalVelocity += Physics.gravity.y * Time.deltaTime;
		
		if( characterController.isGrounded  Input.GetButtonDown("Jump")){
			verticalVelocity = jumpSpeed;
		}
		
		Vector3 speed = new Vector3( sideSpeed, verticalVelocity , forwardSpeed);
		
		speed = transform.rotation * speed;
				
		characterController.Move( speed * Time.deltaTime );
	}
}

Normal movement works fine, as does camera looking and jumping, however, whenever I go over a ‘sharp’ edge of a wall or incline, my characterController does not obey standard gravity as might be expected, but instead glitches directly to the floor below.

My suspicion is that I need to do something rather more sophisticated to my blender model than simply save it and access it directly from unity (I’ve heard mention of exporting it in a specific format), as I’m fairly certain it’s the disconnected faces that are to blame. To be honest, however, I’m a total novice, and it may be that this is another obvious mistake.

Please help! I can’t really continue with my project until I’ve got basic movement and so-on fixed!

Bump.

Seriously, please help, guys!

Do you have your camera controls in a separate game object?