오버데어는 멀티플레이 게임의 제작부터 배포까지 한 번에 처리할 수 있는 강력한 게임 제작 플랫폼입니다. 클라이언트 기반의 유니티와 달리, 멀티플레이 환경을 기반으로 하기 때문에 유니티와는 다른 구조로 설계되어 있습니다.
이 문서는 유니티 개발자들이 오버데어 스튜디오에 빠르게 적응할 수 있도록 돕기 위해 작성된 문서입니다. 오버데어를 이용하여 멀티플레이 게임 제작의 새로운 가능성을 탐험해 보세요!
인터페이스
Unity
Overdare
Game
X
Scene
Viewport
Hierarchy
Level Browser
Inspector
Properties
Project
X
Console
Output Log
유니티와 달리 오버데어 스튜디오에서는 Game View과 Project 패널을 제공하지 않습니다. 대신 플레이를 실행하면 Viewport 패널이 플레이 화면으로 전환됩니다.
유니티에서는 스크립트와 머테리얼, 메쉬 같은 모든 에셋들이 Project 패널에서 관리되지만, 오버데어 스튜디오에서는 Script도 Level Browser에서 관리되며, Mesh나 Image, Audio와 같은 외부 에셋들은 Asset Manager를 통해 별도로 관리됩니다.
단축키
Unity
Overdare
기능
Q
Ctrl + 1
Hand Tool (Select)
W
Ctrl + 2
Move Tool
E
Ctrl + 3
Rotate Tool
R
Ctrl + 4
Scale Tool
Ctrl + P
F5
Play
Ctrl + P
Shift + F5
Stop
에셋 임포트
클라이언트 기반인 유니티에서는 드래그&드롭으로 외부 에셋을 간편하게 임포트할 수 있습니다. 반면, 오버데어 스튜디오는 크리에이터를 위한 플랫폼으로 외부 에셋을 사용할 때 서버 업로드 과정을 거치도록 설계되었습니다. 이를 통해 크리에이터는 에셋을 쉽게 공유하고 게임 제작에 활용할 수 있습니다.
외부 에셋을 임포트하려면 오버데어 스튜디오 상단 메뉴에서 Import 버튼을 클릭해야 합니다. 에셋을Import하면 서버로 업로드되고, 서버에서 처리가 완료되면 Asset Drawer에 표시됩니다.
오브젝트 구조 차이
유니티의 주요 기능은 컴포넌트 단위로 구성됩니다. 카메라, 콜라이더, 오디오 등 다양한 컴포넌트를 조합하여 오브젝트의 기능을 자유롭게 구성할 수 있습니다. 반면, 오버데어 스튜디오에서는 기능별로 오브젝트 타입이 고정되어 있습니다.
예를 들어, 유니티에서는 오브젝트에 물리 기능을 추가하려면 Rigidbody 컴포넌트를 추가해야 하지만, 오버데어 스튜디오에서는 물리 기능이 내장된 Part 오브젝트에서 Anchored 속성을 비활성화해야 합니다.
스크립트
오버데어는 게임 개발 언어로 루아 스크립트를 제공합니다. 루아는 경량화된 스크립트 언어로, 배우기 쉬운 간결한 문법과 빠른 실행 속도를 자랑하며 높은 유연성을 제공합니다. 이러한 특성 덕분에 루아는 C# 스크립트보다 접근성과 생산성이 뛰어나며, 초보 개발자부터 숙련된 개발자까지 누구나 쉽게 활용할 수 있습니다.
루아 스크립트는 동적 타입 언어로, 스크립트가 위에서부터 순차적으로 실행됩니다. 전방 참조가 지원되지 않으며, 참조하려는 함수나 변수가 먼저 정의되어 있어야 합니다. 이러한 특성은 Lua의 설계가 간결성과 런타임 성능을 중시하기 때문입니다.
PrintText("Hello, Lua Script!") -- 에러 발생 (전방 참조 불가)functionPrintText(message)print(message)endPrintText("Hello, Lua Script!") -- 동작 가능
다른 스크립트의 변수/함수 호출
변수나 함수를 전역(global)으로 선언하면 어디서든 접근할 수 있습니다. 단, 전역 변수는 어디서든 수정 가능하므로, 코드의 안정성이 떨어질 수 있습니다.
GlobalText ="Hello, World!" -- 전역 변수 선언-- 전역 함수 선언functionGlobalFunction()print("This is a global function!")end
print(GlobalText) -- 전역 변수 접근GlobalFunction() -- 전역 함수 호출
또는 모듈을 이용하여 테이블에 변수와 함수를 담아서 반환하는 방식으로 외부에서 사용할 수 있습니다. 이는 전역 변수를 사용하는 것보다 안전하고, 코드의 구조화를 돕습니다.
local SomeModule = {} -- 테이블 생성-- 모듈 변수SomeModule.Text ="Hello from module!"-- 모듈 함수function SomeModule:Function()print("This is a function inside a module!")endreturn SomeModule -- 테이블 반환
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SomeModule =require(ReplicatedStorage.SomeModule) -- 모듈 로드print(SomeModule.Text) -- 모듈 변수 접근SomeModule.Function() -- 모듈 함수 호출
오버데어는 멀티플레이 환경을 기반으로 설계되었기 때문에, 스크립트의 위치에 따라 용도와 실행 여부가 달라집니다. 예를 들어, 카메라나 GUI와 같은 클라이언트 전용 기능은 클라이언트에서만 동작하며, 게임 로직 처리나 오브젝트 이동 등 동기화가 필요한 기능은 서버에서 처리해야 합니다.
이러한 구조는 클라이언트와 서버 간 역할을 명확히 분리하여 효율적이고 안정적인 멀티플레이 동작을 보장합니다.
유니티에서 스크립트의 실행 순서는 Script Execution Order 설정을 통해 명시적으로 지정할 수 있습니다. 반면, 오버데어 스튜디오에서는 Script나 LocalScript 같은 스크립트의 종류와 Workspace, ServerScriptService 같은 스크립트의 실행 위치에 따라 실행 순서가 자동으로 결정됩니다.