Речь не о том как просто это сделать, а как лучше и максимально эффективно организовать взаимодействие логики объектов между собой, и вообще какие варианты есть?
Вот допустим у вас есть простенькая игра в духе марио. У вас есть игрок, всякие итемы, монстры и части уровня. Всё это имеет какие то состояния, может добавляться и удаляться, а так же быть в множественном количестве, а так же мы можем всё это сохранять/считывать с диска. А так же у нас каждый объект имеет свой собственный экземпляр скрипта. Как все эти дела эффективно хранить и осуществлять поиск и перебор этих объектов и их свойств? Я конечно могу сделать менеджер который бы их сразу загружал в 1 стек и с ним работать, но боюсь такой топорный метод будет медленным и избыточным.
Это вопрос не по юнити или халфе. Это вопрос в целом по архитектуре подобных игр.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Как ни делай, а перебирать ты их всё равно будешь в обычном цикле.
Если конечно не предполагается, что активны лишь объекты в каком-то радиусе вокруг игрока.
Цитата:
FiEctro писал: Как все эти дела эффективно хранить
Всмысле эффективно? Есть два варианта всего. Либо у тебя все объекты имеют одинаковые поля, либо каждый объект имеет только те, которые ему нужны, но в цикле взаимодействует через абстрактный интерфейс.
Цитата:
FiEctro писал: осуществлять поиск и перебор этих объектов и их свойств?
Определись, какие свойства ты вообще собрался искать. Как правило это строки. Я не представляю себе ситуацию типа "найди объект, у которого в некотором поле значение 512.0". А вот ситуацию "найди объект с именем mario" вполне хорошо представляю.
Добавляй объекты в ассоциативные многомерные массивы - это ИМХО самый быстрый способ поиска. Сначала в базе выбираешь по какому имени поля искать, потом перебираешь нужные имена, а к ним уже прилагаются списки всех объектов, которые имеют такое имя.
Цитата:
FiEctro писал: такой топорный метод будет медленным и избыточным.
Цитата:
FiEctro писал: А так же у нас каждый объект имеет свой собственный экземпляр скрипта
Зависит от производительности этих самых скриптов.
Дядя Миша писал: Определись, какие свойства ты вообще собрался искать. Как правило это строки. Я не представляю себе ситуацию типа "найди объект, у которого в некотором поле значение 512.0". А вот ситуацию "найди объект с именем mario" вполне хорошо представляю.
Добавляй объекты в ассоциативные многомерные массивы - это ИМХО самый быстрый способ поиска. Сначала в базе выбираешь по какому имени поля искать, потом перебираешь нужные имена, а к ним уже прилагаются списки всех объектов, которые имеют такое имя.
Мне нужно просто как то пробросить ссылки между объектами чтобы было проще между ними пробрасывать взаимодействия. К примеру те-же итемы.
Со статическими то всё понятно, а вот с динамическими пока даже хз.
Цитата:
XaeroX писал: Предложи несколько вариантов - мы обсудим плюсы и минусы каждого.
А так-то чего рассуждать?
Я спрашиваю какие варианты существуют, ты в ответ пишешь чтобы я их перечислил и проверил. Я отвечу - если знал бы, проверил, и не создавал таких бы тем.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: А что ты имеешь в виду под статическими и динамическими.
Инстансы, любые объекты которые могут создаваться и удаляться в любое время. Например тот же монстр может заспавниться, а потом быть удалён т.к. его убили.
Цитата:
Дядя Миша писал: Что ты там вообще делаешь? Очередную мобильную дрочильню?
Типа того. Но тут скорее просто пытаюсь повысить свои скиллы в программировании. Т.е. вручную прокидывать ссылки, всякие синглтоны и делегаты я могу конечно, но вот когда у тебя объекты не в единичном экземпляре начинаются проблемы, мне приходится создавать списки куда я заношу свои инстанс объекты, а так же могу удалять их и редактировать сам лист (шарпы). Но вот если у тебя 2 и более листа, всё это очень не удобно перебрасывать и конвертировать между собой. Я вот и думаю возможно есть какие то уже готовые шаблоны для удобного менеджмента объектов. Опять же вопрос движка я опускаю, мне интересно как бы вы сами поступили в подобной ситуации если бы писали проект с нуля.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Я отвечу - если знал бы, проверил, и не создавал таких бы тем.
Глупости, конечно создавал бы.
Всегда полезно обсудить свои проверки с другими, да к тому же у других тоже может быть опыт в этом.
А тема "перечислите мне все варианты какие есть" - это так себе идея. Я, например, ни одного варианта тебе не назову, потому что не знаю ничего на память. Но если увижу варианты других - скорее всего, сориентируюсь, будет ли вариант годным и эффективным.
FiEctro писал: тот же монстр может заспавниться, а потом быть удалён т.к. его убили.
Трупик-то останется. В целом статичными объектами можно считать сцену и игрока - их нельзя удалять ни в коем случае. Остальное можно.
Цитата:
FiEctro писал: Но тут скорее просто пытаюсь повысить свои скиллы в программировании
Без конкретных задач это потеря времени.
Цитата:
FiEctro писал: мне интересно как бы вы сами поступили в подобной ситуации если бы писали проект с нуля.
Для физики - линейный перебор, для поиска - ассоциативные массивы.
Всё зависит от кол-ва объектов на сцене. Тысяч до десяти оптимизировать не нужно.
Добавлено 19-01-2024 в 23:10:
Примерчег релевантный: в кваке максимум 600 объектов, линейный перебор для физики, поиск объекта по имени линейным перебором и всё это ворочалось на первом пне. И ничего.
Дядя Миша писал: Для физики - линейный перебор, для поиска - ассоциативные массивы.
Всё зависит от кол-ва объектов на сцене. Тысяч до десяти оптимизировать не нужно.
Примерчег релевантный: в кваке максимум 600 объектов, линейный перебор для физики, поиск объекта по имени линейным перебором и всё это ворочалось на первом пне. И ничего.
Получается что нечего выёживаться и достаточно просто хранить все динамические объекты в 1 листе?
Цитата:
Дядя Миша писал: для поиска - ассоциативные массивы.
Это какой то конкретный паттерн? Неужели поиск по строкам будет быстрее?
Цитата:
Дядя Миша писал: Без конкретных задач это потеря времени.
Ну так я обозначил задачу. Просто сейчас в моих проектах нет никакой архитектуры конкретной, всё наслаивается друг на друга из-за чего приходится дублировать некоторый код.
Цитата:
XaeroX писал: Всегда полезно обсудить свои проверки с другими, да к тому же у других тоже может быть опыт в этом.
Я же написал либо всё в 1 лист пихать, либо иметь несколько таких независимых но уже более конкретизированных листов живущих своей жизнью.
Цитата:
Дядя Миша писал: Трупик-то останется. В целом статичными объектами можно считать сцену и игрока - их нельзя удалять ни в коем случае. Остальное можно.
Я так понял что вообще объекты удалять и создавать желательно по минимуму и с использованием карутинов, многим монстрам можно просто менять трансформ и отключать физику, вместо удаления, а при рестарте снова их возвращать на место и сбрасывать их состояние.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Получается что нечего выёживаться и достаточно просто хранить все динамические объекты в 1 листе?
Ну да. Твои оптимизации наоборот скорость снизят.
Цитата:
FiEctro писал: Неужели поиск по строкам будет быстрее?
Я не ищу по строкам, у меня таблица строк, у каждой строки уникальный идентификатор. Их и сравниваю.
Цитата:
FiEctro писал: Я так понял что вообще объекты удалять и создавать желательно по минимуму
Удалять можно как угодно, при условии что ты готов корректно поддерживать связи между объектами, на случай их внезапного удаления.
Тут нужно что-то типа умного указателя.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!