public virtual void Save()
        {
            SplineBase[]    splines   = FindObjectsOfType <SplineBase>();
            SplineSnapshots snapshots = new SplineSnapshots {
                Data = new SplineSnapshot[splines.Length]
            };

            for (int i = 0; i < snapshots.Data.Length; ++i)
            {
                snapshots.Data[i] = splines[i].Save();
            }
            string dataAsString = SerializeToString(snapshots);

            PlayerPrefs.SetString("SplineEditorSave", dataAsString);
        }
        public virtual void Load()
        {
            string dataAsString = PlayerPrefs.GetString("SplineEditorSave");

            if (string.IsNullOrEmpty(dataAsString))
            {
                return;
            }
            SplineBase[]    splines   = FindObjectsOfType <SplineBase>();
            SplineSnapshots snapshots = DeserializeFromString <SplineSnapshots>(dataAsString);

            //Should be replaced with more sophisticated load & save & validation logic
            if (splines.Length != snapshots.Data.Length)
            {
                Debug.LogError("Wrong data in save file");
                return;
                //throw new NotImplementedException("Wrong data in save file.");
            }

            for (int i = 0; i < snapshots.Data.Length; ++i)
            {
                splines[i].Load(snapshots.Data[i]);
            }
        }