뱀파이어 서바이벌 클론 프로젝트 중 깃허브 머지나 코드 리팩토링 관련해서 팀원들 간의 갈등 사항이 많았다.
처음에는 유니티 버전 충돌부터 UserSettings의 gitignore 제외 문제 부터 시작하여 다들 유니티 프로젝트는 처음이라 버벅였다.
개발이 진행되면서 모두 InGame scene에서 작업하여 프리펩이나 오브젝트에서 머지할 때마다 충돌이 났다..ㅜ
또 한 팀원분은 맥 vs code으로 작업하여서인지 한글 주석이 깨져서 머지되거나 파일이 변경되는 문제도 일어났다.
이후 면접이나 자소서에 도움이 되도록 큰 갈등만 간단하게 적어보려고 한다 😂
InGame.Scene 안에서 팀원들이 같은 게임오브젝트를 수정하여 모든 풀 리퀘 마다 충돌이 났다.
인터넷 서치와 선배들에게 물어보며 해결 방안을 찾아본 결과 충돌을 완전 해결할 방법은 없고 줄이는 방법밖에 없었다.
개발 작업을 겹치지 않게 우선순위를 나누어서 파일 접근 제한하기.
이미 우선순위에 맞게 to do를 나누어 진행중이라 불가능했다.
test scene, scene prefeb
각자 개발할 때 test scene이나 scene prefeb을 만들어서 거기서 개발하고 깃에는 올리지 않고 각자 합치기.
이 방법은 팀원분이 알아온 방법인데 조삼모사라고 생각이 들어 반대 하였다.
👌 한명씩 깃에 머지 하고 다음 머지할 사람과의 충돌 해결의 과정 반복
스터디 회의때 다 같이 머지 하며 중간중간 작은 커밋도 바로 main에 머지 하고 다른 팀원들도 pull받으며 큰 충돌을 없애는 방향으로 가기로 했다.
완벽한 방법은 아니라고 생각한다. main 브랜치에 충돌만 없는 기능하지 않는 코드를 머지할 수도 있고, 결국 스크립트나 게임 오브젝트 충돌을 하나하나 고쳐야하기 때문이다.
하지만 충돌을 고치는 시간이 많이 줄어들었고 각자 브랜치를 파서 작업하기 때문에 main브랜치의 복구가 가능하여 최선이라고 생각한다.
팀원분이 개발한 코드를 사용하여 작업해야하는데 코드 구조와 기능 구현 부분에서 부족함이 보였다.
팀원이 주인공/적 피격, 주인공 체력 바를 구현했고 이를 사용하여 Game Over와 주인공 체력템 득템을 구현해야했다. 구현된 코드는 주인공과 적의 충돌 이벤트에서 체력바의 값을 줄이는 것으로 되어있었고, Character 클래스와는 연결되있지 않았다. 또한 주인공과 적 피격 기능도 각각 onCollisionEnter2D()로 이벤트 처리만 해놓은 상태였다.
이 부분을 무시하고 내 구현만 기능되게 진행하면 결국 전체 프로젝트 완성도에 문제가 된다 생각하여 내 todo를 멈추었다.
처음에는 팀원도 이번 주차 진행 todo가 있기 때문에 내가 리팩토링하고 내 todo를 진행하려 하였다. 하지만 일정 상 불가능하고 팀 프로젝트 이므로 부족한 부분을 알리고 같이 해결하는 방향이 맞다 생각하였다.
팀원에게 부족한 부분을 알리고 진행 상황을 상의한 후 주인공 체력은 팀원이 리팩토링하고 피격 부분은 내가 리팩토링하는 것으로 결론이 났다.
이유는 팀원의 코드 구조보다 좋은 코드를 생각해냈기 때문에 리팩토링 후 문서화 작업을 하여 팀원에게도 공유하기로 하였다.
인터페이스 상속 코드로 무기가 공격할때 무기와 oncollision한 오브젝트의 태그를 하나하나 확인하지 않아도 되고 충돌한 오브젝트 리스트의 TakeDamage()함수를 호출하면 되기 때문에 코드 중복과 객체 간 호출로 인한 정보 보호도 가능하다.(인터페이스의 장점 활용 가능)
리팩토링을 혼자 다 했다면 일정에 무리도 있고 이후 팀원의 코드가 개선되지 않았을 것이다. 무엇이 맞는지 무엇이 최선의 방향인지 생각하여 좋게 마무리가 되었다.
피격 리팩토링 문서, 체력 리팩토링 문서