# 脚本编程简介

> 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 来自定义和扩展编辑器工具，从而优化开发工作流。您还可以使用引擎 API 来定义应用程序的运行时功能，包括图形渲染、物理模拟、角色行为以及对用户输入的响应。

[脚本 API 参考](ScriptRef:index)提供了所有公共 Unity API 的完整且权威的文档。该手册则提供了额外的上下文和使用指导。

## Unity 脚本环境##the-unity-scripting-environment

Unity 支持使用 C# 编程语言进行脚本开发。C#（发音为“C-sharp”）是一种托管的面向对象编程语言，属于 .NET 平台的一部分，并在跨平台的 .NET 运行时中运行。除此之外，其他能够编译为兼容 DLL 的 .NET 语言也可以用于 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)的模板脚本。

您可以配置默认的[外部脚本编辑器](/engine/6000.0/manual/unity-editor/editor-features/preferences.md#extrnal-tools)，这是 Unity 打开脚本资源进行编辑的程序。通常，这将是 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)
