Как сказал Дейв в своем комментарии, Sprite является ссылочным типом, поэтому Unity загружает спрайт в память один раз, а затем все другие экземпляры объектов, которые ссылаются на конкретную точку Sprite, на ее адрес памяти (как система указателей C).должно сработать).Так что в вашем случае, даже если вы создадите 1000 объектов из вашего объекта Scriptable, все они будут указывать на один и тот же спрайт.
Как правило, если вы используете Resources.Load()
для объекта, то каждый загруженный объектбудет использовать ту же ссылку на переменную, что и родительский объект Scriptable.Но если вы создаете новый объект каждый раз, когда вы хотите создать его, скажем, с помощью конструктора класса, то каждый объект (и впоследствии их переменные) будет иметь свое собственное пространство в памяти.В вашем случае это произошло бы, если бы вы использовали Sprite mySprite = new Sprite()
каждый раз, когда создавали объект Scriptable.
Таким образом, штраф за память не добавляется за добавление нескольких экземпляров одного и того же Sprite.в ваших объектах Scriptable (использование CPU / GPU - другая проблема, не связанная с вашим вопросом, но, тем не менее, заслуживающая упоминания).Проверка вашей памяти может иметь изменяющиеся значения, если вы выполняете ее в своей игре вместе со всеми другими выполняемыми операциями, поэтому я предлагаю вам создать новый проект и затем попытаться измерить значения из инспектора.Если вы сделаете это, пожалуйста, поделитесь своими выводами здесь, так как это интересная тема.
Кроме того, проверьте этот пост из обмена стека GameDev для получения дополнительной информации по вашему вопросу.