Комментарии 8
Довольно обычная вещь, без изюминки. Таких пулов довольно много. Чем ваш реализация отличается от других пулов? Зачем вы решили делать свой велосипед?
Лично я из бесплатных пользовался двумя — ObjectPool и PoolBoss. Первый попроще, второй понавороченнее. Оба могут работать через методы расширений — вызываются прямо у GameObject или Transform. PoolBoss дополнительно имеет настройки в редакторе — довольно удобно.
Хм… Сейчас зашёл на страницу PoolBoss-а в AssetStore — он теперь не бесплатный… Вышла новая версия, Unity 5.0 ready
Лично я из бесплатных пользовался двумя — ObjectPool и PoolBoss. Первый попроще, второй понавороченнее. Оба могут работать через методы расширений — вызываются прямо у GameObject или Transform. PoolBoss дополнительно имеет настройки в редакторе — довольно удобно.
Хм… Сейчас зашёл на страницу PoolBoss-а в AssetStore — он теперь не бесплатный… Вышла новая версия, Unity 5.0 ready
+3
Туториал. Как то написал, использую до сих пор. Нужен был универсальный.
0
Это не туториал, это код с минимальными комментариями.
+1
Два чая господину выше. Это не туториал. В туториалах люди чуть ли не каждую строчку объясняют, и не кусками кода, а помаленьку «пишут» вместе с читателями. А тут просто гигантские шматы кода с минимумом комментариев.
Поставил бы минус, если б мог.
Поставил бы минус, если б мог.
0
На ключевых моментах сделаны пометки
иначе как бы это выглядело на примере одной функции. Специально писал код так, чтобы можно было просто его читать. Иначе вышло бы что-то вроде.
Как видно я просто перевел конструкции языка и методы на русский язык. По поводу комментариев, рекомендую почитать книгу «Стив Макконнелл — Совершенный код». А конкретно почему комментарии не всегда хорошо и что-то такое само-документирующий код. Встречал код людей которые правят код, но не правят комментарии. Вот это действительный корень зла. Напиши нормально, что делает метод в его заголовке. Напиши смысл переменной не жалея слов. В этом и есть вся красота интерфейсного программирования.
иначе как бы это выглядело на примере одной функции. Специально писал код так, чтобы можно было просто его читать. Иначе вышло бы что-то вроде.
public virtual T Pop<T>(K groupKey) where T : V // достаем из пула
{
T result = default(T);// значение по умолчанию
if (Contains(groupKey) && objects[groupKey].Count > 0) // Если есть в контейнере и контейнер не пустой
{
for (int i = 0; i < objects[groupKey].Count; i++) // перебираем контейнер
{
if (objects[groupKey][i] is T) // если тип соответствует
{
result = (T)objects[groupKey][i]; // присваиваем результату соответствие
Type type = result.GetType(); // получаем тип
RemoveObject(groupKey, i); // удалем из базы данных
RemoveFromCache(result, type); // удаляем из кеша
result.Create(); // вызываем псевдо-конструктор
break; // дальше что-то искать нет смысла, обрываем
}
}
}
return result; // получаем результат
}
Как видно я просто перевел конструкции языка и методы на русский язык. По поводу комментариев, рекомендую почитать книгу «Стив Макконнелл — Совершенный код». А конкретно почему комментарии не всегда хорошо и что-то такое само-документирующий код. Встречал код людей которые правят код, но не правят комментарии. Вот это действительный корень зла. Напиши нормально, что делает метод в его заголовке. Напиши смысл переменной не жалея слов. В этом и есть вся красота интерфейсного программирования.
0
Дело не в комментариях к коду, а в объяснениях, зачем было выбрано именно такое решение, и почему так. Тогда получился бы туториал с хорошей заявкой на обучение новичков.
Что такое if или foreach знает каждый программист, который учится больше нескольких недель. А вот на этих вопросах можно было бы и остановиться подробнее:
— для чего был создан интерфейс IPoolObject
— почему был выбран стек (псевдостек) для хранения объектов в пуле
— для чего были выбраны именно такие методы в классах (имя метода OnPush в интерфейсе, на мой взгляд, отражает технические особенности пула, а не назначение этого метода)
— как организован доступ к пулу (через статическое поле Instance, такой полу-синглтон. Кстати, зачем дублировать в менеджере все методы самого пула? ведь вместо Instance = this можно было написать Instance = poolManager)
— что такое yield?
— в самом начале вы указали, что ваш пул можно использовать в Photon Server. Другие пулы нельзя в нём использовать? Что вы сделали, чтобы можно было. И вообще — что такое Photon?
Если бы в статье были ответы на эти и подобные вопросы, тогда получился бы отличный туториал, который оценили бы гораздо выше. А сейчас получилась статья в стиле «смотрите как я умею!», на что я и ответил в первом комменте.
Что такое if или foreach знает каждый программист, который учится больше нескольких недель. А вот на этих вопросах можно было бы и остановиться подробнее:
— для чего был создан интерфейс IPoolObject
— почему был выбран стек (псевдостек) для хранения объектов в пуле
— для чего были выбраны именно такие методы в классах (имя метода OnPush в интерфейсе, на мой взгляд, отражает технические особенности пула, а не назначение этого метода)
— как организован доступ к пулу (через статическое поле Instance, такой полу-синглтон. Кстати, зачем дублировать в менеджере все методы самого пула? ведь вместо Instance = this можно было написать Instance = poolManager)
— что такое yield?
— в самом начале вы указали, что ваш пул можно использовать в Photon Server. Другие пулы нельзя в нём использовать? Что вы сделали, чтобы можно было. И вообще — что такое Photon?
Если бы в статье были ответы на эти и подобные вопросы, тогда получился бы отличный туториал, который оценили бы гораздо выше. А сейчас получилась статья в стиле «смотрите как я умею!», на что я и ответил в первом комменте.
0
Да согласен, интерфейс нужно детальней описать и примеры тоже. Photon Server это сетевое решение от Exit Games аналог SmartFoxServer только тот на Java, а этот на C#. По поводу Instance, нужен именно доступ к юнити расширению PopOrCreate, поэтому и продублировано. Было бы множественное наследование)
0
Я-то знаю, что такое Photon (хотя и лично с ним не работал), но раз в статье вы сказали о нём, то хорошо было бы об этом рассказать подробнее.
Эти вопросы я написал не для того, чтобы вы мне ответили тут, а чтобы показать, о чём было бы хорошо рассказать в статье, чтобы статья получилась цельная и полезная. Предлагаю вам в следующей статье больше внимания уделить не только сути (коду), а хорошему описанию, с обоснованием принятых решений и обзором тонких нюансов.
Эти вопросы я написал не для того, чтобы вы мне ответили тут, а чтобы показать, о чём было бы хорошо рассказать в статье, чтобы статья получилась цельная и полезная. Предлагаю вам в следующей статье больше внимания уделить не только сути (коду), а хорошему описанию, с обоснованием принятых решений и обзором тонких нюансов.
0
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Pool объектов для Unity3d