> For the complete documentation index, see [llms.txt](https://docs.overdare.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.overdare.com/korean/manual/script-manual/get-started/script-overview.md).

# 스크립트 개요

## 개요

OVERDARE Studio는 창의적인 게임 개발을 지원하기 위해 **Luau 스크립트 언어**를 제공합니다. 크리에이터는 Luau 스크립트를 활용하여, 특정 오브젝트에 닿은 캐릭터를 죽이거나, 카운트다운 후 게임을 시작하는 등 게임의 다양한 메커니즘을 자유롭게 구현할 수 있습니다.

## 스크립트 종류

OVERDARE Studio는 세가지 종류의 스크립트를 제공하며, 각 스크립트는 고유한 용도로 사용됩니다.

<table><thead><tr><th width="158">Script</th><th width="290">용도</th><th>예시</th></tr></thead><tbody><tr><td>Script</td><td><strong>서버</strong>에서 실행할 기능을 구현</td><td>게임 로직 처리</td></tr><tr><td>LocalScript</td><td><strong>클라이언트</strong>에서 실행할 기능을 구현</td><td>카메라 처리, Gui 처리</td></tr><tr><td>ModuleScript</td><td><strong>공통된 기능</strong>들을 분리하여 재사용 가능하게 구조화하기 위한 스크립트</td><td>몬스터 클래스 구현</td></tr></tbody></table>

## 스크립트 위치

스크립트는 **Level Browser**에서 Workspace나 ReplicatedStorage 같은 다양한 위치에 생성할 수 있으며, 스크립트의 종류와 배치된 위치에 따라 용도와 실행 가능 여부가 달라집니다.

<div align="left"><figure><img src="/files/6IHQhrJoIYIwAiiv1bfU" alt=""><figcaption></figcaption></figure></div>

스크립트의 기능을 효율적으로 관리하기 위해, 각 위치는 다음과 같은 목적으로 사용됩니다.

<table><thead><tr><th width="227">Service 위치</th><th width="309">용도</th><th>실행 가능한 스크립트</th></tr></thead><tbody><tr><td>ReplicatedStorage</td><td><strong>서버와 클라이언트</strong>에 복제되는 오브젝트를 위한 공간<br>(예시 : ModuleScript)</td><td>ModuleScript</td></tr><tr><td>ServerScriptService</td><td><strong>서버</strong>와 관련된 기능을 위한 공간<br>(예시 : ServerGameLogic)</td><td>Script<br>ModuleScript</td></tr><tr><td>ServerStorage</td><td>즉시 복제할 필요가 없는 <strong>서버 오브젝트</strong>를 위한 공간<br>(예시 : GunBullet)</td><td><p>Script</p><p>ModuleScript</p></td></tr><tr><td>StarterGui</td><td><strong>클라이언트</strong>에서 Gui를 제어하기 위한 공간<br>(예시 : PlayerHUD)</td><td>LocalScript<br>ModuleScript</td></tr><tr><td><p>StarterPlayer.</p><p>StarterCharacterScripts</p></td><td>캐릭터가 스폰될 때 <strong>클라이언트</strong>에서 실행할 스크립트를 위한 공간<br>(예시 : FirstPersonView)</td><td>LocalScript<br>ModuleScript</td></tr><tr><td><p>StarterPlayer.</p><p>StarterPlayerScripts</p></td><td>플레이어가 입장할 때 <strong>클라이언트</strong>에서 실행할 스크립트를 위한 공간<br>(예시 : InputHandler)</td><td>LocalScript<br>ModuleScript</td></tr><tr><td>Workspace</td><td>월드에 배치할 오브젝트를 위한 공간<br>(예시 : CheckPoint)</td><td>Script<br>ModuleScript</td></tr></tbody></table>

## 실행 순서

### Script (서버)

플레이어의 입장으로 월드가 생성되면, 서버는 **ServerScriptService**와 **Workspace**에 배치된 Script를 로드하고 실행합니다.

* **실행 순서** : ServerScriptService ➡ Workspace
  * 이 순서는 서버 스크립트가 먼저 초기화되며, 월드에 대한 전역적인 설정이나 오브젝트 관리 작업을 우선 처리하기 위한 구조입니다.

### LocalScript (클라이언트)

클라이언트가 월드에 접속하면, 클라이언트는 **StarterGui**, **StarterPlayerScripts**, **StarterCharacterScripts**에 배치된 LocalScript를 클라이언트로 복사하여 로드한 뒤 실행합니다.

* **실행 순서** : StarterGui ➡ StarterPlayerScripts ➡ StarterCharacterScripts
  * 이 순서는 UI와 플레이어 관련 설정 및 로직을 초기화하며, 클라이언트가 게임과 상호작용할 수 있는 준비를 완료합니다.

### ModuleScript (서버 또는 클라이언트)

ModuleScript는 서버와 클라이언트 모두에서 호출 가능하며, **Script** 또는 **LocalScript**에서 공통 기능이나 재사용 가능한 코드를 정의하는 데 활용됩니다.

모듈은 명시적으로 호출(`require`)될 때 실행되며, 첫 호출 시 초기화된 결과가 **캐싱**되므로 이후 호출 시에는 동일한 값을 반환합니다. 이를 통해 실행 효율을 높이고, 일관성을 유지할 수 있습니다.

* **실행 순서 (서버)** : 호출된 위치(예 : Workspace, ServerStorage 등) ➡ 모듈 스크립트 위치
  * Script가 게임의 전역 로직이나 서버 데이터를 처리하는 ModuleScript를 호출할 수 있습니다.
* **실행 순서 (클라이언트)**: 호출된 위치(예 : StarterPlayerScripts 등) ➡ 모듈 스크립트 위치
  * LocalScript가 UI나 플레이어 관련 기능를 처리하는 ModuleScript를 호출할 수 있습니다.

**💡 Tip.** ModuleScript는 ReplicatedStorage에 배치될 경우, 서버와 클라이언트 모두에서 호출할 수 있어 공통 로직을 구현하는 데 유용합니다.

## 참고 자료

OVERDARE Studio에서 제공하는 스크립트 기능은 **API Reference**에 모두 정리되어 있습니다. 스크립트를 작성하다 보면 속성이나 함수, 이벤트의 사용법이나 기능이 헷갈릴 때가 있는데, 이럴 때 **API Reference**를 활용하면 필요한 정보를 쉽게 확인할 수 있습니다.

예를 들어 스크립트에서 `PlayerAdded` 이벤트를 사용할 때, 이 이벤트가 어떤 역할을 하고 어떻게 동작하는지 궁금하다면 API Reference를 확인해보세요. API Reference는 각 기능의 설명과 사용법, 그리고 관련 예제까지 포함하고 있어 스크립트 작성 및 디버깅 과정에서 매우 유용한 도구가 됩니다.

API Reference를 활용하면 **코드를 더 정확하고 효율적으로 작성**할 수 있을 뿐만 아니라, 스크립트 기능에 대한 깊이 있는 이해도 가능합니다.

{% content-ref url="/pages/FfcNnL4WhTDAwbSDSabW" %}
[API Reference](/korean/development/api-reference.md)
{% endcontent-ref %}
