CharacterController.SimpleMove problem - MoveAround tutorial #2

I try to make this work:

When adding MoveAround script the character starts falling down through the floor to the infinity (Y direction).

var speed = 3.0;
var rotateSpeed = 3.0;
function Update ()
var controller : CharacterController = GetComponent(CharacterController);
transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);
var forward = transform.TransformDirection(Vector3.forward);
var curSpeed = speed * Input.GetAxis ("Vertical");
controller.SimpleMove(forward * curSpeed);
@script RequireComponent(CharacterController)

The problem is here.

controller.SimpleMove(forward * curSpeed);

What is wrong with the default script example?

The problem is not in that line of script. The problem is the Y value of your object / character. Example: I created a plane and set a cube on top of it at 0, 0, 0. After adding the movement code, and running it, the cube falls through the plane to infinity Y. Then I changed the starting Y position to .51 and ran the file without problem (if your plane is at 0, 0, 0, and has a thickness of 1, then .5 of the thickness extends above the axis, so the Y value of your object / character must be greater than this).