Создание экземпляров ScriptableObjectsC#

Место общения программистов C#
Ответить
Anonymous
 Создание экземпляров ScriptableObjects

Сообщение Anonymous »

Может ли кто-нибудь рассказать мне о преимуществах/недостатках моего подхода?
У меня есть статусные эффекты и навыки в виде 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»