Level editor Save and load

I’m trying to make a level editor and so far I got the script running fine but I need help with a save and load function so it can save all the spawned objects name, position, and rotation. I tried doing it myself but I don’t know how to do it.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class PlatformPlacement : MonoBehaviour {
	public GameObject Car;
	public GameObject[] PrefabList;
	public Material PreviewedObjectMat;
	public GameObject ParentObject;
	public int SelectedObject;

	[System.Serializable]
	public class PosInfoClass{
		public Text XPosInfo;
		public Text YPosInfo;
		public Text ZPosInfo;
	}

	[System.Serializable]
	public class RotInfoClass{
		public Text XRotInfo;
		public Text YRotInfo;
		public Text ZRotInfo;
	}
	public Text SpeedInfo;
	public PosInfoClass PosInfo;
	public RotInfoClass RotInfo;

	GameObject PreviewPhysicalObject;
	GameObject SpawnedPreviewPhysicalObject;

	public GameObject[] SpawnedObjects;

	public GameObject EditingCamera;
	public Camera GamePlayerCamera;

	GameObject FindClosestObject() {
		GameObject[] gos;
		gos = GameObject.FindGameObjectsWithTag("SpawnedObjects");
		GameObject closest = null;
		float distance = Mathf.Infinity;
		Vector3 position = MoveObject;
		foreach (GameObject go in gos) {
			Vector3 diff = go.transform.position - position;
			float curDistance = diff.sqrMagnitude;
			if (curDistance < distance) {
				closest = go;
				distance = curDistance;
			}
		}
		return closest;
	}
	GameObject PreviewedObjectParent;
	GameObject PreviewedObjectParent2;
	Vector3 MoveObject,RotateObject;
	Vector3 LookatObject;
	Quaternion ObjectRot;

	float XPos,YPos,ZPos,XRot,YRot,ZRot;
	public float ChangeSpeed = 1;
	public GameObject ClosestObject;
	public int ObjectID;
	public float CameraSwitch = 0;
	float RotTime;
	// Use this for initialization
	void Start(){
		PreviewedObjectParent = new GameObject ("ObjectPreview");
		PreviewedObjectParent.transform.SetParent (ParentObject.transform);

		PreviewedObjectParent2 = new GameObject ("ObjectPreview2");
		PreviewedObjectParent2.transform.SetParent (PreviewedObjectParent.transform);

	}
	void FixedUpdate () {
		
		FindClosestObject ();
		SelectedObject = (int)Mathf.Clamp (SelectedObject,0, PrefabList.Length-1);
		ChangeSpeed = Mathf.Clamp (ChangeSpeed,1, 20);
		SpawnedPreviewPhysicalObject = GameObject.Find (PrefabList [SelectedObject].name + "(PreviewVersion)");
		SpawnedObjects = GameObject.FindGameObjectsWithTag ("SpawnedObjects");
		ClosestObject = FindClosestObject();
		CameraSwitch = Mathf.Repeat (CameraSwitch, 2);



		if (SpawnedPreviewPhysicalObject != null) {

			SpawnedPreviewPhysicalObject.layer = 14;

			SpawnedPreviewPhysicalObject.transform.SetParent (PreviewedObjectParent2.transform);

			MoveObject = PreviewedObjectParent.transform.position;

			MoveObject.x = XPos;
			MoveObject.y = YPos;
			MoveObject.z = ZPos;
			PreviewedObjectParent.transform.position = MoveObject;

			RotateObject.z = XRot;
			RotateObject.y = YRot;
			RotateObject.x = ZRot;

			PreviewedObjectParent.transform.localEulerAngles = new Vector3 (0,RotateObject.y,0);
			PreviewedObjectParent2.transform.localEulerAngles = new Vector3 (0,0,RotateObject.z);
			SpawnedPreviewPhysicalObject.GetComponent<Transform>().localEulerAngles = new Vector3(RotateObject.x,0,0);
			SpawnedPreviewPhysicalObject.GetComponent<MeshRenderer> ().material = PreviewedObjectMat;

			EditingCamera.transform.position = Vector3.Lerp(EditingCamera.transform.position,SpawnedPreviewPhysicalObject.transform.position,Time.deltaTime*5);
			RotTime = Mathf.Repeat (RotTime, 360);

			ObjectRot = SpawnedPreviewPhysicalObject.transform.rotation;

			//LookatObject.y = Mathf.LerpAngle(LookatObject.y,LookRotationDebug.y,Time.deltaTime*5);

			if (Input.GetKey (KeyCode.D)) {
				
				RotTime -= Time.deltaTime*90;
			}

			if (Input.GetKey (KeyCode.A)) {
				RotTime += Time.deltaTime*90;
			}
			LookatObject.x = 0;
			LookatObject.y = Mathf.LerpAngle (LookatObject.y, RotTime, Time.deltaTime*5);
			LookatObject.z = 0;

			EditingCamera.GetComponent<Transform>().eulerAngles = new Vector3(0,LookatObject.y,0);

			SpeedInfo.text = "[Speed] " + ChangeSpeed.ToString ();

			PosInfo.XPosInfo.text = "[X] " + SpawnedPreviewPhysicalObject.transform.position.x.ToString ();
			PosInfo.YPosInfo.text = "[Y] " + SpawnedPreviewPhysicalObject.transform.position.y.ToString (); 
			PosInfo.ZPosInfo.text = "[Z] " + SpawnedPreviewPhysicalObject.transform.position.z.ToString ();

			RotInfo.XRotInfo.text = "[Roll ] " + Mathf.Round(PreviewedObjectParent2.transform.localEulerAngles.z).ToString ();
			RotInfo.YRotInfo.text = "[Yaw ] " + Mathf.Round(PreviewedObjectParent.transform.localEulerAngles.y).ToString ();
			RotInfo.ZRotInfo.text = "[Pitch ] " + Mathf.Round(SpawnedPreviewPhysicalObject.transform.eulerAngles.x).ToString ();


		}
		Vector3 CarVel = Car.GetComponent<Rigidbody> ().velocity;
		if (CameraSwitch == 1) {
			EditingCamera.GetComponentInChildren<Camera>().enabled = true;
			EditingCamera.GetComponentInChildren<ReflectionProbe> ().enabled = true;
			GamePlayerCamera.enabled = false;
			CarVel.x *= 0;
			CarVel.y *= 0;
			CarVel.z *= 0;
		} else {
			EditingCamera.GetComponentInChildren<Camera>().enabled = false;
			EditingCamera.GetComponentInChildren<ReflectionProbe> ().enabled = false;
			GamePlayerCamera.enabled = true;
			CarVel.x *= 1;
			CarVel.y *= 1;
			CarVel.z *= 1;
		}
		Car.GetComponent<Rigidbody> ().velocity = CarVel;
	}
	
	public void SelectNextObject(){

		if (SelectedObject < PrefabList.Length-1) {
			SelectedObject += 1;
			DestroyImmediate (SpawnedPreviewPhysicalObject);
			PreviewPhysicalObject = (GameObject)Instantiate (PrefabList [SelectedObject], MoveObject,Quaternion.Euler(RotateObject));
			PreviewPhysicalObject.name = PrefabList [SelectedObject].name + "(PreviewVersion)";
		}
	}

	public void SelectPreviousObject(){
		
		if (SelectedObject > 0) {
			SelectedObject -= 1;
			DestroyImmediate (SpawnedPreviewPhysicalObject);
			PreviewPhysicalObject = (GameObject)Instantiate (PrefabList [SelectedObject], MoveObject,Quaternion.Euler(RotateObject));
			PreviewPhysicalObject.name = PrefabList [SelectedObject].name + "(PreviewVersion)";
		}
	}

	public void MoveSelectedObjectForward(){
		ZPos += 1*ChangeSpeed;
	}
	//This Section is for the Position of the previewed Object//
	public void MoveSelectedObjectBack(){
		ZPos -= 1*ChangeSpeed;
	}

	public void MoveSelectedObjectLeft(){
		XPos -= 1*ChangeSpeed;
	}

	public void MoveSelectedObjectRight(){
		XPos += 1*ChangeSpeed;
	}

	public void MoveSelectedObjectUp(){
		YPos += 1*ChangeSpeed;
	}

	public void MoveSelectedObjectDown(){
		YPos -= 1*ChangeSpeed;
	}
	////////////////////////////////////////
	 
	//This Section is for the Rotation of the previewed object//
	public void PreviewedObjectPitchAdd(){
		ZRot += 1*ChangeSpeed;
	}

	public void PreviewedObjectPitchSubtract(){
		ZRot -= 1*ChangeSpeed;
	}

	public void PreviewedObjectRollAdd(){
		XRot += 1*ChangeSpeed;
	}

	public void PreviewedObjectRollSubtract(){
		XRot -= 1*ChangeSpeed;
	}

	public void PreviewedObjectYawAdd(){
		YRot += 1*ChangeSpeed;
	}

	public void PreviewedObjectYawSubtract(){
		YRot -= 1*ChangeSpeed;
	}
	////////////////////////////////////////
	public void ChangeSpeedIncrease(){
		ChangeSpeed += 1;
	}
	public void ChangeSpeedDecrease(){
		ChangeSpeed -= 1;
	}

	public void CreateObject(){
		++ObjectID;
		GameObject SpawnedSelectedObject = (GameObject)Instantiate (PrefabList [SelectedObject], MoveObject,ObjectRot);
		SpawnedSelectedObject.name = PrefabList [SelectedObject].name + ObjectID.ToString ();
		SpawnedSelectedObject.tag = "SpawnedObjects";
		SpawnedSelectedObject.transform.SetParent (ParentObject.transform);
	}

	public void DeleteObject(){
		DestroyImmediate (FindClosestObject());
	}
	public void ChangeCamera(){
		++CameraSwitch;
	}
	public void Save(){

	}

	public void Load(){
		
	}
}

This should work (It will save the whole path where you choose. Link for more help: Unity - Scripting API: SceneManagement.EditorSceneManager.SaveScene).;

public void SaveAsNew () {
    EditorSceneManager.SaveScene(SceneManagement.GetActiveScene, string dstScenePath = "C:\Program Files\YourGame\Saves", bool saveAsCopy true);
}

//using UnityEngine.UI; (Add this at the start, you need it.)

public string sceneTitle;
public Text titleMaker;

void FixedUpdate () {
    sceneTitle = titleMaker.ToString;
}

public void NewScene () {
     SceneManager.CreateScene(sceneTitle);
}

Also, checkout my game, Buzzle on GameJolt.
Link: Game Jolt - Share your creations