Unlimted number of instatiated game objects- why?

Finally got to the point where I can instantiate my game objects and see them onscreen.
Trouble is, they are getting called numerous times for some reason and I have an infinite number of each one. How do I just get one?
Also, I’d like to have these objects attached to the window rect that surrounds the area.
The script is attached to the main camera. It used to be attached to each individual object, but I disabled that.
Here is the whole code:

    public GameObject PlayerLifePrefab;
	public GameObject PlayerStaminaPrefab;
	public GameObject PlayerEnergyPrefab;
	public GameObject PlayerAlignmentPrefab;
	public Texture hudGem;
	public int CurrentPlayerLife;
	public int CurrentPlayerEndurance;
	public int CurrentPlayerEnergy;
	public float CurrentPlayerAlignment;
	public int MaxPlayerLife;
	public int MaxPlayerEndurance;
	public int MaxPlayerEnergy;
	private bool _displayHUDWindow=true;
	private const int HUD_WINDOW_ID=8;
	private Rect _hudWindowRect= new Rect(10,10,270,120);
	public GUISkin HUDSkin;

	void OnGUI()
	{
		if(_displayHUDWindow)
		{ _hudWindowRect=GUI.Window(HUD_WINDOW_ID, _hudWindowRect, HUDWindow, "");

		}	
	}
	
	private void HUDWindow(int id)
	{

		MaxPlayerLife=21;
		MaxPlayerEnergy=0;
		MaxPlayerEndurance=20;

		


GameObject CurrentPlayerAlignment=Instantiate(PlayerAlignmentPrefab,transform.position, transform.rotation) as GameObject;
			GUI.DrawTexture(new Rect(20, 20, 60, 60), hudGem );
			GUI.Label(new Rect(25,37,180,25), PlayerName );
GameObject CurrentPlayerLife=Instantiate(PlayerLifePrefab,transform.position, transform.rotation)as GameObject;
GameObject CurrentPlayerEndurance=Instantiate(PlayerStaminaPrefab,transform.position, transform.rotation)as GameObject;
GameObject CurrentPlayerEnergy=Instantiate(PlayerEnergyPrefab,transform.position, transform.rotation)as GameObject;

	
		GUI.DragWindow();
	}

You’re instantiating them every frame in OnGUI as long as the HUD window is displayed. You should only instantiate them when needed.