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(){
}
}