Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 4

Unserialize не работает в реализации сохранения для игры на Unity

30.10.2014, 23:31. Показов 1550. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здрасти, я новичек, хочу сделать сохранялку для игры на юнити (там на си шарпе можно скриптить)

алгоритм сохранения: собрать все сохраняемые данные, сериализовать, шифрануть, записать в файл
алгоритм загрузки: прочитать файл, расшифровать, десериализовать, задать объектам значения


весь косяк происходит на моменте загрузки при десериализации, но только если объем сохраняемых данных большой (напрмер 8кб уже не загружает, а 2 кб норм грузит)

приведу кусок кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void Save(string path, T data){
        MemoryStream ms = new MemoryStream ();
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(ms, data);
        Debug.Log ("len1 = "+ms.Length);
        string original = Encoding.ASCII.GetString (ms.ToArray ());
        byte[] encrypted;
        Rijndael myRijndael = Rijndael.Create ();
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(cryptKey, SALT);
        myRijndael.Key = pdb.GetBytes(32);
        myRijndael.IV = pdb.GetBytes (16);
        encrypted = EncryptStringToBytes(original, myRijndael.Key, myRijndael.IV);
        FileStream fs = new FileStream (path, FileMode.Create, FileAccess.Write, FileShare.Write);
        fs.Write (encrypted, 0, encrypted.Length);
        fs.Close ();
    }
этот кусок всегда норм срабатывает, в логе дает (например) len1 = 6611
далее загружаю тот же самый файл
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static T Load(string path){
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        byte[] bytes = new byte[numBytesToRead];
        while (numBytesToRead > 0){
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0) break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        fs.Close();
        Rijndael myRijndael = Rijndael.Create ();
        Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(cryptKey, SALT);
        myRijndael.Key = pdb.GetBytes(32);
        myRijndael.IV = pdb.GetBytes (16);
        string decoded = DecryptStringFromBytes(bytes, myRijndael.Key, myRijndael.IV);
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(decoded));
        Debug.Log ("len2 = "+ms.Length);
        BinaryFormatter formatter = new BinaryFormatter();
        T ret = (T)formatter.Deserialize(ms);
        return ret;
    }
в логе дает len2 = 6611
ошибку дает строка T ret = (T)formatter.Deserialize(ms);
повторюсь, на маленьких файлах все норм, а на большом глюк, ошибка такая:



Code
1
2
3
4
5
6
7
8
9
SerializationException: Unexpected binary element: 9
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, System.IO.BinaryReader reader, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:254)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (System.IO.BinaryReader reader) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:154)
System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, System.IO.BinaryReader reader, Boolean readHeaders, System.Object& result, System.Runtime.Remoting.Messaging.Header[]& headers) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:110)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:179)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:136)
Serializer`1[saveDataType].Load (System.String path) (at Assets/scripts/saveLoadGame.cs:163)
saveLoadGame.loadGameData (Int32 slot) (at Assets/scripts/saveLoadGame.cs:73)
playerGUI.OnGUI () (at Assets/scripts/player/playerGUI.cs:132)




типы сериализуемых данных: List<string> и string ну и свои типы, в которых комбинации предыдущих типов



господа, подскажите как прознать че исправить, че как ваще быть?!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2014, 23:31
Ответы с готовыми решениями:

Есть тут кто пишет на C# для Unity? Под игры созданные в Unity читы делаются?
Привет. Есть тут кто пишет на C# для Unity? Под игры созданные в Unity читы делаются? Такое реально или нет. Не реально

Есть ли здесь ошибка? Писал скрипт в Unity для игры, но почему-то при запуске все зависает и нечего не работает
Я скинул пару примеров с циклами может ошибка в них. 1) int Amaunt = 0; foreach (int Ship in ShipsCount) Amaunt += Ship; ...

Как создавать точки сохранения в unity? Чтобы если персонаж упал, то он возвращался на определенную точку сохранения
Я подключил библиотеку : using UnityEngine.SceneManagement; Далее подключил условие, если персонаж достигает определенных координат,...

1
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 4
12.11.2014, 14:37  [ТС]
че совсем нет идей?

Добавлено через 23 часа 46 минут
может из-за кодировки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2014, 14:37
Помогаю со студенческими работами здесь

Не работает функция unserialize
нормальный сериализованный массив функция не десериализует! или есть у кого-то рабочая функция, котор. десериализует обьект,...

Меню для игры на Unity
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class...

Библиотека классов на C# для игры на Unity
NullReferenceException: Object reference not set to an instance of an object - EatricText.CommandOne.get_Name () ...

Нужен совет в создании сервера для мобильной игры на Unity
Есть проект мобильной игры, клиент будет делаться на Unity. В ней будет арена с битвой двух игроков с возможностью управления и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru