유니티 개발자용 가이드
Last updated
Last updated
OVERDARE는 멀티플레이 게임의 제작부터 배포까지 한 번에 처리할 수 있는 강력한 게임 제작 플랫폼입니다. 클라이언트 기반의 유니티와 달리, 멀티플레이 환경을 기반으로 하기 때문에 유니티와는 다른 구조로 설계되어 있습니다.
이 문서는 유니티 개발자들이 OVERDARE Studio에 빠르게 적응할 수 있도록 돕기 위해 작성된 문서입니다. OVERDARE를 이용하여 멀티플레이 게임 제작의 새로운 가능성을 탐험해 보세요!
Game
X
Scene
Viewport
Hierarchy
Level Browser
Inspector
Properties
Project
X
Console
Output Log
유니티와 달리 OVERDARE Studio에서는 Game View과 Project 패널을 제공하지 않습니다. 대신 플레이를 실행하면 Viewport 패널이 플레이 화면으로 전환됩니다.
유니티에서는 Script와 머테리얼, 메쉬 같은 모든 에셋들이 Project 패널에서 관리되지만, OVERDARE Studio에서는 Script도 Level Browser에서 관리되며, Mesh나 Image, Audio와 같은 외부에서 임포트한 에셋들은 Asset Manager를 통해 별도로 관리됩니다.
Q
Ctrl + 1
Select Tool
W
Ctrl + 2
Move Tool
E
Ctrl + 3
Rotate Tool
R
Ctrl + 4
Scale Tool
Ctrl + P
F5
Play
Ctrl + P
Shift + F5
Stop
유니티와 OVERDARE는 X축과 Y축의 방향이 같다는 점에서 좌표계 구조가 유사하지만, Z축의 방향에 차이가 있습니다. 유니티에서는 정면 방향이 +Z인 반면, OVERDARE에서는 정면이 -Z 방향입니다. 이 차이는 캐릭터나 카메라의 Forward 방향을 설정하거나, 이동 및 회전을 계산할 때 기준 축이 반대가 된다는 점에서 중요한 차이를 만듭니다.
클라이언트 기반인 유니티에서는 드래그&드롭으로 외부 에셋을 간편하게 임포트할 수 있습니다. 반면, OVERDARE Studio는 크리에이터를 위한 플랫폼으로 외부 에셋을 사용할 때 서버 업로드 과정을 거치도록 설계되었습니다. 이를 통해 크리에이터는 에셋을 쉽게 공유하고 게임 제작에 활용할 수 있습니다.
외부 에셋을 임포트하려면 OVERDARE Studio 상단 메뉴에서 Import 버튼을 클릭해야 합니다. 에셋을 Import하면 서버로 업로드되고, 서버에서 처리가 완료되면 Asset Drawer에 표시됩니다.
유니티에서는 런타임에서 Resources.Load를 사용해 리소스를 불러올 수 있으며, 이는 Project 패널 내 Resources 폴더에 있는 에셋을 경로 기반으로 로드하는 방식입니다. 예를 들어, Resources.Load로 텍스처 에셋을 불러온 뒤 머티리얼에 적용하는 식으로 사용됩니다.
반면, OVERDARE에서는 각 에셋에 할당된 고유한 AssetId를 통해 외부 에셋을 참조하며, 메시에 텍스처 자체를 할당하는 것이 아니라 해당 텍스처의 AssetId를 설정하는 방식으로 동작합니다. 이는 에디터 기반 내부 자원 관리에 중점을 둔 유니티와, 네트워크 기반 외부 자원 참조 구조를 중심으로 하는 OVERDARE 간의 근본적인 시스템 차이에서 비롯됩니다.
자세히 알아보기
유니티의 주요 기능은 컴포넌트 단위로 구성되므로, 카메라, 콜라이더, 오디오 등 다양한 컴포넌트를 조합하여 오브젝트의 기능을 자유롭게 구성할 수 있습니다. 반면, OVERDARE Studio에서는 기능별로 오브젝트 타입이 고정되어 있습니다.
예를 들어, 유니티에서는 오브젝트에 물리 기능을 추가하려면 Rigidbody 컴포넌트를 추가해야 하지만, OVERDARE Studio에서는 물리 기능이 내장된 Part 오브젝트에서 Anchored 속성을 비활성화해야 합니다.
유니티에서는 Transform 컴포넌트를 통해 Position, Rotation, Scale 속성을 직접 제어하며, 로컬 및 월드 좌표계를 명확히 구분하여 사용할 수 있습니다.
반면 OVERDARE에서는 Position과 Orientation도 제공되지만, 일반적으로 CFrame을 통해 위치와 회전을 함께 다루며, 스케일은 별도로 Size 속성에서 관리됩니다. 특히 OVERDARE는 기본적으로 모든 위치와 회전 연산이 월드 좌표 기준으로 수행되며, 로컬 좌표 변환이 필요한 경우는 직접 계산해야 합니다.
이처럼 유니티는 구성 요소별 속성이 명확히 분리되어 있고, OVERDARE는 위치와 회전을 하나의 CFrame으로 묶어 처리한다는 점에서 구조적인 차이를 보입니다.
자세히 알아보기
유니티에서는 물리 기반 충돌 처리를 위해 Collider 컴포넌트를 사용하며, BoxCollider, SphereCollider, MeshCollider 등 다양한 형태의 콜라이더를 선택할 수 있습니다. 충돌 처리를 위해서는 오브젝트에 Collider와 함께 Rigidbody가 필요하며, isTrigger 옵션을 이용하여 트리거 처리도 가능합니다. 충돌 이벤트는 OnCollisionEnter, OnTriggerEnter 등으로 감지하며, 충돌 그룹이나 레이어 마스크를 통한 세밀한 충돌 필터링도 가능합니다.
반면, OVERDARE에서는 모든 Part는 기본적으로 충돌 기능이 내장되어 있으며, CanCollide 속성을 통해 충돌 여부를 제어합니다. OnCollisionEnter이나 OnTriggerEnter 같은 충돌 이벤트는 모두 Touched 이벤트로 처리되며, CanCollide가 비활성화 상태이면 유니티의 트리거 이벤트처럼 동작합니다. OVERDARE에서도 충돌 그룹을 사용하여 충돌 필터링을 설정할 수 있습니다.
자세히 알아보기
유니티에서는 Rigidbody 컴포넌트를 오브젝트에 추가함으로써 해당 오브젝트가 물리 엔진의 영향을 받도록 설정할 수 있습니다. Rigidbody의 velocity, angularVelocity, AddForce, AddTorque 등을 통해 힘 기반의 정밀한 제어가 가능합니다.
OVERDARE에서는 모든 Part가 기본적으로 물리 속성을 내장하고 있습니다. Anchored 속성을 비활성화한 오브젝트는 중력, 충돌, 마찰 등 물리 영향을 받으며, 물리 기반의 동작 제어는 LinearVelocity, AngularVelocity, VectorForce 등과 같은 전용 물리 객체를 통해 구현됩니다.
유니티에서는 Camera 컴포넌트를 씬 내에 자유롭게 배치하고, 씬 카메라 또는 UI 카메라 등 다양한 용도로 복수의 카메라를 구성할 수 있습니다. 특히 여러 개의 카메라를 미리 배치해두고 SetActive를 통해 활성화된 카메라를 전환하는 방식으로 시점을 변경할 수 있습니다.
반면 OVERDARE에서는 Workspace.CurrentCamera를 통해 현재 활성화된 단일 카메라를 제어하며, 시스템적으로 하나의 카메라만 존재하고 항상 활성 상태로 유지됩니다. 카메라는 기본적으로 플레이어의 Humanoid를 따라가지만, CameraType 속성을 Scriptable로 변경하면 직접 위치나 회전을 제어할 수 있습니다. 이때 유니티처럼 여러 카메라를 전환하는 구조가 아닌, CurrentCamera의 CFrame, FieldOfView 등의 속성을 직접 변경하는 방식으로 시점을 변경합니다.
유니티에서는 ParticleSystem 컴포넌트를 오브젝트에 추가하여 다양한 이펙트를 구성할 수 있으며, ParticleSystem 컴포넌트 안에서 Emission, Shape, Velocity, Lifetime 등 여러 모듈을 조합해 복잡한 이펙트를 만들 수 있습니다.
반면 OVERDARE에서는 ParticleEmitter, Beam, Trail 등 이펙트 객체를 Part에 부착해서 사용하며, 각 이펙트 타입은 별도의 객체로 구분되어 있고 설정 가능한 속성도 제한적입니다. 예를 들어 ParticleEmitter는 속도, 방향, 색상, 생존 시간 등 일부 속성만 설정할 수 있으며, 유니티처럼 다중 모듈을 조합하는 방식은 지원되지 않습니다. 또한 파티클은 별도의 위치 설정 없이 파티클이 부착된 Part를 기준으로 방출됩니다.
자세히 알아보기
유니티에서는 UI 시스템의 루트로 Canvas 컴포넌트를 사용하며, 모든 UI 요소는 이 Canvas 하위에 배치되어 렌더링됩니다. UI는 일반적으로 RectTransform을 사용하여 배치되며, 앵커와 피벗, 패널 계층 구조를 통해 복잡한 반응형 UI도 설계할 수 있습니다.
반면 OVERDARE에서 모든 UI 요소는 ScreenGui, SurfaceGui 등으로 구성됩니다. ScreenGui는 HUD나 메뉴처럼 화면에 고정된 UI를 구현하며, UI 요소는 픽셀 값과 비율(스케일)로 구성된 UDim2 값을 통해 배치됩니다.
자세히 알아보기
유니티에서는 UI 요소의 위치, 크기, 정렬 등을 제어하기 위해 RectTransform 컴포넌트를 사용합니다. RectTransform은 일반 Transform과 달리 2D UI 전용으로 설계된 컴포넌트이며, 앵커(Anchor), 피벗(Pivot), 오프셋(Offset) 등을 통해 부모 기준 상대적 배치와 자동 정렬이 가능합니다. 특히 캔버스 내에서 반응형 UI를 구성할 때 중심 역할을 하며, 화면 해상도나 부모 크기에 따라 유동적으로 위치와 크기를 조정할 수 있습니다.
반면, OVERDARE에서는 UI 요소를 제어할 때 Position, Size, AnchorPoint 속성을 사용합니다. 여기서 Position, Size에 사용되는 UDim2 타입은 픽셀 값과 비율(스케일)을 혼합하여 정의할 수 있어, 유니티의 Anchored Position과 Stretch 속성 등을 부분적으로 대체합니다.
자세히 알아보기
유니티에서는 몬스터, UI 슬롯과 같이 반복적으로 사용하는 오브젝트를 프리팹으로 설정하여 효율적으로 관리하고 재사용할 수 있습니다. 프리팹은 에디터에서 구성한 오브젝트를 Project 패널에 리소스 형태로 저장하며, 런타임 중 필요한 시점에 Instantiate()로 동적 생성할 수 있습니다. 프리팹 시스템은 재사용성과 유지보수 효율에 중점을 두고 있으며, 원본 프리팹을 수정하면 해당 프리팹을 참조하는 모든 인스턴스에 일괄 반영되어 일관성을 유지할 수 있습니다.
반면, OVERDARE에서는 유니티의 Project와 같은 패널이 별도로 존재하지 않으며, 모든 오브젝트는 LevelBrowser(Hierarchy)를 통해 관리됩니다. 이에 따라 동적으로 생성할 오브젝트는 ServerStorage에 미리 배치해두고, 필요 시 Clone()로 생성하여 Workspace 등으로 옮기는 방식으로 활용됩니다. 이 방식은 런타임 객체 복제 및 보안에 초점을 맞추며, ServerStorage 내 오브젝트는 서버에서만 접근 가능하고 클라이언트에는 노출되지 않기 때문에 안전하게 보관할 수 있습니다.
유니티에서는 Animation 패널을 통해 카메라, 캐릭터, UI 등 모든 게임 오브젝트에 대한 애니메이션을 제작할 수 있습니다. 제작된 애니메이션은 Animator 패널에서 상태 머신(State Machine) 기반으로 구성하여, 트랜지션 조건이나 파라미터를 활용한 시각적 제어가 가능합니다.
반면, OVERDARE에서는 Animation Editor를 통해 캐릭터 애니메이션만 제작 가능하며, UI나 기타 오브젝트에 대한 에디터 기반 애니메이션 제작은 아직 지원되지 않습니다. 또한, Animator 상태 머신이 존재하지 않으며, 모든 애니메이션 재생과 제어는 스크립트를 통해 직접 구현해야 합니다. 예를 들어, 캐릭터의 이동, 공격, 감정 표현 등은 코드 기반으로 애니메이션을 수동 재생하거나 상태 관리를 로직으로 처리해야 합니다.
자세히 알아보기
OVERDARE Studio는 게임 개발 언어로 루아 스크립트를 제공합니다. 루아는 경량화된 스크립트 언어로, 배우기 쉬운 간결한 문법과 빠른 실행 속도를 자랑하며 높은 유연성을 제공합니다. 이러한 특성 덕분에 루아는 C# 스크립트보다 접근성과 생산성이 뛰어나며, 초보 개발자부터 숙련된 개발자까지 누구나 쉽게 활용할 수 있습니다.
자료형 명시
O
X
한정자 종류
private, public, static 등
local, global
객체 지향(OOP)
클래스, 인터페이스, 상속, 다형성 등을 통해 객체 지향 프로그래밍 지원
객체 지향을 직접적으로 지원하지 않으며, Metatable로 유사 객체 구현
코드 구조
Class 기반 구조로 모든 코드가 클래스 안에 작성되며, 메서드와 속성을 활용
단순한 함수 기반 구조로 클래스가 없으며, Table을 통해 데이터와 함수를 구조화
함수
함수는 클래스의 멤버
함수를 변수처럼 사용 가능 (First-class function)
Collection
List, Dictionary 등
Table
switch문 유무
O
X
주석
//
--
여러줄 주석
/*와 */
--[[와 ]]--
세미콜론
필수
생략
자세히 알아보기
루아 스크립트는 동적 타입 언어로, 스크립트가 위에서부터 순차적으로 실행됩니다. 전방 참조가 지원되지 않으며, 참조하려는 함수나 변수가 먼저 정의되어 있어야 합니다. 이러한 특성은 Lua의 설계가 간결성과 런타임 성능을 중시하기 때문입니다.
변수나 함수를 global으로 선언하면 어디서든 접근할 수 있습니다. 단, global 변수는 어디서든 수정 가능하므로, 코드의 안정성이 떨어질 수 있습니다.
모듈 스크립트를 이용하여 테이블에 변수와 함수를 담아서 반환하는 방식으로 외부에서 사용할 수 있습니다. 이는 전역 변수를 사용하는 것보다 안전하고, 코드의 구조화를 돕습니다.
또는 BindableEvent를 사용하여 서버와 서버, 클라이언트와 클라이언트처럼 같은 환경에 있는 스크립트끼리 통신을 처리할 수 있습니다.
자세히 알아보기
OVERDARE는 멀티플레이 환경을 기반으로 설계되었기 때문에, 스크립트의 위치에 따라 용도와 실행 여부가 달라집니다. 예를 들어, 카메라나 GUI와 같은 클라이언트 전용 기능은 클라이언트에서만 동작하며, 게임 로직 처리나 오브젝트 이동 등 동기화가 필요한 기능은 서버에서 처리해야 합니다. 이러한 구조는 클라이언트와 서버 간 역할을 명확히 분리하여 효율적이고 안정적인 멀티플레이 동작을 보장합니다.
유니티에서 스크립트의 실행 순서는 Script Execution Order 설정을 통해 명시적으로 지정할 수 있습니다. 반면, OVERDARE Studio에서는 Script나 LocalScript 같은 스크립트의 종류와 Workspace, ServerScriptService 같은 스크립트의 실행 위치에 따라 실행 순서가 자동으로 결정됩니다.
자세히 알아보기
OVERDARE는 멀티플레이 게임 기반으로 설계되어 서버에서 실행되는 Script와 클라이언트에서 실행되는 LocalScript를 조합하여 게임이 구현됩니다. 서버와 클라이언트 간의 통신은 RemoteEvent를 사용하여 처리할 수 있습니다.
자세히 알아보기
OVERDARE Studio에서 제공하는 스크립트 기능을 확인하려면 아래 문서를 참고하세요.