Postion GUI Texture in the center when called?

My script is working how i wanted it except one issue, when it does call the GUI Texture i have to manually Position GUI Texture, or if i move the object in the world it will mess up and appear in different Positions…

I have it setup so when the player walks up to the object and presses action it appear, but it’s not centered if i move the Parent Object at all…

Here is the part that calls it On/Off, how do i Position it?
I can Position the label just not the texture.

function OnGUI(){
    var read = new Rect(Screen.width*0.5,Screen.height*0.5 - 200, 250, 80);
    if (enter){
    GUI.Label(read, "Press (E) To Read");
    if(Input.GetKeyDown("e") && enter){
    if (!audio.isPlaying){
    ///var Page = new Rect(Screen.width*0.5,Screen.height*0.5);
    linkedPage.SetActiveRecursively( ! );

GUITextures live in Viewport space where the lower left of the screen is (0,0), and the upper right is at (1,1). They don’t live in world space. The easiest fix for this problem would be to unparent the GUITexture. Then you can use Camera.WorldToViewportPoint() to position the object. In some situations the following will work with parented GUITextures:

#pragma strict

function Update() {
	transform.position = Camera.main.WorldToViewportPoint(transform.parent.position);