비현실 개발자를 위한 Roblox

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

이 페이지에는 경험 많은 Unreal Engine 개발자가 Roblox에 시작하는 데 도움이 되는 정보가 포함되어 있습니다. 기본 방향, 개념적 비교 및 두 플랫폼 간의 주요 차이점입니다.

방향 얻기

Unreal의 개요 및 Roblox Studio의 탐색기는 3D 공간에서 요소를 구성하는 주요 창입니다.둘 다 개체와 폴더의 계층을 표시합니다.그러나 아웃라인은 평평하고 덜 정의된 구조를 가지며 오직 Actors만 표시합니다.탐색기 창에는 깊이 중첩된 엄격한 구조가 있으며 실제로는 구성 요소로 간주되는 개체를 계층의 일부로 표시합니다.

Roblox Studio 자산 관리자도구 상자가 유니리얼 콘텐츠 브라우저와 겹치는 경우자산 관리자를 통해 경험 내의 모든 자산을 관리할 수 있으며, 도구 상자를 통해 게시한 모든 자산에 액세스할 수 있습니다.도구 상자에서는 Roblox 또는 커뮤니티의 자산을 검색하여 크리에이터 스토어에서 찾을 수도 있습니다.크리에이터 스토어는 유니리얼 엔진 마켓플레이스와 비슷하지만 스튜디오 사용자 인터페이스에서 직접 액세스할 수 있습니다.

철학적 차이

Roblox는 전통적인 게임 엔진이 아닌 "시뮬레이션 엔진"입니다.Unreal Actors 과 Roblox Parts 둘 다 기본 빌딩 블록으로 사용되지만, 실제로는 두 가지가 상당히 다릅니다.

  • 표현 : Actors 은 Unreal에서 레벨에 있는 모든 개체에 대한 더 높은 수준의 개념이지만, Parts 은 Roblox에서 나무 블록과 플라스틱 구슬과 같은 물리적 개체를 나타내도록 설계되었습니다.
  • 물리학 : Unreal에서 물리학 시뮬레이션을 수행하려면 특정 구성 요소(예: StaticMeshComponent) 내에서 물리학을 활성화하거나 Actors 에 구성 요소를 추가하여 물리 제약 조건을 추가합니다.Roblox에서 물리는 Parts 데이터 입력통합되며, 엔진이 상호 작용을 자동으로 처리합니다.

ActorPart를 만들면 즉시 차이를 볼 수 있습니다.Actor 는 위치, 회전 및 크기 조정보다 약간 더 있습니다.Part 는 동일한 정보와 재료 및 색상, 반사율과 투명도, 질량과 모양 등의 값을 포함합니다.두 가지는 유니리얼에서 StaticMeshActor를 비교할 때 유사한 속성을 공유하기 시작합니다(예:Roblox의 MeshPart 에 큐브)로 전환합니다.

An example Unreal actor in the Details panel.

비현실 편집기 세부 정보 패널
>

An example Roblox part in the Properties window.

Roblox Studio 속성 창
>

또 다른 유용한 비교는 Roblox의 ModelActor 비교입니다.모델은 유니리얼의 구성 요소와 마찬가지로 연결된 부품의 컨테이너로 작동하여 컬렉션을 위한 컨테이너로 작동합니다. Actors 유니리얼에서 구성 요소는 컨테이너입니다.모델의 부품 중 하나를 주 부품으로 지정하여 피벗 지점을 정의합니다.모델에는 스크립트, 애니메이션, 사운드 효과, 프롬프트, 제약 조건, 입자 방출기 등도 포함됩니다.

예를 들어, 비현실 Actor 은 원하는 시각적 효과를 달성하기 위해 여러 발신기를 사용하는 NiagraComponent 와 모양에 대한 메쉬, 스프링성을 추가하기 위한 물리적 제약 조건, 플레이어 상호 작용을 위한 스크립트를 가질 수 있습니다.개요에서 단일 Actor 명명된 SpringyFireball 을 봅니다.

Roblox에서 탐색기 창의 비슷한 SpringyFireball은 다음과 같이 보일 수 있습니다:


Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Roblox의 기본 물리학 철학은 3D 모델 빌드 프로세스로 확장됩니다.Roblox에서 여러 부품을 조립하여 어셈블리로 결합하는 것은 로블록스가 접합된 부품을 단일 강체로 처리하기 때문에 빠르게 신체만드는 좋은 방법입니다.이 접근법은 Unreal에서 실용적이지 않습니다.

길이와 질량에 대한 표준 미터법 단위를 사용하는 대신 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에 살지만, 클라이언트-서버 경계의 동일한 측면에서 스크립트 간에 코드를 공유하려는 경우 다른 곳에서 살 수 있습니다.

언리얼에는 다른 스크립트 유형의 개념이 없습니다.멀티플레이어 게임을 만들기로 선택하면 서버와 클라이언트 간의 게임 상태를 동기화하기 위한 추가 코드를 작성합니다.

Unreal에서는 기본 제공 클래스(예: UObject, ACharacters, ULevel, UWorld )를 C++ 또는 설계에서 확장하여 엔진의 대부분의 기능을 사용할 수 있습니다.비현실은 사용자 지정 이벤트를 지원하지만, 많은 클래스에는 엔진이 자연스러운 수명 주기의 일부로 자동으로 호출하는 이벤트가 포함되어 있습니다.

비현실적인 "틱" 시스템과 비교하여 Roblox 스크립트는 이벤트 주도적입니다.서비스에 구독하고 업데이트를 수신하여 유사한 엔진 기능에 액세스합니다.

C++ 및 Luau

스크립트 스크립팅위해 Unreal은 C++를 사용합니다. Roblox는 Luau, 스크립트 언어를 사용하여 Lua 5.1에서 파생됩니다.

Luau와 비교하여 C++는 전체적인 성능 우위를 갖지만, 원하는 종류의 경험에 관련되지 않을 수도 있습니다.Luau는 점진적으로 입력되며 더 간결한 구문을 사용합니다.그러나 더 큰 프로젝트에서는 점진적 입력이 강력하게 형식화된 언어인 C++에서 피하는 버그 카테고리를 소개할 수 있으므로 Roblox 스크립트에서 엄격한 형식 검사 활성화를 고려하십시오.

비현실에는 설계도라는 시각적 스크립트 시스템도 포함됩니다.Roblox에는 비슷한 기능을 제공하는 타사 플러그인이 있지만 비교 가능한 시스템이 내장되어 있지 않습니다.

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 문자가 있는 HumanoidTools을 장착할 수 있습니다.이러한 가정은 Unreal에 존재하지 않으므로 구현은 매우 다를 것입니다.

자산

Unreal과 Roblox는 모두 .fbx 형식으로 사용자 지정 메쉬와 모델을 가져오는 것을 지원합니다.특정 유형의 자산은 타사 모델링 소프트웨어에서 특정 구성 및 내보내기 설정이 필요할 수 있습니다.자세한 내용은 다음 페이지를 참조하십시오:

Unreal에서 자산은 내 Content 디렉토리에 가져와 콘텐츠 브라우저에 표시됩니다.Roblox에서 자산은 작업 영역과 도구 상자 또는 자산 관리자인벤토리 섹션으로 가져옵니다.

Roblox는 또한 개방형 소스 Blender 플러그인을 제공하여 가져오기 프로세스를 간소화하고 Blender 도구의 Unreal로 보내기 기능과 유사합니다.

변환

props.engine의 변환과 Roblox의 CFrames 는 개체의 3D 변환을 나타내는 데 유사한 목적을 수행합니다:

  • 변환과 CFrames는 3D 공간에서 개체의 위치와 회전을 나타냅니다.변환에는 크기가 포함되지만 Roblox는 의 일부가 아닌 속성을 사용합니다.
  • 둘 다 복잡한 변환에 대한 배수 지원(즉, 조합)과 다른 조작을 위한 내장 메서드를 갖추고 있습니다.

공동 작업

Unreal에서는 일반적으로 Perforce 또는 SVN와 같은 버전 제어 시스템을 통해 Unreal의 기본 사용자 인터페이스를 통해 협력합니다.이러한 버전 제어 시스템은 한 사람이 작업하는 동안 파일을 잠그는 중앙화된 "체크아웃" 모델을 사용합니다.

Roblox 파일은 클라우드에 살고 있지만(복사본을 내보낼 수는 있지만), Roblox Studio는 동시 편집, 그룹 관리, 권한, 스크립트 초안 작성 등을 위한 내장 공동 작업 워크플로를 제공합니다.참조 공동 작업.

플러그인

Unreal과 마찬가지로 Roblox Studio는 플러그인을 지원하며, 이는 개발 프로세스의 다양한 측면에 대한 간소화 또는 추가 제어를 제공할 수 있습니다.플러그인은 크리에이터 스토어에서 사용할 수 있으며, 무료인 것들도 많습니다.

용어집

| 비현실 | Roblox | 노트 | | :--- | :--- | :--- | | 레벨 | 장소 | | | 배우 | Part 또는 Model | 보기 철학적 차이점 .| | 설계 클래스 | 패키지 | | | 변환 | CFrame | CFrame 규모 정보가 포함되지 않습니다.참조 변환.| | 개요 작성기 | 탐색기 창 | | | 세부 정보 패널 | 속성 창 | | | 레벨 뷰포트 | 뷰포트 | | | 콘텐츠 브라우저 | 자산 관리자 또는 도구 상자 | | | 풍경 모드 | 지형 편집기 | | | 플레이어 시작 | SpawnLocation | | | 출력 로그 | 출력 | | | 마켓플레이스 | 크리에이터 스토어 | | | 메뉴 바 | 메뉴 바 | | | 플러그인 | 플러그인 | | | 출력 로그 | 출력 | | | 마켓플레이스 | 크리에이터 스토어 | | | 메뉴 바 | 메뉴 바 | | | 플러그인 | 플러그인 | |