initialising variables with editorGUILayout

I am having a little trouble understanding how to initialise variables with EditorGUILayout fileds and was wondering if anyone could help.

Basically whats happening is, even if i set the values in the floatfields/sliders etc they always snap back to values in the initialisers on the first frame the game runs. Im sure this is a very simple thing I have overlooked but how do you set the initialised values to be what is in the gui on start.

using UnityEngine;
using System.Collections;

public class OceanBox : MonoBehaviour {
	
	// -------------------------------------------------------------------------------------------
	// Fields
	// -------------------------------------------------------------------------------------------
	
	// Ocean Floor Fields
	public static bool oceanFloorOffset = false;
	public static float oceanFloorOffsetAmount = 0.00f;
	public static float oceanFloorDepthInMeters = 4000.0f;
	
	// Static Fields
	public static GameObject OceanFloor;
	
	// -------------------------------------------------------------------------------------------
	// Run
	// -------------------------------------------------------------------------------------------
		
	// INIT
	void Start () {
		
		// Initialises the OceanFloor Static field with the OceanFloor Plane 
		OceanFloor = GameObject.FindGameObjectWithTag("OceanFloor");		
	}
	
	// Run
	void Update () {
		
	}
	
	void OnGUI () {
		
		offsetFloor();

	}
	
	// -------------------------------------------------------------------------------------------
	// Custom Functions/ Methods
	// -------------------------------------------------------------------------------------------
	
	// This Adds option to offset the ocean Floor within the OceanBox +50 / -50  
	void offsetFloor () {
		
		if (oceanFloorOffset) {
				OceanFloor.transform.localPosition = new Vector3(0, oceanFloorOffsetAmount / 100, 0);
		} else {
			OceanFloor.transform.localPosition = new Vector3(0, -0.5f, 0);
		}		
	}

public class OceanBoxGUI : EditorWindow {
	
	
	public float obOffsetAmountControl = 0.0f;
	
	// Menu
	[MenuItem ("3DeepMedia/OceanBox")]
	static void Init () {
		
		OceanBoxGUI window = (OceanBoxGUI)EditorWindow.GetWindow(typeof (OceanBoxGUI));
		window.Show();
		
	}
	
	void OnGUI () {
		
		// Fog GUI
		
		GUILayout.Label ("Fog", EditorStyles.boldLabel);
		
		OceanBox.fogSwtich = GUILayout.Toggle(OceanBox.fogSwtich, "enable");
		
		OceanBox.fogColor = EditorGUILayout.ColorField("Fog Colour: ",OceanBox.fogColor);
		
		EditorGUILayout.Space();
		
		// Ocean Floor GUI
		
        GUILayout.Label ("Ocean Floor", EditorStyles.boldLabel);
		
		OceanBox.oceanFloorDepthInMeters = EditorGUILayout.FloatField("Depth in meters", OceanBox.oceanFloorDepthInMeters);
		
		EditorGUILayout.Space();
		
		GUILayout.Label ("OffSet", EditorStyles.label);
		OceanBox.oceanFloorOffset = GUILayout.Toggle(OceanBox.oceanFloorOffset, "enable");
		OceanBox.oceanFloorOffsetAmount = EditorGUILayout.Slider(OceanBox.oceanFloorOffsetAmount, -50.0f, 50.0f);
	}

	
}

The problem is that public static variables are not subject to Unity’s serialization, and as such do not get saved between sessions in the metadata. If you want to keep this information when you run the game, you should make them just public variables on a single instance of the script on a gameObject somewhere, and refer to that in your editor script. Storing global information in static class information is dangerous at the best of times- it is much better to modify a single instance, and use FindObjectWithTag and GetComponent to use it from anywhere.