전문 개발 스튜디오의 경우 타사 도구 설정 및 자동화에 투자하면 개발자 생산성이 크게 향상될 수 있습니다.Roblox의 클라우드 우선 접근법에는 많은 장점이 있지만, 개발 워크플로의 일부를 클라우드 외부로 이동하면 더 큰 팀이 시간에 따라 변경 사항을 추적하고, 코드를 검토하고, 이미 익숙한 언어와 도구를 사용할 수 있습니다.
동기화 문제
핵심적으로 Roblox와 외부 도구를 사용하는 것은 동기화 문제입니다:
- 로블록스 스크립트가 디스크에서 .luau 파일로 존재하여 자신의 도구를 사용하여 작업할 수 있도록 하려면
- 작업을 마친 후 Roblox 프로젝트에 파일을 다시 가져와야 합니다.
- 그 사이에 다른 사람이 동일한 파일을 변경했다면 충돌을 처리해야 합니다.
전체 솔루션이 원활하고 자동적으로 느껴지려면 파일의 변경 사항을 듣고 스튜디오에 이러한 변경 사항을 다시 통합해야 합니다.즉, 서버와 스튜디오 플러그인이 필요하며, 이는 Rojo가 이 문제를 해결하는 방법입니다.
Roblox의 클라우드 우선 접근법 대신 Rojo는 "파일 시스템 우선" 접근법을 허용합니다.프로젝트의 모든 스크립트 파일을 Luau 파일로 추출합니다.그런 다음 서버를 실행합니다.Rojo 플러그인은 서버에 연결하여 이러한 파일을 Studio와 동기화합니다.
포레먼으로 로조 설치
수동으로 Rojo 바이너리를 다운로드하고 실행할 수 있지만, 그 접근법은 팀의 다른 개발자가 다른 Rojo 버전을 사용하여 위험을 감수할 수 있습니다.더 나은 솔루션은 구성 파일—리포지토리 및 버전 목록—을 사용하는 도구 관리자인 Foreman과 같은 설치 및 업그레이드 프로세스를 기계 간에 일관되게 만드는 도구를 사용하는 것입니다.
프로젝트 내의 패키지가 아니라 기본 개발 환경을 관리하기 때문에 Foreman은 nvm보다 npm에 더 가깝지만 비교는 완벽하지 않습니다.간단한 foreman.toml 파일은 다음과 같습니다:
[tools]
rojo = { github = "rojo-rbx/rojo", version = "7.4.1" }
wally = { github = "UpliftGames/wally", version = "0.3.2" }
그런 다음 이 도구를 foreman install로 설치합니다.전역 foreman.toml 파일 외에도 Foreman은 프로젝트별 파일을 지원하므로 다른 프로젝트에서 Rojo, Wally 또는 기타 도구의 다른 버전을 쉽게 사용하고 전체 팀을 동일한 버전으로 유지할 수 있습니다.
도구가 새 버전을 릴리스하면 .toml 파일에서 버전 번호를 명시적으로 높이고, Foreman을 사용하여 업그레이드를 수행하고, 새 버전을 테스트하고, 문제가 발생하면 다운그레이드합니다.명령 및 설치 지침은 Foreman에 참조하십시오.
Rojo 실행
Foreman으로 Rojo를 설치한 후, 실제로 설치한 것은 Rojo 서버입니다. 다음 단계는 Roblox Studio용 Rojo 플러그인 설치입니다.
rojo plugin install
그런 다음 새로운 경험에 대한 프로젝트 구조를 생성하고 빌드합니다:
rojo init my-new-experiencecd my-new-experiencerojo build -o my-new-experience.rbxl
대신 기존 경험을 포트할 수도 있습니다 port an existing experience. 어느 쪽이든, 프로젝트가 있으면 Rojo 서버를 시작하세요:
rojo serve
Roblox Studio에서 방금 작성한 .rbxl 파일을 열고 Rojo 플러그인을 시작하고 실행 중인 서버에 연결하여 기본 텍스트 편집기에서 변경 사항을 시작하고 스튜디오로 자동으로 동기화되는 것을 확인할 수 있습니다.
로조 프로젝트에는 파일, 다양한 구성 옵션 및 몇 가지 제한에 대한 특정 이름 요구 사항, 모두 로조 문서에 포함되어 있습니다 Rojo 문서.
패키지 관리자
Roblox에는 광범위한 포함된 API가 있지만, 일관되고 재현 가능한 방식으로 커뮤니티 소프트웨어 패키지를 사용하려면 패키지 관리자가 필요합니다.Wally는 인기 있는 옵션입니다.Foreman을 통해 설치할 수 있으며 Rojo와 마찬가지로 작동합니다.
경험의 Rojo 디렉토리 내에서 wally init 를 실행합니다. 그런 다음 원하는 패키지를 wally.toml 에 추가합니다. 파일은 다음과 같이 보일 수 있습니다.
[package]
name = "my-home-directory/my-new-experience"
version = "0.1.0"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
[dependencies]
react = "jsdotlua/react@17.1.0"
react-roblox = "jsdotlua/react-roblox@17.1.0"
cryo = "phalanxia/cryo@1.0.3"
그런 다음 wally install 실행합니다.Wally는 Packages 디렉터리를 만들고 지정된 패키지를 거기에서 다운로드합니다.마지막 단계는 Rojo의 내용을 Roblox로 동기화하기 위해 Packages 디렉터리를 추가하는 것입니다.Open default.project.json 을 열고 경로를 추가합니다.단순화를 위해 이 예제에서는 모든 디렉터리를 ReplicatedStorage에 추가하여 모든 패키지가 모든 스크립트에 사용할 수 있지만, ServerScriptService 또는 StarterPlayerScripts에 특정 패키지를 추가하는 것을 선호할 수 있습니다.
{
"name": "my-new-experience",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Shared": {
"$path": "src/shared"
},
"Packages": {
"$path": "Packages"
}
},
...
}
}
그런 다음 다른 모든 ModuleScript와 마찬가지로 스크립트 내에서 패키지를 요구할 수 있습니다.
local Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local React = require(ReplicatedStorage.Packages.react)local ReactRoblox = require(ReplicatedStorage.Packages["react-roblox"])local handle = Instance.new("ScreenGui", Players.LocalPlayer.PlayerGui)local root = ReactRoblox.createRoot(handle)local helloFrame = React.createElement("TextLabel", {Text = "Hello World!",Size = UDim2.new(0, 200, 0, 200),Position = UDim2.new(0.5, 0, 0.5, 0),AnchorPoint = Vector2.new(0.5, 0.5),BackgroundColor3 = Color3.fromRGB(248, 217, 109),Font = Enum.Font.LuckiestGuy,TextSize = 24})root:render(helloFrame)
다른 대부분의 소프트웨어 프로젝트와 마찬가지로 목표는 기여자가 리포지토리를 복제하고, Foreman을 설치하고, 몇 가지 명령을 실행하고, 팀의 나머지와 동일한 개발 환경을 갖도록 하는 것입니다.
버전 제어
컴퓨터에 일련의 일반 텍스트 파일이 있으면 다양한 기능이 잠금 해제되지만, 주요 기능은 버전 제어입니다.스크립트와 구성 파일을 Git 또는 Mercurial 리포지토리에 저장할 수 있으며, GitHub, GitLab 또는 Bitbucket에서 원격 리포지토리를 호스팅하고 코드 변경을 검토하며 원하는 텍스트 편집기를 사용할 수 있습니다.
Visual Studio 코드 는 가장 큰 확장 생태계를 가지고 있지만 Sublime Text , Notepad++ 및 Vim 은 모두 인기 있는 선택입니다.선택한 편집기가 Studio 스크립트 편집기의 기능과 일치하려면 몇 가지 확장이 필요합니다.
또한 추가할 수 있습니다:
- 일반적인 문제를 검사하고 코딩 표준을 적용하는 린터 like selene
- 코드 형식 지정자 같은 StyLua
- 자동 완성, 형식 검사 등의 언어 서버와 같은 Luau 언어 서버
자산
이 페이지의 도구는 스크립트에 가장 적합합니다; 3D 아티스트는 이미 Blender 및 Maya와 같은 외부 도구를 사용하고, 소스 파일을 버전 제어에 저장하고, Studio에 그들의 창작물을 가져옵니다.Studio 자산이 있은 후에는 가능한 한 패키지를 사용하는 것이 좋습니다.
Roblox의 패키지 구현은 이 페이지의 도구와 마찬가지로 많은 원칙을 따릅니다: 버전 기록이 있는 중앙 저장소로, 모든 자산의 모든 복사본을 동기화하는 원활한 방법을 제공합니다.워크플로를 개선할 수 있는 방법에 대한 자세한 정보는 패키지를 참조하십시오.
모든 것 취소
타사 도구가 변경 사항을 Roblox Studio로 동기화하는 대신 교체하는 것이 아니기 때문에 이 워크플로의 어떠한 부분도 잠금되지 않습니다.언제든지 이러한 도구 중 하나 또는 모두를 사용 중지하고 스튜디오에서 전적으로 경험을 편집하도록 돌아갈 수 있습니다.위험이 부족하기 때문에 타사 도구로 실험하는 것이 특히 매력적입니다.