Добрый день, нужна помощь в решении проблемы, проблема: В игре есть большое количество изображений, они нужны для покадровой анимации, размер примерно 30кб каждое (1000х600 пикселей +-). Изначально планировал загружать их все сразу в память с помощью Resource.Load, но получается что они в памяти занимают около 4х гб!!, что просто очень плохо, так как игра для андроид и на диске они занимают всего 80 МБ, при этом их загрузка происходит так же ооочень долго, не подскажете что можно сделать для того что бы это нормально работало и не занимало настолько много памяти? в Preloaded Assets добавил папку resources целиком, думал что поможет быстрее грузить всё, но нет. Количество изображений: около 3.5к, хотя даже при загрузке пары сотен уже долго жду (секунд 10)
Добавлено (05 января 2018, 21:40) --------------------------------------------- загружаю вот так
Код
Texture2D texture = Get<Texture2D>(string.Concat("Textures/", name)); return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
Добавлено (05 января 2018, 21:41) --------------------------------------------- Возможно нужно удалять из памяти Texture2D, пробовал просто не создавать спрайт а возвращать null, не помогло
Добавлено (05 января 2018, 21:48) --------------------------------------------- если вместо texture2d загружать sprite то работает быстрее, но опять слишком много памяти занимает
Код
public static class ResourceHelper { public static T Get<T>(string path) where T : Object { return Resources.Load<T>(path); }
public static AnimationClip GetAnimationClip(string name) { return Get<AnimationClip>(string.Concat("Animation/", name)); }
Разработка программного обеспечения для ОС Windows и Android, клиент-серверные, облачные приложения, работа с БД и многое другое - https://www.weblancer.net/users/zhuravelsv/
Сообщение отредактировал zhuravelsv - Пятница, 05 Января 2018, 21:38
не подскажете что можно сделать для того что бы это нормально работало и не занимало настолько много памяти?
Зачем тебе сразу столько текстур в кадре? Иначе непонятно для чего ты их все в память сразу загружаешь. Загружай и выгружай по мере использования
Цитата
они нужны для покадровой анимации
Если на листе с анимацией 5 кадров, а одна анимация на 10 листов, например, то это плохая идея, тем более для мобилок, с учетом того что у тебя, например, больше 100 разных объектов в кадре (при таком размере атласов с анимацией)
Плюс глянь на сжатие текстур, если оно не поддерживается android, то может иметь место двойная распаковка в память (сжатые сохранятся вместе с разжатыми), считай x2 затрат памяти на все текстуры. After Time Last Of Time Happy Pumpkin
Зачем тебе сразу столько текстур в кадре? Иначе непонятно для чего ты их все в память сразу загружаешь. Загружай и выгружай по мере использования
В кадре все конечно не использую, но как я писал выше они долго подгружаются, у меня на один обьект 75 кадров, одновременных анимаций - сейчас одна (пару дней назад было около 20, заказчик решил немного изменить их показ, но не факт что он не передумает, то есть должен загружать сразу штук 20 обьектом)
Добавлено (05 января 2018, 23:01) ---------------------------------------------
ЦитатаRutraple ()
Плюс глянь на сжатие текстур, если оно не поддерживается android, то может иметь место двойная распаковка в память (сжатые сохранятся вместе с разжатыми), считай x2 затрат памяти на все текстуры.
Это у меня на ПК прям в редакторе всё так печально (4гб и долгая подгрузка), на андроиде забивает 2гб ОЗУ и крашится
Добавлено (05 января 2018, 23:07) --------------------------------------------- Попробую в атласы всё запихнуть, но если вдруг кто-то имеет ещё идеи и предположения просьба написать сюда
Разработка программного обеспечения для ОС Windows и Android, клиент-серверные, облачные приложения, работа с БД и многое другое - https://www.weblancer.net/users/zhuravelsv/
но как я писал выше они долго подгружаются, у меня на один обьект 75 кадров
Андроид весьма неплохо работает с потоками. Я писал себе кэш, который загружал, выгружал графику, звуки, музыку и фпс сохранялся стабильно, даже при постоянных загрузках/выгрузках.
Цитата
Попробую в атласы всё запихнуть
с этого надо начинать в первую очередь. Make games, not war Посмотри мои игры для мобилок, влепи лукаса! Тут я делаю игры на Unity
Это частично решило проблему, загрузка намного быстрее, хотя далеко не идеально, и памяти теперь использует не 4гб а 1, теперь подумаю над загрузкой не всего сразу а частично только то что нужно в текущий момент Разработка программного обеспечения для ОС Windows и Android, клиент-серверные, облачные приложения, работа с БД и многое другое - https://www.weblancer.net/users/zhuravelsv/