У меня есть статусные эффекты и навыки в виде ScriptableObjects с уникальными полями, которые различаются для каждого игрового персонажа (например, длительность, урон, castTime, все зависит от индивидуальных характеристик персонажа).
Более того, у меня в них большая часть логики, которая просто контролируется только событиями в StatusController каждого объекта< /код>/
Код: Выделить всё
SkillCastingControllerИтак, я придумал использовать:
Код: Выделить всё
Object.Instantiate(assigned shared ScriptableObject instance)
Существует ли большой расход памяти при использовании Object.Instantiate(ScriptableObject)? Потому что он будет часто использоваться во время выполнения (применение эффектов состояния во время выполнения = использование Object.Instantiate).
Я просто надеюсь, что использование ScriptableObjects будет работать так же, как и если бы это были простые классы, с той лишь разницей, что их можно было бы создавать и редактировать в редакторе.
И если это предположение верно:
Код: Выделить всё
Object.Instantiate(assigned in inspector StatusEffect/Skill ScriptableObject)
Код: Выделить всё
new StatusEffect(statuseffects[0]/Skills[0]).
Цитата профессионала, есть мысли?:
Цитата профессионала, есть мысли?:
Цитата профессионала, есть мысли?:
p>
SO — это просто класс, созданный для данных, которые имеют удобные последствия для сериализации Unity. Если вы создаете экземпляр SO во время выполнения, что является распространенным шаблоном, обеспечивающим доступ только для чтения во время выполнения, вы просто дублируете память корневого объекта ScriptableObject. Поскольку Object.Instantiate не дублирует неявно какие-либо субактивы, на которые, если на них ссылается корень, клон сохранит ссылку на исходные субактивы Scriptable Object. Если эти ScriptableObjects не выделяют огромный объем памяти, отрицательные последствия дублирования должны быть номинальными.
Подробнее здесь: https://stackoverflow.com/questions/574 ... bleobjects
Мобильная версия