- Home /
Saving a list without converting
Is there any way to save a list without converting it to another format? I'm making a sandbox type of game and I need a way to save a list of the blocks and their locations. Keep in mind I'm using C# and I'm a little bit of a newcomer to Unity.
I don't know what you mean "without converting." If you mean you still want it as a list (I'm assu$$anonymous$$g a generic list), you must convert it to something to save it. In the editor you can you [SerializeField], but that only really works for objects when used in Editor (not in play mode).
What you could do and might be the simplest way is to write a small script to convert each block into a specific format, say: " ." You could then add another bit of code to convert that format back into the list object's type. Then it would be easy to save as a text file (StreamWriter and StreamReader).
Answer by techDev · Dec 22, 2014 at 03:57 PM
You can use a ScriptableObject, read the Documentation
1) You need to create a class that inherits from ScriptableObject not MonoBehaviour.
using UnityEngine;
using System.Collections.Generic;
[System.Serializable]
public class Values : ScriptableObject {
public List<Transform> blocks;
}
2) Then you need to create an instance of this class to create your own ScriptableObject, which should be done using Editor scripting, for example you can create a special menu to instantiate that object.
Create a new folder called "Editor" and create a class file inside that folder, the class should be something like this :
using UnityEngine;
using UnityEditor;
public class GeneralEditorClass {
// Use this for initialization
[MenuItem("Create/ScriptableObject")] //this will create a new menu item that will call the "createObject()" method.
static void createScriptableObject () {
Values v = ScriptableObject.CreateInstance<Values>(); // this method will create an instance of your ScriptableObject class
AssetDatabase.CreateAsset (v, "Assets/MainValues.asset"); // create your asset in this location "Assets/MainValues.asset"
AssetDatabase.SaveAssets (); // save the asset
}
}
Now when you click the "ScriptableObject" item of the "Create" menu , a new scriptable object will show up in your "Assets" folder.
3) Using the ScriptableObject to save data in your script is easy, just create a public object of the "Values" class, and assign your Scriptable object to it, then what ever you do to that list will be saved.
public Values values;
values.blocks= new List<Transform>();
Ok, thanks! I will try that next time I get to the computer.
Your answer

Follow this Question
Related Questions
A node in a childnode? 1 Answer
Serializing / deserializing large lists 0 Answers
Importing and exporting save files. 0 Answers
Argument out of range when checking at List[0], C# 1 Answer
Saving and loading array (/list) of integers locally 1 Answer