Inter Script Communication fail

Hi, I have 2 scripts I want to communicate. I Instate a prefab and then get the componet and save the reference to my second script.
All I want to do it’s to call a function and set some values.

enemyView.cs

public class enemyView : MonoBehaviour {

    [SerializeField] public GameObject goEye;
    [SerializeField] public float time = 6f;

    private eyeController eyeScript;
    private GameObject eye;
    private GameObject canvas;

	// Use this for initialization
	void Start () {
        canvas = GameObject.Find("FloatingCanvas");

        eye = Instantiate(goEye);
        eye.transform.SetParent(canvas.transform);

        eyeScript = goEye.GetComponent<eyeController>();
        eyeScript.attached = transform.root.FindChild("Eye");
    }
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnTriggerEnter (Collider other)
    {
        if (other.CompareTag(Tags.player))
            eyeScript.play(false, time);

    }

    void OnTriggerExit (Collider other)
    {
        if (other.CompareTag(Tags.player))
            eyeScript.play(true, time);
    }
}

eyeController.cs

public class eyeController : MonoBehaviour {

    private const int margin = 32;

    private static Color low = Color.green;
    private static Color mid = Color.yellow;
    private static Color hig = Color.red;

    private Image img;
    private Color currentColor = low;
    private float fill = 0f;
    public float speed = 0f;

    public Transform attached;
    private Camera cam;

    // Use this for initialization
    void Start () {
        img = GetComponent<Image>();
        img.color = currentColor;

        //test
        //attached = GameObject.Find("Swat").transform.FindChild("Eye");
        //play(false, 10);

        cam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
    }
	
	// Update is called once per frame
	void Update () {
        Debug.Log(attached);
        Debug.Log(speed);
        img.color = currentColor;
        img.fillAmount = fill;

        Vector3 screenPos = cam.WorldToScreenPoint(attached.position);
        screenPos = updateBounds(screenPos);
        transform.position = screenPos;

        increase(speed * Time.deltaTime);
    }

    private Vector3 updateBounds(Vector3 screenPos)
    {
        if (screenPos.x >= Screen.width)
        {
            screenPos.x = Screen.width - margin;
        }
        else if (screenPos.x < 0)
        {
            screenPos.x = margin;
        }
        if (screenPos.y >= Screen.height)
        {
            screenPos.y = Screen.height - margin;
        }
        else if (screenPos.y < 0)
        {
            screenPos.y = margin;
        }

        Vector3 heading = attached.position - cam.transform.position;

        if (Vector3.Dot(cam.transform.forward, heading) <= 0) {
            screenPos.x = Screen.width - screenPos.x;

            if (screenPos.y > Screen.height / 2)
                screenPos.y = Screen.height - margin;
            else
                screenPos.y = margin;
        }

        return screenPos;
    }

    //Incrementa el llenado del ojo y devuelve true cuando está la máximo
    private void increase(float amount)
    {
        fill += amount;
        
        if (fill > 1.0f)
        {
            fill = 1.0f;
            currentColor = hig;
        }
        else
        {
            if (fill > 0.5)
            {
                currentColor = Color.Lerp(mid, hig, (fill - 0.5f)*2); //0.5 -> 0, 1 -> 1
            }
            else
            {
                currentColor = Color.Lerp(low, mid, fill * 2); //0 -> 0, 0.5 -> 1
            }
        }
    }

    //reverse: crece o decrece, time: tiempo que le lleva al npc verte por completo (s)
    public void play(bool reverse, float time)
    {
        speed = 1 / time; //velocidad en unidades por segundo

        if (reverse) speed = -speed;
        Debug.Log(speed);
    }

I want to call “play” when my player enters or exits the colliders. The function is been called but the “speed” value doesn’t change, it takes the value of the first time I call “play” and never changes.

Thanks and if you need some more info let me know.

My bad, I was refering the prefab instance instead of the game object instace on the line 17:

         eyeScript = goEye.GetComponent<eyeController>();
         eyeScript.attached = transform.root.FindChild("Eye");

Should be:

         eyeScript = eye.GetComponent<eyeController>();
         eyeScript.attached = transform.root.FindChild("Eye");