일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Aseprite
- 스마일게이트
- 애니메이션
- 드로잉
- 도트
- Pixelart
- menu
- 반환원정대
- 도트공부
- 드로잉 연습
- 멋쟁이사자처럼
- 픽셀아트
- pixel art
- TOOL
- 포토샵
- 서포터즈
- 연습
- 기초
- photoshop
- 모작
- 에이세프라이트
- layer
- 인디게임 개발
- 채색
- 픽셀 아트
- 개발
- 자원순환보증금관리센터
- COSMO
- 노하우
- 장학팀
- Today
- Total
소소한 나의 하루들
깃허브로 유니티 프로젝트 관리하기 본문
출처: https://youtu.be/wBsSUBEUYV4?feature=shared
게임 제작 시 여러 명의 개발자가 모여서 게임을 제작하는 경우가 있다.
여기서 필요한 것이 '프로젝트를 어떻게 공유할 것인가' / '작업한 내용을 어떻게 통합할 것인가' 라는 것이다.
이때 이슈가 되는 점은 파일을 주고받는 방법으로 프로젝트를 관리할 때,
업데이트된 파일을 자신의 프로젝트에 적용하지 않는 경우가 있고, 다른 사람에게 자신의 프로젝트 파일을 보낼 때 몇개를 빼먹거나, 수정하지 않은 파일을 같이 보낸다는 것이다.
수정하지 않은 파일을 보냈을 때에는 큰 문제가 생긴다. 다른 개발자가 이 파일을 건드리지 않았을 때는 문제가 없지만, 수정하지 않은 파일에 작업을 해놓았을 때는 그렇게 받아온 파일이 작업자가 수정한 파일을 덮어써버려서 복구하기 쉽지 않을 것이다.
이러한 문제를 관리할 수 있게 도와주는 것이 Github이다.
1. Github 가입
2. Github 로그인
Github에서 프로젝트를 저장하는 저장소 하나를 repository라고 한다.
개인 프로필에서 최근 1년간 얼마나 자주 Github에서 작업을 수행했는지를 나타내는 테이블이 있는데, 이 테이블을 초록색으로 물들이는 과정을 '농사'라고 표현한다.
(한번 나도 농사해서 전체 다 초록색으로 물들여보는 것도 괜찮겠다)
3. repository 생성 (공개 여부/생성 시 프로젝트에 대한 정보를 담을 문서 여부 / 깃에 업로드되는 파일 중 무시할 파일 설정)
유니티에는 에디터를 켤 때마다 내용이 바뀌거나 다른 개발자들과 공유하지 않아도, 프로젝트 진행에 문제가 없는 파일들이 있다. 이런 파일들까지 다 깃에 올려버리면 프로젝트를 보기 어렵다. .gitignore 파일로 무시해야할 파일들을 설정해준다.
라이센스는 비공개 프로젝트에서는 필요없다.
[라이선스 참고: https://olis.or.kr/license/compareGuide.do]
Github 웹사이트에서 한번에 올릴 수 있는 파일의 개수가 제한되어있기 때문에, Github Desktop을 활용하는 것이 좋다.
Github Desktop
: Github repository를 Desktop에 다운로드받아서 관리하는 것을 도와주는 프로그램
Desktop에 Repository 복제하기
1. 계정 로그인
2. Current repository에서 Add 클릭>Clone repository 선택>Github repository에서 자신의 Desktop에 다운로드받아서 사용할 repository를 찾아서 경로를 지정하고, clone한다.
: Github 서버에서 Desktop으로 repository를 복제한다.
repository에 Unity 프로젝트 넣어주기
1. Unity 프로젝트를 열고 탐색창을 연다. 그리고 Editor를 끈다.
2. Unity 프로젝트의 탐색창의 내용물들을 repository 폴더로 옮겨준다.
3. 다시 Github Desktop에서 추가된 내용물들이 변경사항으로 표시된다.
4. 이것들을 새로운 버전으로서 어떠한 내용으로 파일을 업로드하는지 설명을 적고 commit으로 버전을 업로드한다.
5. commit이 끝나고, push origin을 눌러주면 github에 파일이 업로드된 것을 확인할 수 있다.
깃허브의 기본동작
커밋(Commit) : 프로젝트에서 수정한 내용 중에서 git 서버에 저장할 내용을 선택하는 과정
깃허브로 업로드한 프로젝트 폴더를 유니티에서 열어주고, 유니티 Editor에서 새롭게 추가한 작업이 Github Desktop에 변경사항으로 표시된다.
스크립트 파일에서 일부분만 제외하고 커밋할 수도 있다.
커밋할 때는 Summery와 Description을 작성하고 commit 버튼을 누른다.
디스카드(Discard) : 자신의 변경사항을 지우고, 파일을 마지막으로 커밋한 상태로 되돌린다.
수정된 내용은 수정 전으로 바뀌고, 파일이나 내용은 삭제된다. (파일이나 줄 단위 discard 가능)
푸시(Push) : 커밋한 내용을 github 저장소에 업로드하는 과정
github Desktop에서 put origin 버튼을 누르면 커밋한 내용들이 github 저장소로 업로드 된다.
풀(Pull) : 다른사람이 push로 올린 변경 내용을 다운로드해서 로컬(local)에 반영하는 동작
머지(Merge) : pull로 갖고온 변경사항과 자신의 변경사항이 서로 충돌할 때 어느 커밋을 적용할지 결정하는 동작
만약 충돌(conflict)이 발생하여 코드에서 어떠한 부분을 커밋할지 결정해야한다.
Accept Current Change / Accept Incoming Change 중 선택해서 변경사항을 결정
이렇게 커밋 간 충돌을 제거하고 합치는 과정을 Merge라고 한다.
다른 개발자를 내 리포지토리에 초대하기
프로젝트가 업로드되어있는 Github의 repository로 이동하고, 상단 Settings에서 Manage Access를 클릭하고,
Invite a collaborator를 클릭해서 함께 프로젝트를 작업할 개발자의 Github 유저이름이나 메일 주소를 입력해서 초대장을 보낸다.
※유니티 프로젝트를 깃허브로 관리할 때 주의할 점
1. 유니티의 버전 통일시키기 (fetch 버전까지)
함께 작업하는 개발자 간 유니티 버전을 통일시키는 것이 중요하다. 유니티 프로젝트 버전을 관리할 때 가장 중요한 파일인 meta파일의 내용이 유니티 에디터의 버전에 따라 달라질 수 있다.
유니티의 버전은 연도 / 1~4로 표시되는 Minor / 0f1처럼 표시되는 fetch 로 구성된다. [연도.Minor.fetch]
(참고: 'Sematic Versioning' 검색)
2. 에셋 직렬화 방식은 텍스트로 통일시키기
유니티에서 prefab이나 scene같은 파일을 저장하는 방법은 바이너리 / 텍스트 / 혼합 방식이 있다.
최신 버전 에디터에서는 기본적으로 텍스트 버전을 사용하는 것으로 설정되어있는 것 같지만, 다른 버전을 사용하는 개발자가 있을 수 있다.
에셋 직렬화 방식을 하나로 통일시키면 merge할 때 혼란스럽지 않을 것이다.
만약 서로 다른 방식을 사용한다면, git 저장소에서 변경사항을 받을 때마다 유니티 에디터가 자신의 방식에 맞는 방식으로 강제 변환해서 개발자가 수정하지 않은 사항이 수정되어버리는 상황이 발생할 것이다.
에셋 직렬화 방식 바꾸는 방법: 유니티 에디터에서 상단 Edit 메뉴>Project Settings>Editor 탭에서 Asset Serialization의 모드를 Force Text로 변경
3. meta 파일
유니티 프로젝트를 파일 탐색기에서 열었을 때 모든 파일과 폴더를 대상으로 .meta 파일이 생겼음을 확인할 수 있다. 이 meta 파일에는 텍스쳐의 압축 포멧이나 모델 및 애니메이션 설정, 프로젝트에서 파일을 참조할 때 필요한 GUI 등이 들어있다.
C# 스크립트를 컴포넌트로 갖고있는 게임 오브젝트를 Project창에서 Asset 내에 옮겨서 Frepab으로 만들어준다.
탐색기에서 .prefabs 파일을 찾아서 열어보면, 스크립트 파일의 GUI를 찾을 수 있다.
그리고 스크립트 파일의 .meta 파일을 열어보면, 스크립트 파일의 GUI와 일치하는 것을 알 수 있다.
유니티 엔진에서는 .meta 파일에 기록된 GUI를 바탕으로 scene에 포함되어있는 prefab, prefab에 포함된 3d 모델, 3d 모델이 사용하고 있는 materials, materials에 들어간 texture 등을 찾아내서 서로 연결시켜준다.
→따라서 이 meta 파일이 재생성되어서 GUI 값이 바뀌면, 유니티 프로젝트에서 참조를 잃어버리게 된다.
그래서 에디터가 아닌 탐색창에서 스크립트 파일을 이동시키면 meta 파일이 새로 생성되어서 게임 오브젝트 prefab에 부착되어있던 컴포넌트 스크립트의 참조를 잃어버리면서 missing으로 표시되게 된다.
prefab 참고 : https://docs.unity3d.com/kr/2021.3/Manual/Prefabs.html
.meta 파일의 생성 / 파괴 패턴
이러한 문제를 발생시키지 않기 위해서 .meta 파일이 생성 및 파괴되는 패턴을 잘 알고있어야한다.
1) 프로젝트 뷰가 아닌 방법으로 파일을 이동시키거나 이름 변경 (에디터가 아니라 탐색창에서 조작하는 경우)
→탐색기에서 파일을 조작하면 유니티 에디터는 파일이 사라졌다고 판단하여, 현재의 .meta 파일을 삭제하고 새로운 meta 파일을 생성한다.
2) .meta 파일이 없는 경우
→Assets 폴더에 어떤 파일을 넣었을 때, 그 파일의 이름에 맞는 .meta 파일이 없는 경우, 자동으로 해당파일명.meta 파일이 만들어진다. .meta 파일을 커밋하지 않고, push해버리면, 팀원 전체의 프로젝트에서 새로운 .meta 파일을 생성하고 모든 팀원의 GUID가 달라지는 문제가 발생한다.
3) .meta 파일의 원본이 없는 경우
→.meta 파일이 참조하는 원본 파일이 없는 경우 .meta 파일은 삭제된다.
이 판단은 .meta 파일의 확장자 앞의 파일명과 같은 이름의 파일 유무에 따라서 진행된다.
이렇게 의도와 다르게 .meta 파일이 생성되거나 삭제되면 문제가 생기기 때문에, 파일 덮어쓰기 외에는 프로젝트 뷰(에디터)에서 파일을 조작하는 것이 기본이다.
어쩔 수 없이 git을 통하지 않고 파일을 보내야할 때에는 반드시 .meta 파일도 함께 옮겨야 한다. 이보다 나은 방법으로는 export package를 이용해서 .unitypackage 파일로 만들어서 보내야 한다.
.unitypackage 파일에는 .meta 파일이 포함되어서 함께 전송되기 때문에 참조 내용이 빠지는 문제가 발생하지 않는다.
유니티 패키지가 아닌, 다른 방법으로 파일을 주고받을 때에는 한 사람에게만 보내야하며, 반드시 받은 사람이 커밋해야한다.
.meta 파일의 갱신 패턴
.meta 파일의 생성 및 파괴 다음으로 신경써야하는 것은 .meta 파일이 갱신되는 경우이다.
1) 유니티 에디터에서 파일 파라미터가 변경되는 경우
→예를들어 프로젝트에 포함된 texture의 Texture Type이 default에서 Sprite (2D and UI)로 바뀌면 .meta 파일도 갱신된다.
그리고 .meta 파일이 갱신되어 저장되는 시점은 scene 저장 및 Save Project로 프로젝트 전체를 저장하거나 유니티 에디터를 종료하는 시점이다.
따라서 이 행동을 수행하지 않은 상태로 에디터가 다운되는 경우에는 .meta 파일이 갱신되지 않는 경우도 있고 prefab의 내용이 사라질 수도 있다.
이러한 경우에 대비해서 Editor 확장으로 Scene 자동저장을 구현하면 일정 시간마다 .meta 파일이 갱신되도록 만들 수 있다.
만약 .meta 파일의 내용을 유지한 상태로 파일만 교체하고 싶다면, 파일을 덮어쓰기 하면 된다. 이것은 유니티 에디터의 project 뷰에서 덮어쓰기가 되지 않는 문제에 대한 대책이며, .meta 파일이 있을 때 같은 파일명의 파일이 있을 경우 .meta 파일이 새로 생성되지 않는 점을 이용한 것이다.
2) Git 서버에서 변경사항을 받아올 때마다 .meta 파일이 갱신되는 문제
→다수의 인원이 동시에 작업을 할 때 pull할 때마다 매번 다른 내용의 .meta 파일이 갱신되는 경우가 있다.
이것은 에셋 직렬화 방식 문제로, 팀원 중 에셋 직렬화 방식을 텍스트(Force Text)가 아닌, 다른 방식으로 설정한 사람이 있을 때 .meta 파일의 내용을 에디터가 자신이 설정한 방법으로 바꿔버리기 때문에 pull할 때마다 다른 .meta 파일을 가져오게 된다.
그리고 Project Settings Editor에서 Version Control 항목이 다르게 설정되어있을 때도 같은 문제가 발생할 수 있다.
별도의 다른 control 파일을 사용하는 것이 아니라면, Visible Meta Files로 설정하는 것이 좋다.
무엇보다 유니티 에디터 버전이 서로 다를 경우 문제가 발생할 수 있다. 유니티 에디터 버전마다 .meta 파일의 포멧이 약간씩 다를 수 있기 때문에 포멧이 맞지 않는 프로젝트를 git에서 받게 되면 에디터가 .meta 파일을 새로 생성해버린다.
따라서 github을 통해서 프로젝트를 공동작업하는 개발자들은 유니티 에디터의 버전을 fetch 버전까지 완전히 통일해서 사용해야한다.
'개발 > 유니티' 카테고리의 다른 글
2d 플랫포머(2) - 아틀라스와 애니메이션 (0) | 2024.01.22 |
---|---|
2d 플랫포머(1) - 프로젝트 준비 (0) | 2024.01.21 |
게임 인터페이스_UGUI 기초 (0) | 2024.01.20 |
물리 충돌 이벤트 (0) | 2024.01.19 |
힘을 이용하여 물체 움직여보기_Rigidbody (0) | 2024.01.18 |