Pull to refresh
85
2
Григорий Дядиченко @DyadichenkoGA

Master of Unity3D

Send message
А если никто никого не собирается обманывать, то при честных договорённостях всё будет в порядке, даже если сотрудник юридически подкован. Риски для компании основные в том, что получить интеллектуальную собственность сотрудника в России — это несколько нетривиальная задача, и этим не все занимаются. Но если всё в целом честно, то какая в общем то разница. Если все разошлись на хорошей ноте очень вряд ли, что потом будут какие-то проблемы. Это уже скорее про неадекватность в целом.

И я пропустил, программистам тяжело найти работу сейчас?
Не вижу в этом проблемы. Зачем идти в компанию, которая изначально собирается тебя обманывать?
Ну да, я понял, что ты прав. Так тоже можно.

По поводу руками — тут не только поэтому, допустим ты используешь этот материал ещё где-то и тебе там не нужен трипланарный шейдер. Но в целом да, ты прав — один из вариантов.

Это не особо поможет с тайлингом. Можно в шейдере из мировых координат делать правильный тайлинг, но лучше правильно расставить Uv-шки

Окей, в будущём учту
Согласен, но это вопрос того, как именно визуализировать лабиринт. Так как лабиринт — это граф, и в целом его можно визуализировать по разному — это самая простая трёхмерная визуализация (ну точнеее технически не самая простая — самая простая из кубиков, но там будет куча проблем в стиле артефактов освещения на стыках, кривой тайлинг материалов и как следствие невозможность использовать один материал и т.п.) Вообще если говорить о использовании в играх, то удобнее всего сделать определённый набор готовых ячеек, и подставлять их. В целом сгенерированная структура данных W4Maze позволяет это сделать без особого труда.

А по поводу скриншотов и замкнутых квадратов (особенно если речь о 3д) Там их не должно быть и это скорее всего оптическая иллюзия благодаря тому, что у стен нет «верха» — я его не визуализировал. Поэтому если у вас есть юнити, то можете скачать проект с гитхаба и посмотреть на результат.
Ну я сейчас всё-таки специализируюсь на разработке, так что не сказать, что я хорошо и внимательно слежу за трендами и являюсь профессионалом в этой области.

Просто периодически для мониторинга и анализирую графики премьер фильмов и сериалов, поисковые запросы, тренды приложений, ютуба, просто тот контент который выходит на популярных каналов.

Ну и yandex wordstat, google trends и инструмент в adword для просмотра популярности поисковых запросов.
А так да, вы правы. Много мусора и просто плохих приложений с целью наживы. Не скажу, что это плохо, просто таков рынок.
Ну я просто ничего в этом не вижу плохого. В нашем мире для того, чтобы даже что-то крутое делать, нужны деньги. И если есть возможность их заработать, и после этого потратить на крутой и интересный проект — то почему нет. Команду разработки ведь надо кормить.

Ну, я беру нормальные аппы под хайповую тему, а не всякий чистый мусор. Искусство — это конечно прекрасно, но кушать тоже надо. Тем более, что именно зарабатывать на хайпе тоже надо уметь. Это не так просто, как может показаться.

«Неправильно», на мой взгляд, не следить за трендами и их игнорировать. Всё зависит конечно же от конечной цели, но тем не менее это странно.
Возможно, но их надо ловить и под них надо по хорошему подстраиваться
Прикольная штука. И судя по google trends начала набирать в России популярность только в мае этого года (там ярковыраженный пик) Я думаю, что скорее всего пару месяцев будет в тренде, как те же покемоны, а потом все про неё забудут.
Ну вот с проблемой префабов (по крайней мере в UI) тут я бы поспорил, ведь руками создавать второй префаб панели, чтобы поменять текст кнопки, или добавлять новый функционал, звучит как костыль. Она решается может не слишком удобно, и решается скриптингом. События, инстанцирование и правильные использование всего этого, позволяют собирать окна, как в конструкторе, но скриптингом (я уверен, что визуальное программирование в анреале лучше), но учитывая особенности юнити, не особо оптимально делать второй префаб стола, да и просто в ручную раскидывать однотипные объекты на сцене.

Дело в том, что так как юнити не определяет дубликаты в сцене, то с точки зрения скорости загрузки сцены и т.п. все однотипные объекты лучше инстанцировать при загрузке. Поэтому, по сути, в моём понимании, префаб стола один, а внутри него есть скрипт, берущий префаб ноутбука и создающий необходимый ноутбук, с необходимым цветом экрана. По крайней мере в UI — это точно самая адекватная практика. С 3д, тут соглашусь, если требуется baked освещение и т.п. начинаются пляски с бубном, да и редактировать такое может не очень удобно. Это тожно можно хитро обойти малой кровью, но это уже нужно знать как (да и писать что-то для движка, чтобы с ним было просто удобно работать, звучит странно)

В анреале (по рассказам, сам я с ним пока не работал) проще работать с помощью визуального программироваиня, а в юнити всё проще делать скриптами. И описанное выше делается достаточно тривиальным скриптингом. Но если вы повторяете изменения вручную, создаёте новые префабы на старом скелете, перенося скелет целиком — вы делаете что-то не так. Так как в моём понимании префаб — это по сути минимальная логическая единица, которая потом инстанцируется с параметрами. Если придерживаться этой логики, то таких проблем особо не возникает.
Про Button не знал, прикольно.

Со скриншотами есть способ удобнее. Просто через LateUpdate не так удобно это всё делать, лучше, на мой взгляд делать это корутиной c yield return new WaitForEndOfFrame();

Там уже зависит от того, как работать, но к примеру, я сейчас написал для Texture такой экстеншн метод GetTexture2D, и как пример использования, небольшой класс, который позволяет делать скриншоты с вебки.
Я не претендую на инновационность, так как решение не особо сложное. Цель статьи показать какой эффект можно создать. Возможно, можно добиться того же эффекта инструментами назваными вами. Но я сейчас попробовал и у меня не получилось. С декалями я не совсем понял идею (или особую разницу). Моя задача не рендерить такой эффект в приложении, а получить результат искажения для того, чтобы распечатать и использовать. Может этого можно добиться проектором или декалями в линейном случае.

Но скажем с отражающими поверхностями такого решения достичь этими средствами уже не получится (либо это будет сложнее). Хотя в целом сейчас для обработки отражения нужно определять, какая поверхность отражает, и проецировать по отражённому лучу на неотражающую поверхность. Что опять таки, не такая сложная доработка.
Зачем, если все остальные инстансы просто сами по себе умрут при проверке, являются ли они настоящим синглтоном.

В плане умрут в той реализации, которая в статье? Если в сцене по какой-то причине будет два синглтона, то как определить какой из них правильный? И какой из них удалится? Просто реализацию из статьи я видел в майкрософтовской библиотеке Holotoolkit (если его не обновили) и ничего там не удаляется, просто второй инстанс бесцельно висит, так как он никогда не вызывается.
Если нужна реакция на события жизненного цикла юнити — без этого не обойтись.

Может быть в некоторых случаях соглашусь, хотя у меня получалось выстраивать архитектуру так, чтобы синглтоны по сути вызывались в монобехах, но сами монобехами не являлись. Просто по сути получалось вроде того, что синглтоны у меня выполняли роль «модели» (правильнее сказать они управляли моделью), а монобехи — это «отображение+контроллер», и в них синглтоны как-то не требовались.
Об особенностях юнити нужно думать не только в foreach, но и вообще.

Я и имел ввиду, что знание особенностей платформы — это главное. Фанатизм — это плохо что в одну, что в другую сторону. Использовать хорошую практику для конкретной платформы/технологии — понятное дело лучше, чем не использовать. Просто не надо уходить в крайности «ради идеи». Конечная цель всё-таки в любом случае получить стабильно и хорошо работающую программу, и хороший поддерживаемый код. Если при этом там будет плохой приём, который не влияет на производительность и читаемость, то не надо с пеной у рта избивать программистов за их незнание особенностей платформы. Программисты вообще не любят когда их бьют :)

А за статью спасибо — почитаю :)
Это наверное один из самых длинных споров про foreach на который я натыкался в последнее время. Мне конечно даже немного страшно влезать в вашу перепалку, но там где без foreach легко обойтись, лучше обойтись без foreach. При этом вы не сказали, в каких случаях foreach всё-таки необходим, и в чём его плюс то собственно. Его можно и нужно юзать в двух случаях, когда мы работаем с коллекцией, с которой без foreach работать нельзя (скажем с хешсетом) или передаём параметром скажем просто класс, который реализует интерфейс IEnumerable, если не ошибаюсь.

Если проходить форичем на эвейке какого-то одного объекта, то в целом конечно же +- плевать, но если мы работаем с коллекцией по которой можно пройтись через for, то почему бы не юзать его? Можно вообще охотится на бесов, и так как мы в юнити чаще всего живём в однопоточном мире, если мы знаем, что внутри цикла не меняется количество элементов коллекции, кешировать заранее Count, так как насколько мы помним у нас в пропертях ничего не инлайнится.

Я просто уже, если честно, потерял цель вашего спора. Излишняя оптимизация — это плохо, так как чаще всего её придётся переделывать, но если мы знаем, что в юнити на данный момент for работает лучше, чем foreach, то зачем использовать foreach? Конечно же никто не запрещает, и если очень хочется — пользуйтесь. Просто это не лучшая практика, при этом решение через for занимает всего на несколько символов больше.

Просто не надо уходить в крайности. Ещё можно похоливарить на тему того, что по хорошему можно обойтись без List, и он работает медленнее, чем массивы, так что давайте везде юзать массивы. Ребята — давайте жить дружно. Есть места где та или иная вещь критична, есть где в целом всё равно, а есть где по-другому нельзя. Зачем что-то выводить в уровень абсолюта?

Не юзать foreach там, где он не обязателен с тем, как это работает в юнити — в сущности неплохой совет. Просто ещё стоит уточнить, что не надо его избегать, как огня, и если скажем поиск по коллекции вы вызываете в апдейте, а проходите по каждому элементу коллекции в эвейке (я думаю, что можно придумать такую ситуацию, где в начале мы скажем очищаем состояние элементов, а после ищем особенные), то не нужно городить костыли, а нужно взять хешсет и ходить по нему форичем, так как хешсет на поиск нам даст О(1).

Просто если вы знаете, что форичи аллоцируют лишнего в юнити и заставляют GC запускаться чаще — вот это уже хорошо. Так как если возникнет проблема, что игра по какой-то причине фризится, то вы знаете где это можно искать, а это главное.
Соглашусь по этому пункту, но добавлю, что в ряде ооооочень специфичных случаев — это бывает полезно из-за того, что с полями удобнее работать в плане рефлексии. Рефлексия — это конечно вообще очень медленно и т. п., но бывает полезно (как минимум для написания тестов).
Ахинея — использование автосвойств без ограничения доступа. По сути — просто увеличение вычислительной нагрузки без логического обоснования. Свойства нужны исключительно для вычисляемых полей и ограничения доступа.
Ну это я скостил на добавку автора, что оптимизировать надо по необходимости. Я согласен, что фраза «не юзать строки» тоже звучит слишком громко, так как я юзаю строки для айдишников объектов и это никогда не вызывало проблем. Так же можно было бы сказать «храните всё в бинарниках, так как это быстрее, чем читать текстовые файлы, что позволяет уменьшать время загрузки», но с сериализацией в текстовые файлы банально удобнее работать при разработке продукта. Так как если скажем делать всё через поля в префабах, то с этим невозможно работать в команде, так как вы будете решать мержконфликты львиную долю времени.
Ну скажем кешировать GetComponent(), а не вызывать его в Update или боже упаси FixedUpdate — это тоже здраво. Да, и аллоцировать лишнее учитывая фрагментацию и то, как устроен GC в .NET тоже такое, так как это может вызывать просто периодические просады CPU засчёт фрагментации, если бездумно аллоцировать кучу мелких объектов. А так да, во многих случаях про это даже особо думать не надо.

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