내일배움캠프의 첫 Unity 팀 프로젝트를 어찌저찌 끝내고나서 다시 되돌아보니 많은 부분에서 미숙한 모습이 보여서, 다음에 팀 프로젝트를 진행할 때 어떤 부분을 보완하면 좋을 지 정리하려고 한다.
정말 간단한 부분이라도 놓치지 않기 위해 팀 프로젝트를 진행하며 잘 안지켜졌던 부분들을 전부 적어 보려고 한다...
디렉토리 관리를 철저히하자... 디렉토리 관리를 하지 않으면 프로젝트가 어느 정도 진행됐을 때, 리소스를 찾는 것이 정말 불편해진다.
디렉토리를 나눌 때, 이름 제일 처음에 번호를 붙여서 순서가 섞이지 않도록 만들고, 모든 파일을 용도에 맞는 폴더를 만들어 관리 하도록 하자.
ex) 00.Scenes, 01.Scripts, 02.Prefabs
여기서 주의할 점은 Resources 폴더는 절때 이름을 변경하면 안된다.
Resources 폴더는 Unity에서 쉽게 접근할 수 있도록 지원하는 폴더인데, 이름이 조금이라도 다르면 접근이 안된다.
정말 사소한 부분일지도 모르지만 코드 컨벤션이나 깃허브 커밋 컨벤션을 지키지 않으면 프로젝트가 정말 난잡하게 보이게 되는 것 같다.
사람마다 사용하는 컨벤션이 다를 수 있으니 꼭 프로젝트를 시작하기 전에 회의를 통해 정하도록하자.
명명 규칙은 5가지가 존재하는데 주로 사용하는 3가지를 소개해 보려고한다.
카멜 케이스 (camelCase)
monsterCount, attackDelay, moveSpeed 등파스칼 케이스 (PascalCase)
MonsterCount, AttackDelay, MoveSpeed 등스네이크 케이스 (snake_case)
monster_count, attack_delay, move_speed 등위 케이스와 별개로 컨벤션을 적용하는 경우도 있다.
함수 : 무조건 파스칼 케이스를 따른다.
ex) Attack(), Move(), Rotate() 등
bool타입 변수 : 변수의 접두사에 is를 넣는다.
ex) isAttack, isMove, isRotate 등
private 접근제한자를 사용하는 경우 변수명의 앞에 언더바(_)를 넣는다.
ex) private bool _isAttak, 'private int _monsterCount', private string _word
등등 여러가지 경우가 있으니 C# 컨벤션에 대해 공부해보자.
링크 : https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/coding-conventions
github commit 컨벤션에 대한 내용은 예전에 내가 정리해둔 글이 있으므로 이 참에 다시 한번 보면서 익숙해지도록 하자.
이번 프로젝트를 시작할 때 플레이어, 몬스터, UI, 스킬, 맵 등으로 파트를 나누고 개인적으로 개발한 다음 합치는 방식으로 진행했는데, 이렇게 진행하니까 합칠 때 겹치는 기능이 생기기도하고, 서로의 파트에 접근해야 되는 경우 매우 불편해지는 상황이 생겼습니다.
그래서 생각한 방법이 한명이 기초 클래스들을 작성하는 것입니다.
public class BaseController : MonoBehavior { private float speed; public float Speed { get => speed; set => speed = value; } protected virtual void Awake() { } protected virtual void FixedUpdate() { Move(speed); } private void Move(float speed) { } }
위와 같은 여러 부모 클래스를 미리 만들어 놓으면, 각자 개발할 때 겹치는 기능을 구현할 일도 없고, 서로의 파트에 접근할 때 편하게 부모 클래스를 통해 접근할 수 있어서 깔끔하게 코딩을 할 수 있습니다.
프로젝트를 진행하며 commit과 merge의 빈도수가 낮아 가끔 작업 중이던 브랜치를 dev 브랜치에 merge할 때 충돌처리를 잘못하여 작업중이던 코드가 다 날라간 경우가 있었다.
commit과 merge를 습관화하자
그리고 진행했던 프로젝트에는 아무나 dev 브랜치에 merge할 수 있었는데, 아무나 merge할 수 있도록 만드는 것이 아니라 pull request를 적극 활용하여 충돌처리를 확실히 하는 것이 중요하다는 것을 느꼈다.
마지막으로 Unity에서 작업할 때 코드가 충돌하는 부분은 코드를 직접보면서 해결할 수 있는데, 컴포넌트 설정이나 프로젝트 설정, 태그 및 레이어 같은 부분은 정말 어지러워 질 수 있어서 가능하면 최대한 같은 씬에서 작업하지 말고, 설정을 바꿔야할 경우 한명이 설정을 바꾸고 바로 dev 브랜치에 merge하여 모든 팀원들이 적용될 수 있도록 하는 것이 중요한 것 같다.