코드를 Git에 보관하고, 아트를 패키지로 버전 관리하며, 모든 사람이 서로의 변경 사항을 덮어쓰지 않고 작업할 수 있는 Roblox 프로젝트를 위한 팀 워크플로우입니다.
간단한 버전
- 코드는 Git에 있으며 Rojo를 통해 Studio로 들어갑니다.
- 모든 사람은 자신의 사용자 장소에서 작업한 후 완료된 작업을 공유 Dev 장소로 가져옵니다.
- Stable은 플레이 테스트를 위한 Dev의 고정된 스냅샷입니다. Prod는 라이브 게임입니다.
장소
모든 장소는 프로젝트 그룹에 의해 소유됩니다. Publish As를 클릭하기 전에 항상 그룹이 선택되어 있는지 확인하세요.
| 장소 | 목적 | 누가 변경하는가 | 방법 | 이름 |
|---|---|---|---|---|
| 사용자 | Dev에서 복사한 개인적인 일상 작업 공간 | 당신 | Rojo 연결 + Studio | USER / [이름] - [프로젝트] - [레벨] |
| Dev | 모든 사람의 작업이 결합된 공유, 불안정한 조합 | 모든 사람, 검토 후 | 코드에 대한 Rojo 연결, 아트에 대한 Team Create | DEV - [프로젝트] |
| 자산 | 원본 패키지: 캐릭터, 빌딩 키트, 세트 드레싱 | 아티스트 | 편집 + 패키지로 게시 | ASSET / [프로젝트] - [레벨] |
| Stable | 플레이 테스트에 사용되는 Dev의 고정된 스냅샷 | 배포 스크립트만 | 자동화 | STABLE / [프로젝트] |
| Prod | 공개 게임 | 릴리스 소유자, 승인 필요 | Stable에서 복사 | [프로젝트] |
항목이 가는 곳
Rojo는 부분적으로 관리됨으로 설정되어 있습니다: Git이 코드와 구성을 소유하고, 장소 파일이 아트와 레벨을 소유합니다. 각 런타임 위치(ReplicatedStorage, ServerScriptService)에는 두 개의 콘텐츠 폴더가 있습니다:
| 무엇 | 어디 | 진실의 출처 |
|---|---|---|
| 코드 (시스템, 라이브러리) | src/… 리포지토리 | Git |
| 유형화된 구성 및 정의 (아이템, 퀘스트, 사운드, 메커니즘) | src/…/ManagedContent/ | Git |
| 아트 및 MeshParts가 있는 모든 것 | …/Content, 패키지로 | 장소 파일 및 자산 장소 |
| 레벨 레이아웃, 조명, 지형 | Dev 장소의 Workspace / Lighting | 장소 파일 |
ManagedContent: Git이 진실의 출처
- Rojo는 디스크에서 다시 빌드하므로 Studio 편집이 다음 동기화에서 덮어씌워집니다. 디스크의 파일을 편집하세요.
- 파일은 .luau 모듈, .model.json 설명자 또는 .rbxmx 인스턴스입니다.
- Studio에서 만든 것을 ManagedContent로 이동하려면:
- 오른쪽 클릭하고 파일로 저장 → .rbxmx를 선택합니다. XML 형식은 이진 .rbxm과 달리 읽기 쉬운 차이를 제공합니다.
- 파일을 ManagedContent/ 아래에 두고 커밋합니다.
- 구성으로 읽는 모든 코드에 사용하세요. 코드 검토 및 Git 기록이 이를 커버합니다.
콘텐츠: 장소 파일이 진실의 출처
- Rojo는 이를 무시하며, 디스크에 파일이 없으므로 편집기의 자동 완성이 이를 볼 수 없습니다.
- MeshParts에 필요합니다, Rojo는 이를 동기화할 수 없습니다.
- 아티스트가 Studio에서 편집하는 아트에 사용하세요: 소품, 캐릭터, VFX, 스테이징.
- 코드 소유 구성은 여기에 두지 마세요. 검토 및 차이에서 보이지 않게 됩니다.
- 유일한 기록은 Roblox의 장소 버전 기록이므로 Dev를 정기적으로 게시하세요.
프로젝트 파일
Rojo에게 Content를 건드리지 않도록 $ignoreUnknownInstances를 사용하세요:
"ReplicatedStorage": {
"$path": "src/ReplicatedStorage",
"Content": {
"$className": "Folder",
"$ignoreUnknownInstances": true
}
}리포지토리 레이아웃:
src/
├── ReplicatedStorage/ # 공유 + 클라이언트
│ ├── Systems/
│ ├── Libraries/
│ └── ManagedContent/
└── ServerScriptService/ # 서버 전용, 복제되지 않음
├── Systems/
├── Libraries/
└── ManagedContent/설정 (프로젝트당 한 번)
- 리포지토리를 클론하고 도구 체인을 설치합니다. 우리는 Rokit를 사용합니다: rokit install을 실행하여 rojo, selene, StyLua, luau-lsp 및 lune를 가져옵니다.
- 사용자 장소 만들기:
- Dev 장소를 엽니다.
- 파일 → Publish As를 선택하고, 프로젝트 그룹을 선택한 후 USER / [이름] - [프로젝트] - [레벨]이라는 새 장소를 만듭니다.
- Dev를 닫고 새 장소를 엽니다.
- Rojo 연결:
- 편집기에서 리포지토리를 열고 rojo serve를 실행합니다.
- Studio에서 Rojo 플러그인에서 연결을 클릭합니다.
당신의 사용자 장소는 Dev의 복사본이므로 패키지가 연결된 상태로 유지됩니다. 장소를 열 때마다 최신 버전으로 업데이트됩니다.
엔지니어: 코드 루프
- main에서 브랜치를 만듭니다.
- Dev에서 사용자 장소를 업데이트하여 최신 레이아웃과 아트에서 시작합니다:
- Dev 장소를 엽니다.
- 파일 → Publish As를 선택하고 프로젝트 그룹을 선택한 후 기존 사용자 장소를 선택하여 덮어씁니다.
- rojo serve가 연결된 상태에서 사용자 장소에서 작업합니다.
- PR을 열기 전에 stylua (형식 지정) 및 selene (린트 검사)를 실행합니다.
- PR을 열고 검토를 받습니다.
- 승인이 되면 main에 병합합니다.
- Dev 동기화:
- git checkout main && git pull을 실행합니다.
- Dev 장소를 열고 rojo serve를 실행한 후 연결합니다.
- 변경 사항이 장소의 레이아웃 변경을 필요로 하는 경우, 예를 들어 새로운 속성이나 자리 표시자 자산이 필요한 경우 Dev에도 추가합니다. Rojo는 코드와 ManagedContent만 동기화하므로 이를 가져오지 않습니다.
Rojo가 관리하는 스크립트나 ManagedContent를 Studio에서 수동으로 편집하지 마세요. 다음 동기화에서 삭제됩니다.
아티스트: 자산 루프
기존 자산 변경하기
- 자산 장소를 열고 원본 패키지를 편집합니다.
- 오른쪽 클릭하고 패키지로 게시를 선택합니다.
- Dev의 복사본이 변경 사항을 가져옵니다:
- AutoUpdate가 켜진 복사본은 Dev를 여는 다음 번에 업데이트됩니다.
- Dev가 이미 열려 있는 경우, 복사본을 오른쪽 클릭하고 최신 패키지 가져오기를 선택합니다. 모두 업데이트를 사용하여 게임의 모든 장소를 업데이트할 수도 있습니다.
- 선택적으로 패키지 세부정보 → 버전 아래에 버전 노트를 추가합니다.
새로운 자산 추가하기
- 자산 장소에서 빌드합니다. 단일 객체일지라도 모델로 그룹화하여 나중에 자식 요소를 추가할 수 있도록 합니다.
- 오른쪽 클릭하고 패키지로 변환을 선택합니다.
- 소유권을 프로젝트 그룹으로 설정합니다. 소유권은 나중에 이전할 수 없습니다.
- PackageLink를 선택하고 AutoUpdate를 켭니다.
레이아웃 및 레벨 작업
- 사용자 장소에서 항목을 정리합니다.
- 리드가 승인하면 변경 사항을 Dev로 복사합니다. Dev에서 공유 레이아웃 패스를 위해 Team Create를 사용합니다.
패키지 규칙
- 자산 장소에서만 패키지를 편집하세요. Dev에서 복사본을 편집하면 수정된 것으로 표시되어 자동 업데이트가 중지됩니다. 우발적인 편집을 수정하려면 오른쪽 클릭하고 패키지에 대한 변경 사항 취소를 선택합니다.
- PackageLink를 삭제하거나 이동하지 마세요. 그렇게 하면 복사본이 일반 모델로 돌아갑니다.
- 중첩 패키지: 내부 패키지를 먼저 게시한 다음 외부 패키지를 게시합니다.
- 롤백: 패키지 세부정보 → 버전으로 가서 이전 버전을 선택하고 제출을 클릭합니다.
- 버전 비교: 패키지를 오른쪽 클릭하고 패키지 옵션 → 패키지 버전 비교를 선택합니다.
- AutoUpdate는 기본적으로 꺼져 있습니다. 복사본의 PackageLink에서 AutoUpdate를 켜면 자동으로 업데이트되며, 꺼두면 복사본을 수동으로 업데이트합니다.
- 접근: 패키지를 그룹과 공유하여 전체 팀이 사용하고 편집할 수 있도록 합니다. 자산 개인 정보를 참조하세요.
릴리스: Dev → Stable → Prod
Dev → Stable (배포 스크립트)
작은 배포 스크립트를 작성하세요; Lune가 잘 작동합니다. 일정에 따라 실행하거나 각 플레이 테스트 전에 실행합니다. 스크립트는 다음을 수행해야 합니다:
- 현재 Dev 장소를 다운로드하여 Content, Workspace 및 조명을 포함합니다.
- 모든 PackageLink를 제거합니다. 패키지는 일반 모델이 되므로 Stable은 고정되고 아티스트가 새로운 패키지 버전을 게시할 때 변경되지 않습니다.
- 결과를 Stable 장소에 게시합니다 Open Cloud 장소 게시 API를 사용하여. assets 권한과 읽기 및 쓰기 접근 권한이 있는 API 키가 필요하며, 장소 ID도 필요합니다.
테스터는 팀이 Dev에서 계속 작업하는 동안 안정적인 빌드를 받습니다. 아무도 Stable을 수동으로 편집하지 않습니다.
Stable → Prod
릴리스 소유자가 Stable을 Prod로 복사하며, 승인 후에만 가능합니다. Prod는 라이브이므로 다른 사람은 건드리지 않습니다.
커뮤니케이션
각 프로젝트에 일반 채널, 엔지니어링 채널 (PR 링크, 기술 논의), 아트 채널 (WIP, 리뷰)을 제공합니다.