# 스크립팅 소개

> Understand the role of scripting in your project and how it works at a high level.

Unity는 디자인에 따라 커스터마이즈하고 확장할 수 있으며, 거의 모든 것을 어느 정도 스크립팅할 수 있습니다. 다양한 [에디터 뷰](/engine/6000.0/manual/unity-editor/using-the-editor.md)를 통해 설정할 수 있는 많은 항목에는 코드로 상호 작용할 수 있는 해당 공용 C# 클래스 표현이 있습니다.

에디터 API를 사용하여 에디터 저작(authoring) 툴을 커스터마이즈하고 확장하여 개발 워크플로를 개선할 수 있습니다. 엔진 API를 사용하여 그래픽스, 물리, 캐릭터 동작, 사용자 입력에 대한 응답 등 애플리케이션의 런타임 기능을 정의할 수 있습니다.

[스크립팅 API 레퍼런스](ScriptRef:index)는 모든 공개 Unity API에 대한 완전하고 믿을 만한 레퍼런스를 제공합니다. 매뉴얼에서는 추가적인 컨텍스트와 지침을 제공합니다.

## Unity 스크립팅 환경##the-unity-scripting-environment

Unity는 C# 프로그래밍 언어의 스크립팅을 지원합니다. C#은 관리되는 객체 지향 프로그래밍 언어로 .NET 플랫폼의 일부이며 크로스 플랫폼 .NET 런타임에서 실행됩니다. 다른 .NET 언어는 호환 가능한 DLL을 컴파일할 수 있는 경우 Unity와 함께 사용할 수 있습니다. 자세한 내용은 [관리되는 플러그인](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md)을 참조하십시오.

스크립팅 환경은 다음을 모두 참조합니다.

* 코드를 작성하는 자체 로컬 환경 또는 컨텍스트. 여기에는 코드 에디터(IDE)와 통합 소스 컨트롤 솔루션 및 운영 체제가 포함됩니다.
* Unity가 제공하는 C# 스크립팅 환경. 특정 버전의 Unity는 특정 버전의 .NET 플랫폼을 지원하며, 이에 따라 코드에서 사용할 수 있는 .NET 라이브러리가 결정됩니다.

스크립팅 환경 및 툴에 대한 자세한 내용은 [환경 및 툴](/engine/6000.0/manual/scripting/environment-and-tools.md)을 참조하십시오.

## Unity의 스크립팅 작동 방식##how-scripting-in-unity-works

C# 스크립트(확장자가 `.cs`인 파일)는 프로젝트의 [에셋](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow.md)이며, `Assets` 폴더에 저장되고 [에셋 데이터베이스](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-database.md)의 일부로 저장됩니다. **Assets > Create** 메뉴의 **Scripting** 하위 메뉴를 통해 일반적인 [빌트인 Unity 유형](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types.md)에서 파생된 템플릿 스크립트를 생성할 수 있습니다.

편집을 위해 Unity가 스크립트 에셋을 여는 기본 [외부 스크립트 편집기](/engine/6000.0/manual/unity-editor/editor-features/preferences.md#extrnal-tools)를 설정합니다. 일반적으로 이는 Unity 개발을 위해 [지원되는 IDE](/engine/6000.0/manual/scripting/environment-and-tools/ide-support.md) 중 하나입니다.

작성하는 코드가 활성화된 [.NET 프로파일](/engine/6000.0/manual/scripting/environment-and-tools/overview-of-dot-net-in-unity/dotnet-profile-support.md)과 호환되는 한 게임에 사용할 일반적인 C# 유형과 로직을 직접 생성할 수 있습니다. 하지만 스크립팅된 유형이 빌트인 Unity 유형에서 상속받으면 Unity에서 추가 기능을 사용할 수 있게 됩니다.

커스텀 유형이 [UnityEngine.Object](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-object.md)에서 상속받는 경우 인스펙터 창의 필드에 할당할 수 있습니다. [MonoBehaviour](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-mono-behaviour.md)에서 상속받으면 게임 오브젝트에 스크립트를 컴포넌트로 연결하여 씬에서 게임 오브젝트의 동작을 제어할 수 있습니다.

상속받을 수 있는 기본 Unity 유형에 대한 자세한 내용은 [기본 Unity 유형](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types.md)을 참조하십시오.

인스펙터에서 스크립트 보기 및 스크립트 컴포넌트 편집에 대한 자세한 내용은 [스크립트 점검](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md)을 참조하십시오.

## 컴파일 및 코드 리로드##editor-and-runtime-scripts

[컴파일](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation.md)은 작성한 C# 코드를 특정 타겟 플랫폼에서 실행되는 코드로 변환하는 것입니다. 컴파일의 일부 측면은 사용자가 제어할 수 있고, 일부는 제어할 수 없습니다. [스크립트를 어셈블리로 구성](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md)하면 불필요한 리컴파일을 줄이고 종속성을 효과적으로 관리할 수 있습니다. [조건부 컴파일](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation.md)을 사용하면 컴파일에서 코드의 일부를 선택적으로 포함하거나 제외할 수 있습니다.

설정에 따라 Unity는 다양한 컨텍스트에서 [코드를 다시 컴파일하고 다시 로드](/engine/6000.0/manual/scripting/compilation-and-code-reload.md)합니다. 코드를 다시 로드하는 것은 편집 모드와 플레이 모드 간 전환 시 변경 사항이 적용되거나 상태를 유지하는 데 중요하지만 성능과 반복 시간에도 영향을 미칩니다. 따라서 이러한 비용과 이를 완화하기 위해 Unity의 코드 리로드 동작을 설정하는 방법을 이해하는 것이 중요합니다.

## 추가 리소스##compilation-and-code-reload

* [스크립트 생성](/engine/6000.0/manual/scripting/get-started/creating-scripts.md)
* [스크립트 이름 지정](/engine/6000.0/manual/scripting/get-started/naming-scripts.md)
* [인스펙터 창의 스크립트](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md)
* [기본 Unity 유형](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types.md)
