двухмерный массив в инспекторе и ограничения размера массива
| |
alexsilent | Дата: Четверг, 29 Марта 2018, 08:38 | Сообщение # 1 |
почти ветеран
Сейчас нет на сайте
| Хочу сделать свой редактор карты в юнити. Где я буду расставлять местность прямо в редакторе, по сетке, чтобы не было промежуточных значений позиции, а потом скрипт прямо в редакторе должен будет считать все объекты и сохранить в 2-х мерный массив, так вот вопрос: 1) Можно ли инициировать двухмерный массив String прямо в редакторе, чтобы там проставить значения c помощью скрипта. И сохранится ли это навсегда, прямо в инспекторе, в этом уровне, в этом скрипте массива? Ибо я потом хочу удалить все объекты (для оптимизации) и сохраненный двухмерный массив должен будет всё это хранить, чтобы уже в игре потом создавать объекты.
Если не получится с двухмерный массивом, тогда придётся читить с одномерным массивом. Если взять 2-х мерный массив 10 на 10 клеток и превратить в одномерный, то это будет 100 клеток.
2) Интересно, сколько максимум слотов может хранить одномерный массив прямо в инспекторе? Если допустим у меня территория мира 300 на 300, то в одномерном массиве это 90 000, то можно ли такое сохранить прямо в инспектор массива? Главное не разворачивать этот массив, а то всё стопудов зависнет)) Надо потестить.
Добавлено (29 Марта 2018, 08:38) --------------------------------------------- Одномерный массив стопудов сможет сохранить значения, но сколько максимум, я пока боюсь тестировать, потому-что у меня тупо 90000 зависнет в юнити. У меня даже на 1000 зависало в инспекторе)
Сообщение отредактировал alexsilent - Четверг, 29 Марта 2018, 09:08 |
|
| |
drcrack | Дата: Четверг, 29 Марта 2018, 09:02 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Честно говоря сложно придумать более глупый и неэффективный способ хранить карту Почему нельзя просто хранить список объектов с их координатами?.. Но попробуй бинарную сериализацию поставить если еще не включил, полагаю будет быстрее работать
|
|
| |
alexsilent | Дата: Четверг, 29 Марта 2018, 09:18 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Цитата Почему нельзя просто хранить список объектов с их координатами?.. А как этот список держать? Ведь их в итоге и будет 90000 объектов, в массиве они будут оптимизированнее, в массиве придётся сохранять имя, а координаты являются самой яйчейкой массива, чем если список из 90000 объектов, сохранять там имя объекта, и координаты у каждого, это больше информации будет. Про бинарную сериализацию погуглю, спасибо!
|
|
| |
drcrack | Дата: Четверг, 29 Марта 2018, 09:22 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Ты хочешь сказать что ты вручную расставишь на карте 90000 объектов, в каждой ячейке?.. И в любом случае используй ScriptableObject, ведь тебе не нужен инспектор.
Сообщение отредактировал drcrack - Четверг, 29 Марта 2018, 09:24 |
|
| |
alexsilent | Дата: Четверг, 29 Марта 2018, 10:08 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| Потестил, массив в инспекторе просто не держит даже 9000 String из списка, А если массиву придать значение HideInInspector, то хоть оно и быстро инициируется через скрипт, но не сохраняется, если заново открыть этот уровень, то список будет девственно чист. Придётся гуглить, как создать txt файл внутри юнити и записать туда значения, в потом в игре считывать. Либо есть ещё один способ, в инспекторе сохранить в String, все данные, но может опять не потянуть. То есть сохранить вот так: "Mountain1/Forest10/TownB1/Mountain1/Sea1" сейчас потестирую, можно ли создать такой большой список в String...
Добавлено (29 Марта 2018, 09:45) ---------------------------------------------
Цитата drcrack ( ) Ты хочешь сказать что ты вручную расставишь на карте 90000 объектов, в каждой ячейке?.. Я просто хочу визуально контролировать процесс, иначе я не знаю как еще, кстати идея хорошая, надо проверить смогу ли столько объектов расставить) я хочу игру сделать типа Rings of Power (SEGA) с открытым миром, и потому нужен именно такой способ сохранения данных. Но визуально редактировать мне тоже нужно, то есть в конечном итоге мне нужно получить в игре то что я вижу в редакторе, поэтому способ с посторонними редакторами не сработает типа Tiled.Добавлено (29 Марта 2018, 10:08) --------------------------------------------- C текстом нашёл , как можно манипулировать/сохранять. В принципе такой вариант самый идеальный. А потом в игре считывать значения. https://support.unity3d.com/hc/en-us/articles/115000341143-How-do-I-read-and-write-data-from-a-text-file-
Сообщение отредактировал alexsilent - Четверг, 29 Марта 2018, 09:51 |
|
| |
drcrack | Дата: Четверг, 29 Марта 2018, 10:11 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Так все-таки, если на карте скажем 500 объектов, почему нельзя просто сделать список на 500 позиций, зачем хранить еще 89500 пустых ячеек?
|
|
| |
alexsilent | Дата: Четверг, 29 Марта 2018, 10:17 | Сообщение # 7 |
почти ветеран
Сейчас нет на сайте
| Еще один вариант: сделать редактор прямо в юнити, сделать игру-редактор, то есть запустив этот особый уровень, можно будет с оптимизацией, да и еще простым кликом менять любую клетку массива на лету, а потом сохранять в txt файл весь массив. В самом юнити я не особо хорошо знаком с инструментами редактирования, поэтому это будет очень долго, чтобы разобраться.Добавлено (29 Марта 2018, 10:15) ---------------------------------------------
Цитата drcrack ( ) Так все-таки, если на карте скажем 500 объектов, почему нельзя просто сделать список на 500 позиций, зачем хранить еще 89500 пустых ячеек? Если глянуть на скришоты Rings of Power (Sega Genesis) станет немного понятнее, то есть там пустых клеток от силы 20%, то есть заполнение там на 80%, а остальное чистое море. То есть эта игра мне и понравилась тем, что в ней просто очень дофига интерактива, в отличии от пустых игр SquareEnix, где как раз и 500 объектов на всю глобальную карту))Добавлено (29 Марта 2018, 10:17) --------------------------------------------- PS мне игры SquareEnix нравятся (чего только стоят финалки и Chrono Trigger/Cross), но всё же в планах побольше наполнить мир, прям до отказа)
|
|
| |
drcrack | Дата: Четверг, 29 Марта 2018, 10:22 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Почему именно txt файл? Тут вроде никакого текста не планируется) Используй бинарную сериализацию, тупо пиши/читай все ячейки подряд
|
|
| |
Otinagi | Дата: Пятница, 30 Марта 2018, 09:06 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| 100500 лет назад, когда у меня на компе и оперативки не хватало на огромные массивы, необходимо было сделать 10 000 на 10 000 карту. В итоге создавался бинарный файл в котором байты соответствовали ячейкам массива по формуле data = x + y * size_x, где x, y = [0; 9 999]. Потом у меня был уже в игре массив, который на несколько значений x и y больше, чем необходимо выводить на экран (игра была ASCII). В итоге я массив заполнял актуальными данными смещаясь по бинарному файлу. А лишние ячейки массива нужны были, чтобы плавно перемещать карту, так как прогнать столь огромный файл за один кадр было затратно, в итоге я прогонял в несколько этапов. При этом, можно заметить, что затратно было прогонять только по y, так по x можно было за один раз сместиться и сразу счытать блок данных, а не байт.
«Смерти меньше всего боятся те люди, чья жизнь имеет наибольшую ценность.» Иммануил Кант
Сообщение отредактировал Otinagi - Пятница, 30 Марта 2018, 09:08 |
|
| |
Ordan | Дата: Пятница, 30 Марта 2018, 09:57 | Сообщение # 10 |
Главный зомби
Сейчас нет на сайте
| Хз я делаю через ScriptableObject карты любой величины, создаю класс и делаю двумерный массив классов и у каждой клетки туча параметров.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
alexsilent | Дата: Пятница, 30 Марта 2018, 13:06 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Ordan, честно говоря я не совсем понял, как ScriptableObject пользоваться. Точнее я понял, что это крутая вещь, для данных. Но у меня не сохраняются они. Использовал вот эти примеры, чтобы понять как это работает, и через некоторое время, созданные данные по первому примеру обнуляются и становятся пустыми. Не знаю что с этим делать и в уроке вроде не сказано, что надо делать, чтоб данные навсегда сохранились. https://unity3d.com/ru....objects
PS А так вещь офигенная, спасибо за наводку, может в будущем пойму как с этим работать, а то я пока все данные привязываю к неудаляемому объекту, который постоянно должен быть на уровне, чтобы игра работала, и это немного парит. А со ScriptableObject, в теории от этого костыля можно было бы навсегда избавиться)
Сообщение отредактировал alexsilent - Пятница, 30 Марта 2018, 13:09 |
|
| |
|