Ты можешь сохранять в ручную через BinaryWriter, BinaryReader или же Json. Сами префабы нельзя сохранять, а вот их данные можно.
Вот тебе простая реализация как можно данные сохранить. (код я не проверил на работоспособность, но тем не менее)
public interface IData
{
void Read(BinaryReader reader);
void Write(BinaryWriter writer);
}
public class CustomClass : IData
{
private int _customVar;
public void Write(BinaryWriter writer)
{
writer.Write(_customVar);
}
public void Read(BinaryReader reader)
{
_customVar = reader.ReadInt32();
}
}
public class PrefabClass: MonoBehaviour, IData
{
private int _intValue;
private float _floatValue;
private string _stringValue;
private CustomClass _customClass;
public void Write(BinaryWriter writer)
{
writer.Write(_intValue);
writer.Write(_floatValue);
writer.Write(_stringValue);
((IData)_customClass).Write(writer);
}
public void Read(BinaryReader reader)
{
// Читать нужно в том же порядке что и пишется
_intValue = reader.ReadInt32();
_floatValue = reader.ReadSingle();
_stringValue = reader.ReadString();
// Свои данные
// ...
((IData)_customClass).Read(reader);
}
}
public class DictionaryClass
{
private Dictionary<string, IData> _dict = new Dictionary<string, IData>();
public void Save()
{
using (BinaryWriter writer = new BinaryWriter(File.Open("Path", FileMode.Create)))
{
foreach(var item in _dict)
{
item.Write(writer);
}
}
}
public void Load()
{
if (File.Exists("Path"))
{
using (BinaryReader reader = new BinaryReader(File.Open("Path", FileMode.Open)))
{
foreach(var item in _dict)
{
item.Read(reader);
}
}
}
}
}