Заметки о всяком
@useful_notes
Для себя.
45 posts
Programming

Архитектура входа в игру. Unity

Источник: https://www.youtube.com/watch?v=Xy4pH980fQo

Способы оптимизации проекта Unity

Сцена/проект • 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)

Советы по архитектуре. Unity

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...

Навыки Unity Developer

Junior • Asset Bundle • ScriptableObject • Оптимизация • Физика Unity • Zenject • DoTween • Работа с 3D • Работа со сценами • Работа с SDK (admob, onesignal) • Скачивание ассетов из магазина • Простые анимации • Вёрстка по макетам UI • Асирхронность • Particle system • Сохранения и сериализация • Работа со звуком

Вопросы для собеседования по Unity

• Сетевой фреймворк • Мультиплеер на юнити • Технические программы для сценаристов, разработчиков и тд • 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

SOLID

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) • Комментарии, особенно где магические числа • Проверка...

Git commands

• config --global user.name "my name" - select a username. Similarly for email selection