Источник: https://www.youtube.com/watch?v=Xy4pH980fQo
Сцена/проект • Batching (отрисовка статических объектов как один большой, отрисовка динамических объектов с одинаковым материалом) • Файл который делит код на модули UI • Прозрачные картинки не использовать Ресурсы • Атласы и картинки красные 2n Код • /, sqrt, magnitude • Дорогие операции • Find • Camera.main • Comparing with null • AddComponent • GetComponent • String based (concatenation) • Debug.Log? • Вызов ошибки дороже, чем try catch • Struct instead class • In modificator (ref, out)
1. OnValidate() 2. Max/Min value 3. If var ??= GetComponent 4. Find Duplicates of Enum 5. Отслеживать все объекты на сцене (не создавать пустые instantiate) 6. Использовать интерфейсы для методов. 7. Инициализация в 1 классе, вместо Awake 8. Использовать Scriptable object, только как конфиги 9. Отделять визуальную часть от логики 10. Реже использовать MonoBehaviour. Если нужен метод, то прокидывать любой Mono объект. 11. Используйте атрибуты Unity 12. RequireComponent(typeof()) 13. Range(0,10) 14. Инкапсуляция - это не просто сокрытие полей, а исключение возможности повлиять на поле, ломающим игру способом (делать проверки в методе Get/Set) 15. Список - Ссылка, поэтому передавать его нужно как IEnumerable/IReadOnlyList 16. Extensions...
Junior • Asset Bundle • ScriptableObject • Оптимизация • Физика Unity • Zenject • DoTween • Работа с 3D • Работа со сценами • Работа с SDK (admob, onesignal) • Скачивание ассетов из магазина • Простые анимации • Вёрстка по макетам UI • Асирхронность • Particle system • Сохранения и сериализация • Работа со звуком
• Сетевой фреймворк • Мультиплеер на юнити • Технические программы для сценаристов, разработчиков и тд • ECS-фреймворки (morpeh) • Работа с ui, спрайтами, vfx, sfx • Git • Web view • Настройка cookie • Попробовать создать разные жанры • ParticleSystem • Animator • Понимание общих принципов и подходов в real-time rendering (shading, lighting, particle effects, post-process effects, etc.) • Shader graph, amplify • After effects, Maya, blender, 3dsmax
1. Single responsibility - разделяй всё на мелкие сущности, чтобы у каждой была одна причина для изменения. 2. Open closed - закрыт для изменений, открыт для расширений. Для расширения использовать наследование. 3. Liskov substitution - любой производный класс должен выполнять тот же объем методов, что и базовый класс. (Самолёт и машина передвигаются, топливо, металлические, но не одно и тоже) 4. Interface segregation - программные сущности не должны зависеть от методов, которые они не используют. Разбивать крупные интерфейсы на мелкие. 5. Dependency Inversion - Классы высокого уровня не должны зависеть от классов низкого уровня. И те и другие должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны...
• namespace везде • Разделение функций на более простые • Убрать неиспользуемые юзинги • RequiredComponent • Сначала публичные, потом приватные, и так же с методами • Названия переменных с _, нейминг • [Range(n,n)] чтобы ограничить границы значения поля. • [ReadOnly] чтобы не изменять в интпекторе, но видеть • [Header] чтобы в инспекторе были заголовоки • Функции и гетсет в 1 строку через => • Проверка на нул всех объектов • Валидация в гет сет (например чтобы нельзя было вычесть из health отрицательное число, или чтобы жизни были изначально ниже нуля) • Расширения public static, для сокращения/красоты. Например: Disable(this Component comp) => comp.gameobject.SetActive(false) • Комментарии, особенно где магические числа • Проверка...
• config --global user.name "my name" - select a username. Similarly for email selection