- Home /
Saving lots of objects
I know this is a hard one so a big thanks in advance. So I have this game called borda and the world is made of many many cubes. I can't figure out how to save it all with out the game crashing. So if you guys can help me have unity save and load all this stuff I would be very thankfull.
This is how it looks
it mainly needs to save positions. It dose not have to save any of the rotations or anything but yes it is saving the cubes and trees and other stuff I place down in the game. I can set it up to be a child of a object if you need it to be.
What methodology are you currently using to attempt to save? Text File, X$$anonymous$$L, Serialized binary?
I tried players prefs and it was too much data for it to obtain at once and ended in freezing the game. So I believe its X$$anonymous$$L;
I don't see how X$$anonymous$$L serialization of even tenthousands of objects's transforms would crash the scene. It shouldn't even take very long on a halfway decent CPU (maybe 10 seconds?).
You need to be more specific in what you are currently doing.
By the way playerprefs is not for storing huge amounts of data like this. You need to create your own files.
Answer by tw1st3d · Oct 08, 2013 at 12:06 AM
Sounds like you'll want to use custom data saving with a Coroutine. Something along the lines of this:
using UnityEngine;
using System.Collections;
using System.IO;
public class SaveGame : MonoBehavior
{
public GameObject[] cubes;
protected string savename = "savegame";
private void Start()
{
cubes = FindGameObjectsWithTag("Floor");
}
public IEnumerator Save()
{
foreach(GameObject cube in cubes)
{
Vector3 pos = cube.transform.position;
Quaternion rot = cube.transform.rotation;
AddCube(pos, rot);
yield return new WaitForSeconds(0.01f);
}
}
public void AddCube(Vector3 pos, Quaternion rot)
{
float[] xyz = new float[3], hpb = new float[3];
// Pos Rot
xyz[0] = pos.z; xyz[1] = pos.y; xyz[2] = pos.z;
pos[0] = rot.z; pos[1] = rot.y; pos[2] = rot.z;
if(File.Exists("saves/" + savename + ".txt"))
{
using(StreamReader saveFile = File.OpenText("saves/" + savename + ".txt"))
{
foreach(float item in xyz)
{
saveFile.Write(item.ToString("R"));
}
saveFile.Write("-"); // Separator
foreach(float item in hpb)
{
saveFile.Write(item.ToString("R"));
}
saveFile.Write("\n"); // Line break
}
}else{
using(StreamWriter saveFile = File.CreateText("saves/" + savename + ".txt"))
{
foreach(float item in xyz)
{
saveFile.Write(item.ToString("R"));
}
saveFile.Write("-"); // Separator
foreach(float item in hpb)
{
saveFile.Write(item.ToString("R"));
}
saveFile.Write("\n"); // Line break
}
}
}
}
Now, prewarning: I didn't have a computer with Unity to test this to make sure it will work, but you can probably take it from here and fix it up to work how you want it to.
Thank you but im sorry I forgot to put this in the thing but can you make it in java cus I dont know any C# yet sorry.
No, sorry. I have no idea how to do this in Unityscript. But honestly, C# is far more efficient and useful than Unityscript, along with being faster with large projects. You may want to study up.
Your answer
![](https://koobas.hobune.stream/wayback/20220613115341im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Saving and loading game with PlayerPrefs 1 Answer
Save selected objects to a separate scene? 0 Answers
What is the best way to save a scene and load it later? 0 Answers
PlayerPrefs Question 0 Answers
SAVE OBJECTS IN ARRAY 1 Answer