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.

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.

  1. 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();