이 페이지에는 경험 한 유니티 개발자가 Roblox로 시작하는 데 도움이 되는 정보가 포함되어 있습니다. 기본 방향, 개념적 비교 및 두 플랫폼 간의 주요 차이점입니다.
방향 얻기
Unity의 계층 창과 Roblox Studio의 탐색기는 3D 장면에서 요소를 구성하는 주요 창입니다.
- 둘 다 개체(예: 캐릭터 및 환경 자산)를 관리하고 구성할 수 있습니다.
- 둘 다 개체 간의 부모-자식 관계에 대해 트리 구조를 사용합니다.
그러나 계층 창에는 미리 정의된 구조가 없으며, 탐색기 창에는 엄격한 구조가 있습니다.탐색기 창을 유니티의 계층과 프로젝트 창의 조합으로, 작업 폴더가 가장 인식 가능한 요소로 생각하는 것이 도움이 될 수 있습니다.
마찬가지로 Roblox Studio 자산 관리자 및 도구 상자는 Unity 프로젝트 창과 겹쳐집니다.자산 관리자를 통해 경험 내의 모든 자산을 관리할 수 있으며, 도구 상자를 통해 게시한 모든 자산에 액세스할 수 있습니다.또한 도구 상자에서 Roblox나 커뮤니티의 자산을 검색할 수 있으며, Unity 자산 상점과 유사합니다.
철학적 차이
Roblox는 전통적인 게임 엔진이 아닌 "시뮬레이션 엔진"입니다.Unity GameObjects 와 Roblox Parts 는 모두 3D 환경에서 개체를 생성하는 데 필수 구성 요소이지만, 실제로는 두 가지가 상당히 다릅니다.
- 표현 : GameObjects 은 Unity에서 장면의 모든 개체에 대한 상위 수준 개념이지만, Roblox의 Parts 는 우드 블록과 플라스틱 구형과 같은 물리적 개체를 나타내기 위해 설계되었으며, Unity의 기본 개체와 같은 추상적인 기하학을 나타내기 위해 설계되지는 않았습니다.
- 물리학 : 유니티에서 물리학 시뮬레이션을 수행하려면 Rigidbody 및 Collider 와 같은 구성 요소를 GameObject 에 연결합니다.Roblox에서 물리는 데이터 입력Parts 에 통합되어 엔진이 상호 작용을 자동으로 처리합니다.
GameObject 및 Part를 만들면 즉시 차이를 볼 수 있습니다.GameObject 에는 위치, 회전 및 크기 조정 이상의 것이 없습니다.Part 는 동일한 정보와 재료 및 색상, 반사율과 투명도, 질량과 모양 등의 값을 포함합니다.Part 을 빈 GameObject 에 더 가까운 무언가로 변환하는 것은 제거 많은 기본 속성을 제거하는 것을 의미합니다.반대로, GameObject 를 추가하여 많이 보이는 Part 처럼 보이는 MeshFilter 를 만들고, MeshRenderer , Collider , Rigidbody 구성 요소를 추가하여 만들 수 있습니다.
스크립팅 관점에서 볼 때, GameObject 는 Roblox의 Instance 모든 다른 Roblox 클래스의 기본 클래스와 가장 유사하지만, 당신이 만들지 않았기 때문에(그리고 만들 수 없었기 때문에) 유형 Instance 의 개체를 비교하는 것은 특히 유용하지 않습니다.
또 다른 비교는 Roblox에 대한 Unity의 입니다.모델은 Unity에서 여러 부모-자식 관계를 설정할 수 있는 것과 동일한 방식으로 연결된 부품의 컨테이너로 작동합니다. models act as a container for a collection of interconnected parts in the same way that you might establish a parent-child relationship between many GameObjects in Unity.모델의 부품 중 하나를 주 부품으로 지정하여 피벗 지점을 정의합니다.모델에는 스크립트, 애니메이션, 사운드 효과, 프롬프트, 제약 조건, 입자 방출기 등이 저장됩니다.
예를 들어, 유니티 GameObject 에는 ParticleSystem , Physics3D , SpringConstraint , 그리고 스크립트가 있을 수 있습니다.계층 창에서 단일 GameObject 명명된 SpringyFireball 을 보십시오.검사기 창에는 구성 요소와 속성의 컬렉션이 표시됩니다.
Roblox에서 탐색기 창의 비슷한 SpringyFireball은 다음과 같이 보일 수 있습니다:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Roblox의 기본 물리학 철학은 3D 모델 빌드 프로세스로 확장됩니다.Roblox에서 여러 부품을 조립하여 어셈블리로 결합하는 것은 로블록스가 접합된 부품을 단일 신체처리하기 때문에 빠르게 물건을 만드는 좋은 방법입니다.이 접근법은 유니티에서 사용할 수 없습니다.
길이와 질량에 대한 표준 미터법 단위를 사용하는 대신 Roblox는 스터드 및 Roblox 질량 단위(RMU)라는 상상의 단위를 사용합니다.대략적인 미터법 변환 및 사용 주변의 권장 사항은 단위를 참조하십시오.
위치 문제
Roblox 경험은 기본적으로 멀티플레이어이므로 Roblox Studio에는 특정 동작을 가진 다양한 저장소 위치가 포함됩니다.예를 들어, 스크립트는 ReplicatedStorage 에 넣을 때 실행될 수 있지만, StarterPlayerScripts 에 넣을 때는 실행되지 않을 수 있습니다.자세한 내용은 클라이언트-서버 런타임 및 개체 조직을 참조하십시오.
위치 | 설명 :--- | :--- 작업 공간 | 게임 세계를 나타냅니다.이 위치는 개체에 직접 연결하여 동작을 제어하는 서버 스크립트에 잘 작동합니다.ReplicatedFirst | 다른 것보다 먼저 클라이언트에 복제하는 개체를 포함합니다.이 위치는 로딩 화면을 표시하는 데 필요한 절대적인 최소 집합의 개체와 클라이언트 스크립트에 적합합니다.ReplicatedStorage | 클라이언트와 서버에 모두 복제되는 개체를 포함합니다.이 위치는 서버와 클라이언트 모두에서 사용하려는 Class.ModuleScript\|ModuleScripts에 이상적입니다.Class.LocalScript\|LocalScripts 이 위치에서 실행하지 않지만 Class.Script\|Scripts 실행 컨텍스트가 Client 인 경우 실행합니다.ServerScriptService | 서버 스크립트를 포함합니다.이 위치는 게임 논리 및 클라우드 저장소와 같은 서버 측 기능 또는 개체에 액세스해야 하는 스크립트에 적합합니다.ServerStorage | 서버 측 개체를 포함합니다.이 위치는 경험에 참여할 때 즉시 클라이언트에 복제할 필요가 없는 큰 개체에 적합합니다.스크립트는 이 위치에서 실행되지 않지만 서버 측에서 Class.ModuleScript\|ModuleScripts스타터플레이어.스타터캐릭터스크립트 | 캐릭터가 생성될 때 실행하는 Class.LocalScript\|LocalScripts를 포함합니다.StarterPlayer.StarterPlayerScripts | 플레이어가 경험에 참여할 때 실행되는 일반 목적의 Class.LocalScript\|LocalScripts 를 포함합니다.스타터GUI | 클라이언트가 게임을 로드할 때 표시하는 GUI 요소를 포함합니다.Class.LocalScript\|LocalScripts 이 위치에서 실행할 수 있습니다.이 위치는 버튼, 메뉴 및 팝업을 추가하는 등 게임의 사용자 인터페이스를 수정하는 스크립트에 적합합니다.스타터 팩 | 일반적으로 Class.Tool\|Tools 포함하지만, 플레이어 백팩 설정을 위해 Class.LocalScript\|LocalScripts 포함할 수 있음
스크립팅
Roblox 경험은 Luau 스크립트의 세 가지 다른 유형을 지원합니다:
클라이언트 스크립트
이러한 스크립트는 클라이언트에서 실행되며, 서버는 해당 동작에 대한 가시성이 없습니다.유산 이유로 인해 이러한 스크립트는 LocalScripts 또는 Scripts 의 형태와 RunContext 값의 Client 을 취할 수 있습니다.클라이언트 스크립트는 일반적으로 ReplicatedStorage , StarterPlayerScripts 또는 StarterCharacterScripts에 살고 있습니다.
서버 스크립트
이러한 스크립트는 서버에서 실행되며 클라이언트는 해당 동작을 볼 수 없습니다.서버 스크립트에는 RunContext 값의 Server 가 있으며 일반적으로 게임 클라이언트에 복제되지 않는 ServerScriptService 의 콘텐츠가 있습니다.
모듈 스크립트
이러한 스크립트는 하나의 값만 반환하는 재사용 가능한 코드 조각으로, 일반적으로 함수나 테이블(또는 함수 테이블)입니다.클라이언트 및 서버 스크립트에서 코드를 복제하는 대신 모듈 스크립트를 사용하여 두 사이에 코드와 데이터를 공유하십시오.모듈 스크립트는 종종 ReplicatedStorage에 살지만, 클라이언트-서버 경계의 동일한 측면에서 스크립트 간에 코드를 공유하려는 경우 다른 곳에서 살 수 있습니다.
유니티에는 다른 스크립트 유형의 개념이 없습니다.멀티플레이어 게임을 만들기로 선택한 경우 Unity는 네트워킹 라이브러리를 사용하여 언제 GameObject(그리고 그 스크립트)가 서버에 독점적으로 사용되어야 하는지 나타냅니다.
Unity에서 엔진의 대부분의 기능은 MonoBehaviour의 메서드를 통해 사용할 수 있습니다.예를 들어, 렌더링 루프 전에 코드를 실행하려면 Update() 메서드에 코드를 추가합니다.물리 충돌 이벤트를 처리하려면 OnCollideEnter() 메서드에 코드를 추가합니다.
Roblox 스크립트는 이벤트 중심입니다. 서비스에 구독하고 업데이트를 수신하여 비슷한 기능에 액세스합니다.
C# 및 Luau
스크립팅에 대해 Unity는 C#을 사용합니다. Roblox는 Luau, 스크립팅 언어를 사용하여 Lua 5.1에서 파생됩니다.
C#와 비교하여 Luau는 점진적으로 타이핑되고 일반적으로 더 간결한 구문을 사용합니다.그러나 더 큰 프로젝트에서는 점진적 입력이 강력하게 형식이 지정된 언어인 C#이 피하는 버그 카테고리를 소개할 수 있으므로 Roblox 스크립트에서 엄격한 형식 검사 활성화를 고려하십시오.
스크립트 언어 간의 기본 구문 차이에 대해서는 Luau와 C# 비교를 참조하십시오.
Luau 코드 샘플
다음 Luau 코드 샘플은 플레이어가 낚싯대를 장착한 후, 사용자 입력(이 경우 E 키)을 수신하고 추가 함수를 호출하는 방법을 보여줍니다.
-- 필요한 게임 서비스 받기
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 단일 함수를 반환하는 ReplicatedStorage의 모듈 스크립트 가져오기
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- 이 스크립트가 낚시대의 자식임을 가정합니다
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- 키가 아래로 내려가는지 확인한 다음 다른 함수를 호출하십시오
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- 플레이어가 낚싯대를 장착할 때만 작동을 활성화합니다
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- 플레이어가 낚싯대를 장비 해제할 때 작업 비활성화
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Roblox 스크립트는 Roblox에 내장된 가정이 많기 때문에 상대적으로 간결할 수 있습니다: 서버에 연결된 Player 문자가 있는 Humanoid 및 Tools을 장착할 수 있습니다.이러한 가정은 Unity에 존재하지 않으므로 구현은 매우 다를 것입니다.
자산
Unity와 Roblox는 모두 .fbx 형식으로 사용자 지정 메쉬와 모델을 가져오는 것을 지원합니다.특정 유형의 자산은 타사 모델링 소프트웨어에서 특정 구성 및 내보내기 설정이 필요할 수 있습니다.자세한 내용은 다음 페이지를 참조하십시오:
Unity에서 개체는 프로젝트 창에 표시되는 Assets 디렉터리에 가져옵니다.Roblox에서 자산은 작업 영역과 도구 상자 또는 자산 관리자 의 인벤토리 섹션으로 가져옵니다.
Roblox는 또한 가져오기 프로세스를 간소화하기 위한 오픈 소스 Blender 플러그인을 제공합니다.
변환
props.engine의 변환과 Roblox의 CFrames 는 개체의 3D 변환을 나타내는 데 유사한 목적을 수행합니다:
- 변환과 CFrames는 3D 공간에서 개체의 위치와 회전을 나타냅니다.변환에는 크기가 포함되지만 Roblox는 의 일부가 아닌 속성을 사용합니다.
- 둘 다 복잡한 변환에 대한 배수 지원(즉, 조합)과 다른 조작을 위한 내장 메서드를 갖추고 있습니다.
공동 작업
Unity에서는 표준 버전 제어 시스템이나 Unity 버전 제어와 같은 유료 서비스와 협력합니다.
Roblox 파일은 클라우드에 살고 있지만(복사본을 내보낼 수는 있지만), Roblox Studio는 동시 편집, 그룹 관리, 권한, 스크립트 초안 작성 등을 위한 내장 공동 작업 워크플로를 제공합니다.참조 공동 작업.
플러그인
유니티 도구와 마찬가지로 Roblox Studio는 플러그인을 지원하며, 이는 개발 프로세스의 다양한 측면을 간소화하거나 추가 제어를 제공할 수 있습니다.플러그인은 크리에이터 상점사용할 수 있으며, 무료로 많이 제공됩니다.
용어집
| 유니티 | Roblox | 노트 | | :--- | :--- | :--- | | 장면 | 장소 | | | 게임 개체 | Part 또는 Model | 필리소피적 차이점 보기 참조하십시오.| | Prefab | 패키지 | | | Transform | CFrame | CFrame 규모 정보가 포함되지 않습니다.참조 변환.| | 계층 창 | 탐색기 창 | | | 검사자 | 속성 창 | | 장면 보기 | 뷰포트 | | 게임 보기 | 뷰포트 | 게임 플레이 뷰로 전환되는 뷰포트는 경험을 테스트할 때입니다.| | 프로젝트 창 | 자산 관리자 또는 도구 상자 | | | 지형 검사자 | 지형 편집자 | | | 스폰 포인트 | | | | 콘솔 | 출력 | | | 자산 저장소 | 크리에이터 스토어 | | | 오버레이 | 메뉴 바 | | | 도구 | 플러그인 | | | 플러그인 | 플러그인 크리에이터 스토어 | | |