최근에 Unity 스터디를 새로 시작하게 되었습니다.
스터디를 시작하게 된 이유는 다음과 같습니다.
스터디를 통해 구성원들의 다양한 시각을 접하고 의견을 나눌 수 있길 기대해보았습니다.
당장 git만 해도 현재 프로젝트에서는 다른 버전 관리 툴을 사용하고 있어 많이 잊어버린 부분이 있습니다. 업무 환경에서 다루지 않는 툴들도 다시 좀 만져보고 싶었습니다.
현재 스터디 일정이 약 5주간 진행될 예정이므로 그 동안 평소에 궁금했거나 안 써봤던 툴들을 사용해보려고 합니다.
기본적으로는 인프런의 유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지의 커리큘럼을 따라가며 프로젝트를 진행할 예정입니다. 강의를 기반으로 한 개인 프로젝트에 업무에서 배운 지식을 더해 얼마나 발전시킬 수 있을 지 기대해보며 서두를 적습니다.
프로젝트를 효율적으로 관리하기 위해서는 버전 관리가 필요합니다.
GitHub을 이용해 버전 관리를 호스팅하며, 이를 위해 새로 Repository를 생성하였습니다.
그리고 로컬에서 조금 더 편리하게 사용하기 위해 Github 데스크톱과 연결시켰습니다. 기존에 Fork나 GitKraken 같은 GitTool을 사용해봤지만 그냥 제일 단순한 방법으로 진행하려고 합니다.
다른 거 없이 Unity만 봤을 때는 조직 내부에서만 사용하는 용도로는 PlasticScm도 나쁘지 않은 옵션인 것 같습니다. 특히 비개발 직군과의 협업에서 학습 비용이 적게 드는 장점이 있는데, 어색한 번역이나 일관되지 않은 용어 사용, 직관적이지 않은 conflict solving 윈도우, ignore 처리가 귀찮게 하는 단점도 있긴 합니다.
얼마 만에 새로운 Unity 프로젝트를 생성인 지 두근두근 합니다.
안드로이드 프로젝트를 진행하여 디바이스에서 구동하는 것까지를 목표로 하려 합니다.
유니티의 Hierarchy, Inspector, Project 등 다양한 윈도우를 어떻게 커스텀하느냐에 따라 업무 효율에 꽤 영향을 미치기도 합니다. 다른 건 몰라도 Game뷰의 해상도를 설정하는 것은 필수이지 않을까 싶습니다. 개인 취향으로 Animator와 Animation, 사용한다면 Addressable 윈도우도 상시 켜놓는 편입니다.
좌상단 | 중상단 | 우상단 |
---|---|---|
Hierarchy | Scene | Inspector |
(Animator) | (ProjectSettings) |
우하단 | 중하단 | 우하단 |
---|---|---|
Project | Game | Console |
(Animations) |
이번 스터디를 진행하며 처음 접한 내용이 Asset Serialization이었습니다. 그동안 따로 조정 없이 기본 설정 값인 Force Text만 사용했었는데, 필요하다면(필요할 일이 있을까?) 공간 효율성을 고려해 Mixed와 Force Binary 옵션을 선택할 수 있다는 것은 알았습니다. 매뉴얼에 '씬을 병합하지 않는 경우'라는 문구가 있었는데, 씬을 병합하는 경우에는 애초에 선택할 수 없는 옵션인 지는 알아봐야 할 것 같습니다.
Unity의 새 프로젝트를 생성하면 기본적으로 생성되는 폴더들이 있습니다. 이 폴더들과 더불어 기본적으로 생성되진 않지만 유니티 에디터가 다루는 특수한 폴더들도 존재합니다. 따라서 아래와 같은 폴더는 생성 시 주의해야 합니다.
- Assets (자동 생성)
프로젝트에서 사용되는 애셋이 포함되는 폴더입니다.
Project 창에서 가장 많이 보게 될 폴더이며 대부분의 API 함수가 이 폴더 안에 존재한다는 가정하에 동작합니다. AssetDatabase 클래스의 특정 함수와 같은 경우가 아니라면 경로를 생략할 수 있습니다.
- Editor (자동 생성)
Editor 상에서 동작할 스크립트를 담는 폴더입니다.
에디터에 기능을 추가하기 위한 스크립트는 반드시 해당 폴더 또는 그 하위 폴더에 존재해야만 하며, 빌드에는 포함되지 않습니다.
Editor 폴더는 Assets 폴더 내부에 여러 개 있을 수 있습니다.
프로젝트 진행 중 겪었던 상황 중 Editor 폴더에 있는 스크립트가 MonoBehaviour에서 파생된 컴포넌트를 할당하려고 한 경우가 있습니다. 이는 지원되지 않으며 대부분의 경우 잘 안 생기는 상황이지만 이럴 수도 있다는 것을 참고하면 좋습니다.
- Resources (자동 생성은 아니지만 거의 필수*)
씬이 아닌 Script에서 온디맨드 방식으로 애셋을 로드하기 위해서 필요한 폴더입니다.
Resources 폴더는 다수 존재할 수 있으며, Resources.Load() 함수를 이용해 애셋을 가져올 수 있습니다. 에디터 폴더의 하위 폴더이면 폴더 안의 에셋이 빌드에서 제거되지 않고 에디터 스크립트에서 로드할 수 있습니다.
- Editor Default Resources (필요 시 생성)
에디터 스크립트가 사용할 에셋 파일을 담는 폴더입니다.
에디터 스크립트에 필요한 애셋을 가져오기 위해 EditorGUIUtility.Load 함수를 사용합니다. 이 함수는 해당 폴더 경로에서 에셋 파일을 검색합니다.
위의 Editor 폴더와는 달리 해당 폴더는 단 하나만 존재할 수 있으며 Asset 폴더가 위치한 프로젝트의 루트 경로에 배치해야 합니다. 에디터에 필요한 에셋 파일은 이 Editor Default Resources나 그 하위 폴더에 배치해야 합니다. 또한 하위 폴더 내에 애셋이 존재하는 경우 Load 함수 사용 시 경로를 함께 전달해야 합니다.
- 기타 특수 이름 폴더
- Gizmos : 씬 뷰에 추가할 커스텀 이미지 아이콘을 위한 폴더
- Plug-ins : 외부 라이브러리, 패키지를 통해 유니티 빌트인 기능을 확장해야하는 경우 사용하는 폴더
- Standard Assets : 스탠다드 애셋 패키지가 임포팅 되는 폴더
- StreamingAssets : 빌드에 포함되지 않는 애셋을 파일 시스템에서 접근할 수 있도록 하기 위한 폴더
- Hidden Assets : 운영체제 또는 기타 애플리케이션에서 생성된 특수 또는 임시 파일을 임포트하는 것을 방지하기 위해 사용되는 폴더
이 중 Resources 폴더는 거의 필수로 생성한 뒤 프로젝트를 진행하며, 추가적인 폴더 생성 시 해당 용도의 폴더가 아니라면 이 이름들을 피하거나, 반대로 해당 용도에 맞는 정확한 이름을 지어야 합니다.
또한 유니티 공식에서 다음과 같은 폴더 구조에 대한 예시도 제공하고 있습니다.
Unity 프로젝트 구성을 위한 모범 사례 에서 더 자세한 내용 확인이 가능합니다.
여러 사람과 프로젝트를 하면 할수록 어떻게 커밋하는지도 굉장히 중요하다는 것을 몸소 체감할 수 있습니다. 물론 해당 프로젝트에서 공유하는 컨벤션을 지켜야하겠지만, 개인 프로젝트에서는 가장 보편화 된 방식을 사용하려고 합니다.
<type>[optional scope]: <description> [optional body] [optional footer(s)]
Conventionalcommits.org
Angular Convention
많은 경우 type과 desciption만 잘 적어도 충분합니다.
- type
feat
: 새로운 기능 추가fix
: 버그 수정chore
: 코드에 변경 사항이 없는 기타 등등- docs: 문서에만 변경 사항이 있는 경우
- 그 외 : build:, ci:, perf:, refactor:, style:, test: 등
- description
- 현재 시제의 명령문을 사용합니다.
ex.) "change" not "changed" nor "changes"- 첫 글자에 대문자를 사용하지 않습니다.
- 마침표(.)를 찍지 않습니다.
위 규칙들은 프로젝트에서 여러 사람의 이해를 돕고 프로세스의 자동화를 위한 것이라고는 하지만, 실제로 많은 곳에서 사용하고 있는 규칙들이므로 이런 게 있다는 정도는 알아두면 좋을 것 같습니다.
현재 수강 중인 강의에서 제공되는 애셋을 활용해 시스템만 구현하는 것에서 만족할 수도 있지만 기왕 하는 거 좀 재밌게 하고 싶은 생각이 있어서 어떤 컨텐츠를 구현할 지 고민하게 되었습니다.
강의의 목차를 보면
- Title, Lobby, InGame의 세 개의 씬으로 구성되며
- 유저 데이터가 저장되고
- 유저는 재화를 가지고 있으며
- 장착 가능한 아이템이 존재하며
- 게임에는 여러 챕터와 각 챕터에는 스테이지가 존재하고
- 챕터를 클리어 하면 보상이 주어지는
시스템이 구현될 예정입니다.
착용한 아이템에 따라 캐릭터가 강해지고 클리어 할 수 있는 스테이지가 늘어나는 무언가의 컨텐츠가 필요할 것 같은데, 딱 떠오른 건 방치형 게임이었습니다.
테마는 요새 윤하의 새 앨범이 나오면서 개복치가 거의 10 년 만에 재조명받고 있는데 뭔가 방치형과 개복치를 얹은 그런 컨텐츠로 만들면 어떨까 싶었습니다.
아니면 로그라이트로 복치더로그(Bokchi The Rogue!) 하면 진짜 제목이랑 컨셉은 완벽한데 그 정도 구현할 시간은 없을 거 같고.. 고민 중입니다..
여튼 윤하의 복치더락 많관부!
Unity에서 권장하고 있는 디렉토리 구조가 있었군요. 하나 배워갑니당~