Unity сохранение в excel
Загрузить текстовые данные в Unity (Excel в ScriptableObject)
В этой статье описывается программа: текстовый контент из внешних Excel Таблица читается в Unity и преобразуется в ScriptableObjec т объект
01. Введение в ScriptableObject
ScriptableObject - это контейнер данных, который можно использовать для хранения больших объемов данных независимо от экземпляров класса. Данные, хранящиеся в ScriptableObject, можно использовать напрямую по ссылке без создания копии данных в проекте. ScriptableObject не может быть прикреплен к GameObject, он существует как Assets проекта. Таким образом, ScriptableObject в основном используется для хранения данных, которые не изменятся.
Простое использование
При создании класса в скрипте он наследуется от ScriptableObject. Поскольку он существует как ресурс проекта, его можно создать только на панели ресурсов проекта.
02. импорт Excel
Для импорта листа Excel требуется инструмент: Unity-QuickSheet
После импорта инструмента в проект создайте новую папку (с любым именем) для хранения текстовых ресурсов и создайте две папки «Editor» и «Runtime» в этой папке (необходимые для инструмента импорта).
Затем щелкните правой кнопкой мыши в этой папке, чтобы открыть панель и создать файл инструмента.
Получите следующий файл
Установите информацию о файле импорта
Настройки генерации файла после импорта
Примечание: в редакторе есть скрипт, который сообщит об ошибке, вам нужно изменить его вручную
После создания файла вам необходимо импортировать окончательный файл ScriptableObject.
Примечание: если в файле Excel есть пустые таблицы, редактор сообщит об ошибке, но вы можете оставить это в покое.
Окончательный файл ScriptableObject можно просмотреть на панели
Таким образом, файл Excel преобразуется в файл ScriptableObject, используемый в проекте.
I try to write some data from my Unity3D application into an excel file. I've created the following function:
When I try to run the app I get the following error:
Unhandled Exception: System.TypeLoadException: Could not load type
'ExcelLibrary.SpreadSheet.CellStyle' from assembly 'ExcelLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.at (wrapper managed-to-native) System.Reflection.MonoMethodInfo:get_method_info (intptr,System.Reflection.MonoMethodInfo&)
at System.Reflection.MonoMethodInfo.GetMethodInfo (IntPtr handle) [0x00000] in :0
at System.Reflection.MonoMethodInfo.GetAttributes (IntPtr handle) [0x00000] in :0
at System.Reflection.MonoMethod.get_Attributes () [0x00000] in :0
at System.Reflection.MethodBase.get_IsVirtual () [0x00000] in :0
at Mono.CSharp.MemberCache.AddMethods (BindingFlags bf, System.Type type) [0x00000] in :0
at Mono.CSharp.MemberCache.AddMethods (System.Type type) [0x00000] in :0
at Mono.CSharp.MemberCache..ctor (IMemberContainer container) [0x00000] in :0
at Mono.CSharp.TypeHandle..ctor (System.Type type) [0x00000] in :0
at Mono.CSharp.TypeHandle.GetTypeHandle (System.Type t) [0x00000] in :0
at Mono.CSharp.TypeHandle.GetMemberCache (System.Type t) [0x00000] in :0
at Mono.CSharp.TypeManager.MemberLookup_FindMembers (System.Type t, MemberTypes mt, BindingFlags bf, System.String name, System.Boolean& used_cache) [0x00000] in :0
at Mono.CSharp.TypeManager.RealMemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList almost_match) [0x00000] in :0
at Mono.CSharp.TypeManager.MemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList almost_match) [0x00000] in :0
at Mono.CSharp.IndexerAccess+Indexers.GetIndexersForTypeOrInterface (System.Type caller_type, System.Type lookup_type) [0x00000] in :0
at Mono.CSharp.IndexerAccess+Indexers.GetIndexersForType (System.Type caller_type, System.Type lookup_type) [0x00000] in :0
at Mono.CSharp.IndexerAccess.ResolveAccessor (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression right_side) [0x00000] in :0
at Mono.CSharp.IndexerAccess.DoResolveLValue (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression right_side) [0x00000] in :0
at Mono.CSharp.ElementAccess.DoResolveLValue (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression right_side) [0x00000] in :0
at Mono.CSharp.Expression.ResolveLValue (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression right_side) [0x00000] in :0
at Mono.CSharp.Assign.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in :0
at Mono.CSharp.SimpleAssign.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in :0
at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec, ResolveFlags flags) [0x00000] in :0
at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec) [0x00000] in :0
at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.BlockContext ec) [0x00000] in :0
at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in :0
at Mono.CSharp.Block.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in :0
at Mono.CSharp.ToplevelBlock.Resolve (Mono.CSharp.FlowBranching parent, Mono.CSharp.BlockContext rc, Mono.CSharp.ParametersCompiled ip, IMethodData md) [0x00000] in :0
Can someone tell me why I get this exception? Because I think that my program is written ok.. Thank you.
Тем не менее, я столкнулся с множеством проблем в процессе его использования. Здесь я подведу итог, я надеюсь помочь другу, который видит это здесь.
Пространства имен для добавления
public class ExcelAccess
public static string Excel = "Book";
// Запрос таблицы меню
public static List SelectMenuTable()
string excelName = Excel + ".xlsx";
string sheetName = "sheet1";
DataRowCollection collect = ExcelAccess.ReadExcel(excelName, sheetName);
List menuArray = new List();
if (collect[i][1].ToString() == "") continue;
Menu menu = new Menu
/// Чтение Excel; необходимо добавить Excel.dll; System.Data.dll;
static DataRowCollection ReadExcel(string excelName,string sheetName)
string path= Application.dataPath + "/" + excelName;
FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
//int columns = result.Tables[0].Columns.Count;
//int rows = result.Tables[0].Rows.Count;
// таблицы могут быть получены по имени листа или по индексу листа
Логика здесь очень проста. Если вы не знаете, вы можете перейти к документу Excel, чтобы увидеть его, но эта библиотека Excel имеет ограничение, то естьМогу только читать, но не писатьИ только вПод редакторомДа, если при загрузке и загрузке пакета сообщается об исключении нулевого указателя, причина неясна.
Поэтому я предлагаю всем позволить плану написать Excel и сохранить его в виде файла активов с классом Unity ScriptableObject после прочтения его в редакторе, который легче прочитать во время выполнения.
Использование ScriptableObject
Моя реализация приведена ниже. Вы можете написать этот BookHolder в соответствии с вашим собственным классом сущностей.
Вывод данных в массивы на новые листы
Доброго времени суток! У меня есть код, написанный для скрытия строк с одинаковыми названиями.
Извлечение данных из txt и вставка в одноименные листы, сохранение и очистка
Здравствуйте. Помогите с решением вопроса. В два разных txt файла - построчно записан текст с.
Записать массивы в excel на вновь созданные листы
Здравствуйте! Мне необходимо записать массивы в excel на разные листы. Используя xlswrite я.
Ты никак не сохранишь GameObject, сохраняй отдельно все что надо, позицию, вращение, компоненты и т.д. А потом пересобирай объект с нуля.
кто мешает сериализовать? строку он умеет.
но в данном случае GameObject никто не сохраняет.
Добавлено через 45 секунд
сохрянять нужно данные, а не префаб
Тоесть циклом сохранять позицию, вращение, и прочие параметры, а потом так же загружать?
К примеру вектор сохранять по отдельности все три переменные?
Я правильно понял?
Добавлено через 2 минуты
Как-то геморно получаеться, чтобы сохранить один GameObject нужно прописать метод строк на 15-20. А для листа как минимум 40-50. И это только для сохранения.
Добавлено через 3 минуты
Ладно я ещё понимаю когда маленькая игра, а если крупная? Только одно сохранение состоит из 500+ строк? Что-то тут не так
Решение
вообще ниочем
часто намного больше если делаешь динамичные миры, например в рпг, с сохранением состояния всех объектов
Перенос данных на другие листы
Добрый день. К сожалению, знания VBA у меня сильно скудны, а потому написать адекватный макрос не.
Перенос данных на другие листы
Доброго времени суток. Хочу что бы данные из первого листа распространялись на все остальные листы.
Перенос данных в отдельные листы по форме и условию
Здравствуйте!! Есть массив Данных в разрезе Отделов, нужно перенести каждый Отдел из Данных в.
Поиск данных в листах и копирование их в отдельные листы
Есть файл который обновляется каждый день. В нём есть колонка U. Нужен макрос, который бы искал по.
Загрузка данных из файла csv на разные листы
Добрый день! Есть файл csv. Подскажите как выгрузить определенный текст из файла на определенный.
Unity-QuickSheet enables you to use google and excel spreadsheet data within Unity editor. With Unity-QuickSheet, you can retrieve data from a spreadsheet and save it as an asset file with a ScriptableObject format even without writing single line of code.
- Easy! No need to write any single line of code.
- Convenient! It can retrieve data from excel file. (both of xls and xlsx format are supported on Windows, only xls on OSX.)
- Flexible! It can also retrieve data from google spreadsheet.
- Fast! No need to write a parser to retrieve data, it automatically serializes retrieved data into Unity3D's ScriptableObject, the binary format and so it is fast than to use XML which is usually ASCII format.
Saying again, you don't need to write even single line of code to import data from a spreadsheet whatever Excel or Google spreadsheet.
Documentation, located on GitBook site found on here.
- Release Note: See the Release page for change log.
- Unity Forum: You can also find 'Unity-Quicksheet' on the Unity forum page found on here. Any feedbacks, patches or suggestions are always welcome!
-
on Unity's forum for details of serialization mechanism. is used to retrieve data from Google Spreadsheet. Note that GDataDB is slightly modified to support enum type. is used to read xls and xlsx file.
- All "*.dll" files of Google Data SDK are available at Google Data API SDK
- Newtonsoft.Json source code for net 2.0 is available at here , my previous effort to import a spreadsheet data into Unity.
This code is distributed under the terms and conditions of the MIT license.
Other code or libraries borrowed from GDataDB, NPOI and Google Data API SDK follow its license.
Copyright (c) 2013 Kim, Hyoun Woo
About
Unity-QuickSheet enables you to use spreadsheet file data within Unity editor.
Читайте также: