How to setup a info box if the cursor is over an enemy?

Right now I have many enemies that have different attributes that i want to be able to display via OnGUI. It needs to be where if the cursor is over the enemies gameobject then it displays his stats and keeps his stats displayed if the player is within a certain distance and the cursor doesnt hover over another enemy. For some reason im having alot of trouble figuring this out. I know that i will be using the OnMouseOver function but i simply cant figure out how to set it up. The issue is that each enemy has their own OnMouseOver function and since i want the stats to stay on the screen even after the mouse leaves their object, i will have a bunch of different gui’s overlapping each other. Heres my code for the OnMouseOver function

	void OnMouseOver(){
		enemyscript.GetComponent<cubeenemy> ().ishovering = true;
	}

And here is the OnGUI function for each enemy

   void OnGUI(){
	if (ishovering == true & distance < 10){
		GUI.skin = menu;
		GUI.Box(new Rect(Screen.width- 350,20,330,200),"");
		
		GUI.Label(new Rect(Screen.width- 210,40,100,200),"Level " + level + " Cube");
		
		GUI.skin = heatlh;
		GUI.Box (new Rect(Screen.width- 270,60,200,30),"");
		
		GUI.skin = heatlh2;
		GUI.Box (new Rect (Screen.width- 270 ,60, (currenthealth * 200 / maxhealth), 30), "");
		
		
		GUI.skin = heatlh3;
		GUI.Box (new Rect(Screen.width- 270,60,200,30),"Health: " + currenthealth+ "/" + maxhealth);
		
	}
}

I know this is pretty far off from what it has to be to achieve what i want but any help as to how i should go about it would be much appreciated.

The issue can be resolved through various approaches. I recommend creating two scripts, one storing information and calling OnMouseOver and the other calling the GUI.

Copy the following code into your CubeEnemy script.

using UnityEngine;
using System.Collections;

public class CubeEnemy : MonoBehaviour {
	public int level = 1;
	public int currentHealth = 100;
	public int maxHealth = 100;
	void OnMouseOver() {
		Main main = FindObjectOfType(typeof(Main)) as Main;
		main.ReplaceEnemy(this);
		print("inside");
	}
	/* Finds the 'Main' class in the scene and replaces the 'info' variable with this
     particular instance */
}

Copy the remaining code into a new class with the name ‘Main’.

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
	public CubeEnemy cubeEnemy;
	public GUISkin menu;
	public GUIStyle heat1h;
	public GUIStyle heat1h2;
	public GUIStyle heat1h3;
	/* GUISkins and GUIStyles resemble each other in function, however the skin is an
    asset, while the style is a variable specific to the class instance. GUISkins
    should be used when applied to multiple GUI elements, but when a different one
    is used per element, the style should be used. */

	public void ReplaceEnemy(CubeEnemy _cubeEnemy) {
		cubeEnemy = _cubeEnemy;
	}
	// Sets 'cubeEnemy' to the parameter value

	void OnGUI() {
		if (cubeEnemy && Vector3.Distance(transform.position, cubeEnemy.transform.position) < 10) {
			/* It confirms that 'cubeEnemy' is assigned the distance between the GameObject of this instance is
            less than ten units from the GameObject of the cubeEnemy instance. */

			GUI.skin = menu;
			// 'menu' is assigned to the following two elements.

			GUI.Box(new Rect(Screen.width - 350, 20, 330, 200), GUIContent.none);
			GUI.Label(new Rect(Screen.width - 210, 40, 100, 200), "Level " + cubeEnemy.level + " Cube");
			GUI.Box(new Rect(Screen.width - 270, 60, 200, 30), GUIContent.none, heat1h);
			GUI.Box(new Rect(Screen.width - 270, 60, (cubeEnemy.currentHealth * 200/cubeEnemy.maxHealth), 30), GUIContent.none, heat1h2);
			GUI.Box(new Rect(Screen.width - 270, 60, 200, 30), "Health: " + cubeEnemy.currentHealth + "/" + cubeEnemy.maxHealth, heat1h3);
			// The previous three elements use individual GUIStyles.  
		}
	}
}