Keeping Character From Walking Through Walls

Hello everyone,
I have a square character, that walks around the scene. I do not want to use character controller for a number of reasons, also I do not want to use rigidbody. To keep the character from walking through walls I have been using:

var fwd = transform.TransformDirection (Vector3.forward);

var right = transform.TransformDirection(Vector3.right);

var left = transform.TransformDirection(Vector3.right * -1);

var back = transform.TransformDirection(Vector3.forward * -1);

var down = transform.TransformDirection(Vector3.up * -1);

var up = transform.TransformDirection(Vector3.up);

if (Physics.SphereCast (transform.position, gameObject.width, up, hit, 0.01)) {

MoveUp = false;

}else{

MoveUp=true;

}

if (Physics.SphereCast (transform.position, 1, gameObject.width, hit, 0.01)) {

MoveDown = false;

IsGrounded = true;

}else{

MoveDown = true;

IsGrounded = false;

}

if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {

MoveForward=false;

}else{

MoveForward=true;

}

if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {

MoveRight=false;

}else{

MoveRight=true;

}

if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {

MoveLeft=false;

}else{

MoveLeft=true;

}

if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {

MoveBack=false;

}else{

MoveBack=true;

}

Suddenly, (I am not exactly sure what) this stopped working.
I also tried:

function OnCollisionEnter(hit : Collision)

{

 

    if (hit.transform.position.x > transform.position.x) {

    MoveRight = false;

    

    } 

    if(hit.transform.position.x < transform.position.x){

    MoveRight = false;

    

    }

 

    if (hit.transform.position.y > transform.position.y) {

    MoveUp = false;

    }

    if(hit.transform.position.y < transform.position.y){

    MoveDown = false;

    IsGrounded = true;

    }

 

    if (hit.transform.position.z > transform.position.z) {

    MoveForward = false;

    }

    if(hit.transform.position.z <transform.position.z){

    MoveBack = false;

    }

    }

    

function OnCollisionExit(hit:Collision){

if (hit.transform.position.x > transform.position.x) {

    MoveRight = true;

    

    } 

    if(hit.transform.position.x < transform.position.x){

    MoveRight = true;

    }

    if (hit.transform.position.y > transform.position.y) {

    MoveUp = true;

    }

    if(hit.transform.position.y < transform.position.y){

    MoveDown = true;

    IsGrounded = false;

    }

 

    if (hit.transform.position.z > transform.position.z) {

    MoveForward = true;

    }

    if(hit.transform.position.z <transform.position.z){

    MoveBack = true;

    }

}

Neither of these seem to be working.
All help is apprectiated,
Thanks,

Thor

I actually ended up using rigidbody with this:

#pragma strict
var canFly:boolean;
var speed = 10.0;
var gravity = 10.0;
var maxVelocityChange = 10.0;
var canJump:boolean;
var jumpHeight = 2.0;
private var grounded = false;
var stats:PlayerStats;
@script RequireComponent(Rigidbody, BoxCollider)
 
function Awake ()
{
	
	stats = GetComponent(PlayerStats);
	rigidbody.freezeRotation = true;
	rigidbody.useGravity = false;
}
 
function FixedUpdate ()
{
	jumpHeight = stats.jumpHeight;
	canJump = stats.jump;
	canFly = stats.flight;
	speed = stats.speed;
	if (grounded)
	{
		// Calculate how fast we should be moving
		var targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
		targetVelocity = transform.TransformDirection(targetVelocity);
		targetVelocity *= speed;
 
		// Apply a force that attempts to reach our target velocity
		var velocity = rigidbody.velocity;
		var velocityChange = (targetVelocity - velocity);
		velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
		velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
		velocityChange.y = 0;
		rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
 
		// Jump
		if (canJump && Input.GetButton("Jump"))
		{
			rigidbody.velocity = Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
		}
	}
 
	if(canFly == false){
	rigidbody.AddForce(Vector3 (0, -gravity * rigidbody.mass, 0));
 	}
	grounded = false;
}
 
function OnCollisionStay ()
{
	grounded = true;	
}
 
function CalculateJumpVerticalSpeed ()
{
	// From the jump height and gravity we deduce the upwards speed 
	// for the character to reach at the apex.
	return Mathf.Sqrt(2 * jumpHeight * gravity);
}

One query (I am new to Unity3D). What are the reasons , not to use standard character controllers ?