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.
You can use a ScriptableObject, read the Documentation
-
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;
}
-
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.
-
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();