Top.Mail.Ru
Ответы

Как сериализировать пользовательский класс в юнити?

Пытаюсь сделать бинарную сериализацию для сохранения игрового процесса, но выскакивает ошибочка
SerializationException: Type 'UnityEngine.MonoBehaviour' in Assembly 'UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
И проблема в списке с пользовательским типом данных (если этот список убрать, всё работает без ошибок)

1234567891011121314
 using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using System; 
 
[Serializable] 
public class GameData 
{ 
     
    public List<InventorySlot> slotsPlayer = new List<InventorySlot>(); 
    public float hpPlayer; 
    public int money; 
} 
 

При этом атрибут [Serializable] у InventorySlot имеется

12345678910111213141516171819202122232425
 using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.EventSystems; 
using TMPro; 
using UnityEngine.UI; 
 
[System.Serializable] 
public class InventorySlot : MonoBehaviour, IPointerClickHandler 
{ 
    public Transform slot; 
    public ItemMainParametr item; 
    public int amount; 
    public int maxAmount; 
    public bool isEmpty = true; // переменная обозначающая, что слот пустой 
    public GameObject iconGO; // для картинки 
    public TMP_Text itemAmountText; 
    public Transform buyPanel; 
    public bool eventCursor = false; 
    public GameObject itemInfoPanelPrefab; // просто префаб панельки информаии о предмете для копирования  
    public GameObject itemInfoPanel = null; // сама переменная, которая хранит скопированный префаб 
    public Transform playerInterfaceCanvas; // родительский канвас всех этих панелек 
 
    public float moveX = 110f; // переменные для выбора позиции 
    public float moveY = -50f; //  таблички с информацией о предмете  

не знаю, что мне делать, и не совсем понимаю в чём ошибка, есть лишь предположение, что в классе InventorySlot есть переменные с не сериализируемым типом данных и их надо, как то сделать сериализируемыми

По дате
По Рейтингу
Аватар пользователя
Ученик
8мес

А поля разве не надо {set; get} объявить? Ну и XmlAtribut прописать.

Аватар пользователя
Искусственный Интеллект
8мес

>есть лишь предположение, что в классе InventorySlot есть
Да ни хрена подобного. У тебя сам MonoBehaviour не сераиализуемый.
Хочешь что-то сериализовать - не наследуйся от него.