Григорий Дядиченко @DyadichenkoGA
Master of Unity3D
Information
- Rating
- 1,352-nd
- Location
- Москва, Москва и Московская обл., Россия
- Registered
- Activity
Specialization
Game Developer, Chief Technology Officer (CTO)
Lead
Git
C#
C++
Python
OOP
.NET
English
Research work
Algorithms and data structures
Applied math
И я пропустил, программистам тяжело найти работу сейчас?
По поводу руками — тут не только поэтому, допустим ты используешь этот материал ещё где-то и тебе там не нужен трипланарный шейдер. Но в целом да, ты прав — один из вариантов.
Это не особо поможет с тайлингом. Можно в шейдере из мировых координат делать правильный тайлинг, но лучше правильно расставить Uv-шки
А по поводу скриншотов и замкнутых квадратов (особенно если речь о 3д) Там их не должно быть и это скорее всего оптическая иллюзия благодаря тому, что у стен нет «верха» — я его не визуализировал. Поэтому если у вас есть юнити, то можете скачать проект с гитхаба и посмотреть на результат.
Просто периодически для мониторинга и анализирую графики премьер фильмов и сериалов, поисковые запросы, тренды приложений, ютуба, просто тот контент который выходит на популярных каналов.
Ну и yandex wordstat, google trends и инструмент в adword для просмотра популярности поисковых запросов.
Ну, я беру нормальные аппы под хайповую тему, а не всякий чистый мусор. Искусство — это конечно прекрасно, но кушать тоже надо. Тем более, что именно зарабатывать на хайпе тоже надо уметь. Это не так просто, как может показаться.
«Неправильно», на мой взгляд, не следить за трендами и их игнорировать. Всё зависит конечно же от конечной цели, но тем не менее это странно.
Дело в том, что так как юнити не определяет дубликаты в сцене, то с точки зрения скорости загрузки сцены и т.п. все однотипные объекты лучше инстанцировать при загрузке. Поэтому, по сути, в моём понимании, префаб стола один, а внутри него есть скрипт, берущий префаб ноутбука и создающий необходимый ноутбук, с необходимым цветом экрана. По крайней мере в UI — это точно самая адекватная практика. С 3д, тут соглашусь, если требуется baked освещение и т.п. начинаются пляски с бубном, да и редактировать такое может не очень удобно. Это тожно можно хитро обойти малой кровью, но это уже нужно знать как (да и писать что-то для движка, чтобы с ним было просто удобно работать, звучит странно)
В анреале (по рассказам, сам я с ним пока не работал) проще работать с помощью визуального программироваиня, а в юнити всё проще делать скриптами. И описанное выше делается достаточно тривиальным скриптингом. Но если вы повторяете изменения вручную, создаёте новые префабы на старом скелете, перенося скелет целиком — вы делаете что-то не так. Так как в моём понимании префаб — это по сути минимальная логическая единица, которая потом инстанцируется с параметрами. Если придерживаться этой логики, то таких проблем особо не возникает.
Со скриншотами есть способ удобнее. Просто через LateUpdate не так удобно это всё делать, лучше, на мой взгляд делать это корутиной c yield return new WaitForEndOfFrame();
Там уже зависит от того, как работать, но к примеру, я сейчас написал для Texture такой экстеншн метод GetTexture2D, и как пример использования, небольшой класс, который позволяет делать скриншоты с вебки.
Но скажем с отражающими поверхностями такого решения достичь этими средствами уже не получится (либо это будет сложнее). Хотя в целом сейчас для обработки отражения нужно определять, какая поверхность отражает, и проецировать по отражённому лучу на неотражающую поверхность. Что опять таки, не такая сложная доработка.
В плане умрут в той реализации, которая в статье? Если в сцене по какой-то причине будет два синглтона, то как определить какой из них правильный? И какой из них удалится? Просто реализацию из статьи я видел в майкрософтовской библиотеке Holotoolkit (если его не обновили) и ничего там не удаляется, просто второй инстанс бесцельно висит, так как он никогда не вызывается.
Может быть в некоторых случаях соглашусь, хотя у меня получалось выстраивать архитектуру так, чтобы синглтоны по сути вызывались в монобехах, но сами монобехами не являлись. Просто по сути получалось вроде того, что синглтоны у меня выполняли роль «модели» (правильнее сказать они управляли моделью), а монобехи — это «отображение+контроллер», и в них синглтоны как-то не требовались.
Я и имел ввиду, что знание особенностей платформы — это главное. Фанатизм — это плохо что в одну, что в другую сторону. Использовать хорошую практику для конкретной платформы/технологии — понятное дело лучше, чем не использовать. Просто не надо уходить в крайности «ради идеи». Конечная цель всё-таки в любом случае получить стабильно и хорошо работающую программу, и хороший поддерживаемый код. Если при этом там будет плохой приём, который не влияет на производительность и читаемость, то не надо с пеной у рта избивать программистов за их незнание особенностей платформы. Программисты вообще не любят когда их бьют :)
А за статью спасибо — почитаю :)
Если проходить форичем на эвейке какого-то одного объекта, то в целом конечно же +- плевать, но если мы работаем с коллекцией по которой можно пройтись через for, то почему бы не юзать его? Можно вообще охотится на бесов, и так как мы в юнити чаще всего живём в однопоточном мире, если мы знаем, что внутри цикла не меняется количество элементов коллекции, кешировать заранее Count, так как насколько мы помним у нас в пропертях ничего не инлайнится.
Я просто уже, если честно, потерял цель вашего спора. Излишняя оптимизация — это плохо, так как чаще всего её придётся переделывать, но если мы знаем, что в юнити на данный момент for работает лучше, чем foreach, то зачем использовать foreach? Конечно же никто не запрещает, и если очень хочется — пользуйтесь. Просто это не лучшая практика, при этом решение через for занимает всего на несколько символов больше.
Просто не надо уходить в крайности. Ещё можно похоливарить на тему того, что по хорошему можно обойтись без List, и он работает медленнее, чем массивы, так что давайте везде юзать массивы. Ребята — давайте жить дружно. Есть места где та или иная вещь критична, есть где в целом всё равно, а есть где по-другому нельзя. Зачем что-то выводить в уровень абсолюта?
Не юзать foreach там, где он не обязателен с тем, как это работает в юнити — в сущности неплохой совет. Просто ещё стоит уточнить, что не надо его избегать, как огня, и если скажем поиск по коллекции вы вызываете в апдейте, а проходите по каждому элементу коллекции в эвейке (я думаю, что можно придумать такую ситуацию, где в начале мы скажем очищаем состояние элементов, а после ищем особенные), то не нужно городить костыли, а нужно взять хешсет и ходить по нему форичем, так как хешсет на поиск нам даст О(1).
Просто если вы знаете, что форичи аллоцируют лишнего в юнити и заставляют GC запускаться чаще — вот это уже хорошо. Так как если возникнет проблема, что игра по какой-то причине фризится, то вы знаете где это можно искать, а это главное.