Raycast doesn't work as intended

Hello, I am doing FOV script based on Unity Steal tutorial here: http://unity3d.com/learn/tutorials/projects/stealth/enemy-sight?playlist=17168

My script is almost 100% the same, and works almost right - it detects whether a player is in FOV or not, but cannot detect if a player is blocked by other object or not (raycast is not working).

Could you help me?

using UnityEngine;
using System.Collections;

public class fieldofview : MonoBehaviour {
	public float fieldOfViewAngle = 110f;           // Number of degrees, centred on forward, for the enemy see.
	public bool playerInSight;                      // Whether or not the player is currently sighted.
	private SphereCollider col;                     // Reference to the sphere collider trigger component.
	public GameObject enemy;
	public Vector3 direction;
	public float angle;
	void Awake ()
		col = GetComponent<SphereCollider>();

	void OnTriggerStay (Collider other)
			// If the player has entered the trigger sphere...
			if(other.gameObject.tag == "botenemy")
					enemy = other.gameObject;
					// By default the player is not in sight.
					playerInSight = false;
					// Create a vector from the enemy to the player and store the angle between it and forward.
					 direction = other.transform.position - transform.position;
					 angle = Vector3.Angle(direction, transform.forward);

						// If the angle between forward and where the player is, is less than half the angle of view...
						if(angle < fieldOfViewAngle * 0.5f) //works
								RaycastHit hit;
								// ... and if a raycast towards the player hits something...
								if(Physics.Raycast(transform.position + transform.up, direction.normalized, out hit, col.radius)) //doesn't work
										// ... and if the raycast hits the player...
										if(hit.collider.gameObject.tag == "botenemy")
												// ... the player is in sight.
												playerInSight = true;
												Debug.Log ("enemy is seen");


Since it works or breaks based on scaling, try multiplying the maximum length of the raycast based on scale:

if(Physics.Raycast(transform.position + transform.up, direction.normalized, out hit, col.radius*Mathf.Max(transform.localScale.x, transform.localScale.y, transform.localScale.z))

It may also help to multiply transform.up by the same value (maximum of the scale in each axis) to ensure the raycast starts from the correct location.