언리얼 개발자를 위한 Roblox

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

이 페이지는 경험이 풍부한 언리얼 엔진 개발자가 Roblox를 시작하는 데 도움을 주기 위한 정보, 기본적인 방향 설정, 개념적 비교 및 두 플랫폼 간의 주요 차이점을 포함합니다.

방향 잡기

여러 창과 패널을 보여주는 마크업이 포함된 언리얼 에디터 사용자 인터페이스. 여러 창과 패널을 보여주는 마크업이 포함된 Roblox 스튜디오 사용자 인터페이스.

언리얼의 **아울라이너(Outliner)**와 Roblox 스튜디오의 탐색기(Explorer)는 3D 공간에서 요소를 조직하는 주된 창입니다. 두 창 모두 객체와 폴더의 계층 구조를 표시합니다. 그러나 **아울라이너(Outliner)**는 구조가 평면적이고 덜 정의되어 있으며 Actors만 표시됩니다. 탐색기(Explorer) 창은 깊게 중첩된 엄격한 구조를 가지고 있으며 언리얼에서 구성 요소로 간주되는 객체조차 계층 구조의 일부로 모든 객체를 표시합니다.

Roblox 스튜디오의 자산 관리자(Asset Manager)툴박스(Toolbox)는 언리얼 **콘텐츠 브라우저(Content Browser)**와 겹칩니다. **자산 관리자(Asset Manager)**는 게임 내 모든 자산을 관리할 수 있게 해주며, **툴박스(Toolbox)**는 당신이 게시한 자산에 접근할 수 있게 해줍니다. **툴박스(Toolbox)**는 또한 Roblox 또는 커뮤니티의 자산에 대한 크리에이터 스토어(Creator Store)를 검색할 수 있게 하며, 이는 언리얼 엔진 마켓플레이스와 유사하지만 스튜디오 사용자 인터페이스에서 직접 접근할 수 있습니다.

철학적 차이

Roblox는 전통적인 게임 엔진이 아니라 "시뮬레이션 엔진"입니다. 언리얼의 Actors와 Roblox의 Parts는 모두 기본적인 빌딩 블록 역할을 하지만, 실제로는 두 가지가 상당히 다릅니다:

  • 표현: 언리얼의 Actors는 레벨 내의 모든 객체를 위한 상위 개념인 반면, Roblox의 Parts는 나무 블록과 플라스틱 구체와 같은 물리적 객체를 표현하기 위해 설계되었습니다.
  • 물리학: 언리얼에서 물리 시뮬레이션을 수행하려면 특정 구성 요소(예: StaticMeshComponent) 내에서 물리를 활성화하거나 Actors에 물리 제약 조건과 같은 구성 요소를 추가해야 합니다. Roblox에서는 물리학이 Parts 데이터 유형에 내장되어 있으며, 엔진이 자동으로 상호 작용을 처리합니다.

ActorPart를 생성하면 차이를 즉시 볼 수 있습니다. Actor는 위치, 회전 및 크기 이상의 정보를 거의 포함하지 않습니다. Part는 동일한 정보를 가지면서도 재질, 색상, 반사율 및 투명도, 질량과 모양 등 훨씬 더 많은 정보를 가집니다. 두 가지는 언리얼의 StaticMeshActor와 Roblox의 MeshPart를 비교할 때 유사한 속성을 공유하기 시작합니다.

세부사항 패널에 있는 예제 언리얼 액터.
언리얼 에디터 세부사항 패널
속성 창에 있는 예제 Roblox 파트.
Roblox 스튜디오 속성 창

유용한 비교는 언리얼의 Actor와 Roblox의 Model입니다. 모델은 언리얼의 Actors가 구성 요소의 컨테이너인 것과 같은 방식으로 상호 연결된 파트의 집합을 위한 컨테이너 역할을 합니다. 모델의 파트 중 하나를 주요 파트로 지정하여 피벗 포인트를 정의합니다. 모델은 또한 스크립트, 애니메이션, 음향 효과, 프롬프트, 제약 조건, 입자 방출기 등을 보유합니다.

예를 들어, 언리얼의 Actor는 원하는 시각 효과를 달성하기 위해 여러 방출기를 사용하는 NiagaraComponent, 모양을 위한 메시, 탄력성을 추가하기 위한 물리적 제약 조건, 플레이어 상호 작용을 위한 스크립트를 가질 수 있습니다. 아울라이너(Outliner)에서 이름이 SpringyFireball인 단일 Actor를 봅니다.

Roblox에서는 비슷한 SpringyFireball 모델이 탐색기(Explorer) 창에서 다음과 같은 모습일 수 있습니다:


모델
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Roblox의 기본적인 물리학 철학은 3D 모델 구축 과정으로까지 확장됩니다. Roblox에서는 여러 파트를 조립체로 용접하여 빠르게 구축하는 것이 훌륭한 방법입니다. 그 이유는 Roblox가 용접된 파트를 단일 강체로 취급하기 때문입니다. 언리얼에서는 이 접근 방식이 현실적이지 않습니다.

Roblox는 길이와 질량에 대해 표준 미터법 단위를 사용하는 대신 스터드(studs)와 Roblox 질량 단위(RMUs)라는 이론적 단위를 사용합니다. 대략적인 미터 변환 및 사용에 대한 권장 사항은 단위를 참조하십시오.

위치가 중요하다

Roblox 게임은 기본적으로 멀티플레이어형이므로 Roblox 스튜디오에는 특정 동작을 가진 여러 다른 저장 위치가 포함되어 있습니다. 자세한 내용은 클라이언트-서버 런타임객체 조직(object organization)을 참조하십시오.

LocationDescription
Workspace게임의 3D 세계를 나타냅니다. 이 위치는 객체에 직접 연결되어 그 동작을 제어하는 서버 스크립트에 적합합니다.
ReplicatedFirst클라이언트에 가장 먼저 복제되는 객체를 포함합니다. 이 위치는 로딩 화면을 표시하는 데 필요한 최소한의 객체와 클라이언트 스크립트에 이상적입니다.
ReplicatedStorage클라이언트와 서버 모두에 복제되는 객체를 포함합니다. 이 위치는 서버와 클라이언트 모두에서 사용하고자 하는 ModuleScripts에 적합합니다. LocalScripts는 이 위치에서 실행되지 않지만, RunContextClientScripts는 실행됩니다.
ServerScriptService서버 스크립트를 포함합니다. 이 위치는 게임 로직 및 클라우드 스토리지와 같은 서버 측 기능이나 객체에 접근해야 하는 스크립트에 적합합니다.
ServerStorage서버 측 객체를 포함합니다. 이 위치는 게임에 참여할 때 클라이언트에 즉시 복제될 필요가 없는 큰 객체에 적합합니다. 이 위치에서 스크립트는 실행되지 않지만, 서버 측 ModuleScripts를 여기에 저장할 수 있습니다.
StarterPlayerStarterCharacterScripts캐릭터가 생성될 때 실행되는 LocalScripts를 포함합니다.
StarterPlayerStarterPlayerScripts플레이어가 게임에 참여할 때 실행되는 일반적인 LocalScripts를 포함합니다.
StarterGui클라이언트가 게임을 로드할 때 표시하는 GUI 요소를 포함합니다. LocalScripts는 이 위치에서 실행될 수 있습니다. 이 위치는 버튼, 메뉴 및 팝업을 추가하는 등 게임의 사용자 인터페이스를 수정하는 스크립트에 적합합니다.
StarterPack일반적으로 Tools만 포함되지만, 플레이어 배낭을 설정하기 위한 LocalScripts도 포함할 수 있습니다.

스크립팅

Roblox 게임은 세 가지 유형의 Luau 스크립트를 지원합니다:

  • 클라이언트 스크립트

    이러한 스크립트는 클라이언트에서 실행되며, 서버는 그 동작을 볼 수 없습니다. 레거시 이유로 인해, 이러한 스크립트는 LocalScripts 또는 Scripts 형식을 취할 수 있으며, RunContext 값은 Client입니다. 클라이언트 스크립트는 일반적으로 ReplicatedStorage, StarterPlayerScripts 또는 StarterCharacterScripts에 위치합니다.

  • 서버 스크립트

    이러한 스크립트는 서버에서 실행되며, 클라이언트는 그 동작을 볼 수 없습니다. 서버 스크립트는 RunContext 값이 Server이며, 일반적으로 ServerScriptService에 위치하고, 그 내용은 클라이언트에 복제되지 않습니다.

  • 모듈 스크립트

    이러한 스크립트는 정확히 하나의 값을 반환하는 재사용 가능한 코드 조각으로, 일반적으로 함수 또는 테이블(또는 함수의 테이블)입니다. 클라이언트 및 서버 스크립트에 코드를 중복하는 대신, 모듈 스크립트를 사용하여 두 스크립트 간에 코드와 데이터를 공유하세요. 모듈 스크립트는 종종 ReplicatedStorage에 위치하지만, 클라이언트-서버 경계의 같은 쪽에 있는 스크립트 간에 코드를 공유하려면 다른 장소에 있을 수도 있습니다.

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

언리얼에서는 엔진의 많은 기능이 UObject, ACharacters, ULevel, 및 UWorld와 같은 내장 클래스를 C++ 또는 블루프린트를 통해 확장하여 사용할 수 있습니다. 언리얼은 사용자 정의 이벤트를 지원하지만, 많은 클래스에는 엔진이 레벨의 자연적 생명 주기의 일부로 자동으로 호출하는 이벤트가 포함되어 있습니다.

언리얼의 "틱(ticking)" 시스템과 비교하면, Roblox 스크립트는 훨씬 더 이벤트 기반입니다. 서비스에 가입하고 업데이트를 듣는 방식으로 유사한 엔진 기능에 접근합니다.

C++와 Luau

스크립팅을 위해 언리얼은 C++을 사용합니다. Roblox는 Luau를 사용하며, 이는 Lua 5.1에서 파생된 스크립팅 언어입니다.

Luau와 비교했을 때, C++은 전반적으로 성능 이점을 가지고 있으며, 이는 당신이 만들고자 하는 게임의 종류에 따라 관련이 있을 수도 있고 없을 수도 있습니다. Luau는 점진적으로 타입을 지정하며 구문이 덜 장황합니다. 그러나 대형 프로젝트에서는 점진적 타이핑이 C++와 같은 강타입 언어가 회피하는 버그 범위를 도입할 수 있으므로 Roblox 스크립트에서 엄격한 타입 검사를 활성화하는 것을 고려하십시오.

언리얼은 **블루프린트(BluePrints)**라는 비주얼 스크립팅 시스템도 포함하고 있습니다. 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가 여러 내장 가정을 가지고 있기 때문에 상대적으로 간결할 수 있습니다: 서버에 연결된 PlayerHumanoid 캐릭터는 Tools를 장착할 수 있습니다. 이러한 가정은 언리얼에는 존재하지 않으므로 구현이 매우 다를 것입니다.

자산

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

언리얼에서는 자산이 **콘텐츠 브라우저(Content Browser)**에 보이는 Content 디렉토리로 가져옵니다. Roblox에서는 자산이 Workspace로 가져오고 툴박스(Toolbox) 또는 자산 관리자(Asset Manager)로 가져옵니다.

Roblox는 가져오기 프로세스를 간소화하기 위해 Blender 도구의 언리얼로 전송(Send to Unreal) 기능과 유사한 오픈 소스 Blender 플러그인을 제공합니다.

변형

Unreal Engine의 변환과 Roblox의 CFrames는 물체의 3D 변환을 나타내는 데 유사한 목적을 가지고 있습니다:

  • 변환과 CFrames는 모두 3D 공간에서 물체의 위치와 회전을 나타냅니다. 변환은 스케일을 포함하지만, Roblox에서는 BasePart.Size 속성을 사용하며 이는 CFrame의 일부가 아닙니다.
  • 둘 다 복잡한 변환을 위한 곱셈을 지원하며, 다른 조작을 위한 내장 메서드를 가지고 있습니다.

협업

언리얼에서는 Perforce 또는 SVN과 같은 버전 관리 시스템을 통해 협업합니다. 일반적으로 언리얼의 내장 사용자 인터페이스를 통해 이루어집니다. 이러한 버전 관리 시스템은 한 사람이 작업하는 동안 파일을 잠그는 중앙 집중식 "체크아웃" 모델을 사용합니다.

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

플러그인

언리얼과 유사하게, Roblox 스튜디오는 다양한 개발 프로세스의 여러 측면을 단순화하거나 추가 제어를 가능하게 하는 플러그인을 지원합니다. 플러그인은 자산처럼 크리에이터 스토어(Creator Store)에서 사용할 수 있으며, 많은 플러그인이 무료로 제공됩니다.

용어집

언리얼Roblox비고
레벨장소(Place)
액터(Actor)Part 또는 Model철학적 차이를 참조하십시오.
블루프린트 클래스(Blueprint Class)패키지(Package)
변형(Transform)CFrameCFrame에는 크기 정보가 포함되어 있지 않습니다. 변형을 참조하십시오.
아울라이너(Outliner)탐색기(Explorer)
세부사항 패널속성(Parameters)
레벨 뷰포트3D 뷰포트(3D viewport)
콘텐츠 브라우저자산 관리자(Asset Manager) 또는 툴박스(Toolbox)
랜드스케이프 모드지형 편집기(Terrain Editor)
플레이어 시작(PlayerStart)SpawnLocation
출력 로그출력(Output)
마켓플레이스크리에이터 스토어(Creator Store)
메뉴 바툴바(Toolbar)
플러그인플러그인(Plugin)
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.