Este es un tutorial de como guardar partida en múltiples Slots (Espacios) en Unity3D, cuenta con un video publicado en Youtube.
Video de Youtube: https://youtu.be/FyOv3RvBegc
Paquete con el contenido del tutorial para Unity3D: MultiSave.unitypackage
usingnet.TBMSP.Lib.File;usingnet.TBMSP.Lib.TBMPk.File;usingUnityEngine;namespacetutorial.MultiSave{publicclassGameManager:MonoBehaviour{publicTransformplayer,LoadMenu,SaveMenu;publicintHealth=100;privatestaticstring[]Slots=newstring[4];privatestaticTransformp;publicstaticGameManagerGetComponent(){returnp.GetComponent<GameManager>();}voidAwake(){p=this.transform;net.TBMSP.Lib.Program.Init(Application.persistentDataPath+"/",true);Debug.Log("En esta carpeta se guardan los archivos: \""+net.TBMSP.Lib.Program.RootDirectory+"\"");FileBase.CreateDirectory("Data/SaveData");for(inti=0;i<Slots.Length;i++){Slots[i]=TDF.CreateString();}}voidStart(){player.GetComponent<Player>().Move=false;SaveMenu.gameObject.SetActive(false);LoadMenu.gameObject.SetActive(true);}voidUpdate(){if(Input.GetKeyDown(KeyCode.Z)){player.GetComponent<Player>().Move=false;SaveMenu.gameObject.SetActive(false);LoadMenu.gameObject.SetActive(true);}if(Input.GetKeyDown(KeyCode.X)){OpenSaveMenu();}}publicvoidsaveGame(intSlotID){SaveGame(SlotID);SaveMenu.gameObject.SetActive(false);player.GetComponent<Player>().Move=true;}publicvoidloadGame(intSlotID){if(FileBase.FileExist("Data/SaveData/Slot_"+(SlotID+1)+".tdf")){Slots[SlotID]=TDF.Load("Data/SaveData/Slot_"+(SlotID+1)+".tdf");//TDF.LoadGZvarplayerComp=GetComponent().player.GetComponent<Player>();varpos=TDF.GetValueOfBlock(Slots[SlotID],"Game","PlayerPos").Split(","[0]);varposX=float.Parse(pos[0]);varposY=float.Parse(pos[1]);varposZ=float.Parse(pos[2]);player.position=newVector3(posX,posY,posZ);varrot=TDF.GetValueOfBlock(Slots[SlotID],"Game","PlayerRot").Split(","[0]);varrotX=float.Parse(rot[0]);varrotY=float.Parse(rot[1]);varrotZ=float.Parse(rot[2]);playerComp.rotation=newVector3(rotX,rotY,rotZ);player.rotation=Quaternion.Euler(newVector3(0,rotY,0));Health=int.Parse(TDF.GetValueOfBlock(Slots[SlotID],"Game","PlayerHealth"));}player.GetComponent<Player>().Move=true;SaveMenu.gameObject.SetActive(false);LoadMenu.gameObject.SetActive(false);}publicstaticvoidOpenSaveMenu(){GetComponent().SaveMenu.gameObject.SetActive(true);GetComponent().LoadMenu.gameObject.SetActive(false);GetComponent().player.GetComponent<Player>().Move=false;}publicstaticvoidSaveGame(intSlotID){varplayerComp=GetComponent().player.GetComponent<Player>();Slots[SlotID]=TDF.SaveValueInBlock(Slots[SlotID],"Game","PlayerPos",GetComponent().player.position.x+","+GetComponent().player.position.y+","+GetComponent().player.position.z);Slots[SlotID]=TDF.SaveValueInBlock(Slots[SlotID],"Game","PlayerRot",playerComp.rotation.x+","+playerComp.rotation.y+","+playerComp.rotation.z);Slots[SlotID]=TDF.SaveValueInBlock(Slots[SlotID],"Game","PlayerHealth",GetComponent().Health.ToString());TDF.Save("Data/SaveData/Slot_"+(SlotID+1)+".tdf",Slots[SlotID]);//TDF.SaveGZ}}}usingUnityEngine;namespacetutorial.MultiSave{publicclassSaveTrigger:MonoBehaviour{publicboolInSave=false;voidOnTriggerEnter(Colliderc){if(c.tag=="SaveItem"&&!InSave){GameManager.OpenSaveMenu();InSave=true;}}voidOnTriggerExit(Colliderc){if(c.tag=="SaveItem"&&InSave){InSave=false;}}}}