C# | Unity. Code style, arhitecture
Всем привет! Тут я кратко опишу правила для совместной работы над кодом в юнити проекте.
Я придерживаюсь правил от майков и .net разработчиков.
https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions
https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md
Каждый класс должен быть обернут в namespace.
Плохое название для namespace:
namespace Assets.Scripts.MonoBehaviour.Hero
Хорошее название для namespace:
namespace Sources.HeroLogic
Visual studio по дефолту добавляет приписку Assets к namespace, но она не имеет смысла.
Немного о папочках
Лучше не использовать для папки с кодом название Scripts. Я решила использовать название Sources. В примере с плохим namespace'ом написано Scripts что является ошибкой. Опять же этот namespace создан автоматический с помощью Visual studio. В Rider такой проблемы вроде как нет.
Также лучше не использовать в namespace'е название MonoBehaviour ( только MonoBehaviourS ).
В конце namespace'a лучше делать приписку Logic. Иначе если название класса и namespace'а будет совпадать, то будет ошибка.
Я придерживаюсь этого:
- Assets
- Sources
- MonoBehaviours ( классы наследующие MonoBehaviour )
- Hero
- Door
- Enemy
- Items
- UI
- LoadingScreen
- Shop
- MainMenu
- Arhitecture
- Bootstrapper
- Services
- StateMachine
- И подобные вещи
- Другие папки. Зависит случая
- MonoBehaviours ( классы наследующие MonoBehaviour )
- Content
- Art ( 2д контент )
- Models ( Меши, Текстуры, Анимации в одной папке )
- Sound
- Animations
- Scenes
- Users ( папки каждого человека на которой он делает что хочет )
- Game ( игра )
- MainMenu
- House
- Outside
- DebugGame ( Не уверена нужно ли оно или нет, но идея в том, что Game - релиз, а DebugGame - дебаг )
- Materials ( в папке материала находятся текстуры и все вещи для него )
- И так далее
- Plugins
- Zenject
- UniRx
- DoTween
- Sources
Честно говоря я постоянно узнаю о чем-то новом и меняю ее, но использую такое:
Для DI использую Zenject. Для реактивности UniRx. В качестве твинера использую - твин из кода DoTween, твинер в Unity LeanTransit. Вместо UnityEvents использую UltEvents. Не использую устаревшие вещи в коде и в Unity. Обязательно TextMeshPro для текста в UI.
Архитектура построена на Composite Root и Entry Point.
UML-ка не доделана, но возможно поможет понять )))
