# 检查脚本

> View and edit the fields of your C# scripts in the Inspector window.

在项目 (Project) 窗口中选择脚本资源时，检视面板 (Inspector) 会显示有关该脚本资源的一些基本信息，包括其所属的[程序集](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/script-compile-order-folders.md)的名称以及内容预览。

\*\*注意：\*\*虽然检视面板显示脚本的内容，但无法在检视面板窗口中直接编辑脚本内容。


**脚本检视面板显示示例脚本。:**
![](/api/media?file=/engine/6000.0/media/images/ScriptInspector.png)

脚本检视面板还显示两个按钮：**打开 (Open)** 和**执行顺序 (Execution Order)**。

**打开 (Open)** 按钮的功能与在项目窗口中双击脚本相同，会在当前配置的外部脚本编辑器中打开脚本。您可以在[偏好设置 (Preferences) 窗口的外部工具 (External Tools) 部分](/engine/6000.0/manual/unity-editor/editor-features/preferences.md#external-tools)中配置 Unity 使用哪个外部编辑器打开脚本。

**执行顺序**按钮将打开项目设置 (Project Settings) 窗口的[脚本执行顺序 (Script Execution Order) 部分](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-mono-manager.md)，您可以在其中配置 Unity 执行脚本的顺序。

## 检视面板窗口中的脚本组件##script-components-in-the-inspector-window

任何 [MonoBehaviour](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-mono-behaviour.md) 脚本都可以用作[组件](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/unity-components/components.md)，这意味着：

* 您可以将脚本附加到[游戏对象](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/game-objects.md)。
* 您可以在[检视面板窗口](/engine/6000.0/manual/unity-editor/using-the-editor/using-the-inspector.md)中编辑脚本的属性和值。

以下示例代码声明了一个名为 `myName` 的公共字段。将此脚本添加到场景中的游戏对象时，该字段将在**检视面板**窗口中显示为标记为 **My Name** 的字段。脚本中声明的默认 `none` 值将成为**检视面板**窗口中的默认值，您可以通过在字段中输入来更改该值。

```
using UnityEngine;
using System.Collections;

public class MainPlayer : MonoBehaviour 
{
	public string myName = "none";
	
	// Use this for initialization
	void Start () 
	{
		Debug.Log("I am alive and my name is " + myName);
	}
}
```

每个附加了脚本组件的游戏对象都可以拥有自己独特的字段值。


**可在检视面板窗口中编辑的公共字符串字段。:**
![](/api/media?file=/engine/6000.0/media/images/EditingVarInspector.png)

字段名称会根据[字段名称到标签转换](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md#field-name-label-conversion)中所描述的规则转换为**检视面板**窗口标签。但是，这些更改纯粹用于显示目的。您在代码中应始终使用字段名称。

在**检视面板**窗口中，如果编辑 **My Name** 的值并点击播放 (Play)，控制台消息将包含您输入的文本。


**Frame:**
![](/api/media?file=/engine/6000.0/media/images/DebugLogMessage.png)

## 公共和私有字段##public-and-private-fields

默认情况下，所有 `public` 字段均可在**检视面板**窗口中编辑。如果您不希望公共变量在**检视面板**中显示，可以为其添加 [HideInInspector](/engine/6000.0/script-reference/unity-engine/hide-in-inspector.md) 属性。如果您希望 `private` 字段在**检视面板**窗口中可编辑，可以为其添加 [SerializeField](/engine/6000.0/script-reference/unity-engine/serialize-field.md) 属性。

**注意**：在[播放模式](/engine/6000.0/manual/scripting/compilation-and-code-reload/code-reloading-editor/configurable-enter-play-mode.md)下，您可以在编辑器中更改脚本字段的值。这样可以直接查看更改的效果，而无需停止和重新启动。但退出播放模式时，字段值将恢复为进入播放模式之前的值。

## 对象引用字段##object-reference-fields

除了简单的[内置 C# 类型](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types#built-in-value-types)（例如 `bool`、`string` 和 `int`）之外，任何继承自 [`UnityEngine.Object`](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-object.md) 的任何字段的字段类型都可以在**检视面板**中编辑。这包括所有内置组件类型（例如 [Transform](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/gameobject-fundamentals/class-transform.md)、[AudioSource](/engine/6000.0/manual/audio/reference/class-audio-source.md)、[Camera](/engine/6000.0/manual/working-in-unity/cameras/birp/class-camera.md)、[Light](/engine/6000.0/manual/lighting-overview/lighting-birp/class-light.md)）、您自己的 MonoBehaviour 脚本类型以及许多资源类型。

这使得您可以在脚本组件中使用 Unity 编辑器的拖放功能。例如，如果在脚本中创建一个公共 `Transform` 字段并将其附加到游戏对象，您可以在**检视面板**窗口中将另一个游戏对象拖入该字段，从而为该字段设置一个对目标游戏对象的变换组件的引用，并在运行时访问该引用。

例如，此 `Follow` 脚本使一个游戏对象跟随另一个游戏对象：

```
using UnityEngine;

public class Follow : MonoBehaviour
{
    public Transform objectToFollow;
    public float followSpeed = 1;

    void Update()
    {
		// calculate the distance between this object and the target object
		// and move a small portion of that distance each frame:

        var delta = objectToFollow.position - transform.position;
        transform.position += delta * Time.deltaTime * followSpeed;
    }
}
```

脚本包含一个 `Transform` 类型的公共字段，该字段在编辑器中显示为可分配字段。您可以将不同的游戏对象从层级视图 (Hierarchy) 窗口中将另一个游戏对象拖入该字段，编辑器会自动为该字段分配目标游戏对象的变换组件引用。

在下面的截屏中，脚本放置在球体游戏对象上，并且已将立方体从层级视图拖放到 **Object To Follow** 字段中。


**已分配游戏对象的公共变换字段。此处的脚本位于球体上（当前已选中），立方体已从层级视图拖放到球体的 Object To Follow 字段中:**
![](/api/media?file=/engine/6000.0/media/images/UnityObjectInspectorField.png)

## 默认对象引用##default-object-references

如果在 MonoBehaviour 脚本中定义了可[在编辑器中分配](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md#object-reference-fields)的公共 [Object](/engine/6000.0/script-reference/unity-engine/object.md) 字段，您可以为这些字段设置默认引用。在项目窗口中选择脚本资源时，检视面板中会显示这些默认引用字段。


**包含三个 AudioClip 字段的 MonoBehaviour 脚本。这些字段的默认引用显示为未设置。:**
![](/api/media?file=/engine/6000.0/media/images/MonoBehaviourDefaultReferences.png)

在上面的示例中，有三个公共音频剪辑字段，未分配默认引用。您可以为每个 AudioClip 字段分配默认音频剪辑。

如果设置了默认引用，那么在将 MonoBehaviour 作为组件添加到游戏对象时，或者将游戏对象上的 MonoBehaviour 实例重置为其默认值时，这些默认引用将被应用。

\*\*注意：\*\*游戏对象上的 MonoBehaviour 实例的引用与默认引用之间没有持续的关联。这意味着，如果您更改了默认引用，现有游戏对象上的引用不会自动更新。

此外，不继承自 `UnityEngine.Object` 的其他类型的[检视面板可编辑字段](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md)（例如，公共字符串或 int 字段）在检视面板中没有默认字段。相反，它们直接从脚本中获取默认值。

## 字段名称到标签的转换##field-name-to-label-conversion

Unity 据以下规则在**检视面板**窗口中将 C# 字段名称转换为标签。例如，以上示例中的变量名称已从 `myName` 转换为 **My Name**，并从 `objectToFollow` 转换为 **Object To Follow**。规则如下所示：

* 将第一个字母大写
* 在小写字符和大写字符之间添加空格
* 在缩写和下一个单词的开头大写字母之间添加空格。
* 删除任何 `m_` 前缀
* 删除任何 `k` 前缀
* 删除任何 `_` 前缀

有一些特殊情况（例如 `iPad` 或 `x64`）不适用这些规则。

## 其他资源##additional-resources

* [组件简介](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/unity-components/components.md)
* [Inspector 窗口](/engine/6000.0/manual/unity-editor/using-the-editor/using-the-inspector.md)
