版本:2022.3
语言:英语
创建和使用脚本
运行时实例化预制体

变量和检查器

在编辑器中创建脚本时,Unity会自动提供一个模板脚本,该脚本继承自MonoBehaviour类。继承自MonoBehaviour类意味着您的脚本可以像组件一样行为,并且您可以将其附加到GameObjectUnity场景中的基本对象,可以代表角色、道具、场景、摄像机、航点等。GameObject的功能由附加到其上的组件定义。更多信息
查看《术语表
,就像其他任何组件一样。

当您的脚本继承自MonoBehaviour时,您可以在脚本中包含属性和值,然后您可以从编辑器检查器Unity窗口,显示当前所选GameObject、资产或项目设置的信息,允许您检查和编辑值。更多信息
查看《术语表
中进行编辑,就像可以编辑任何其他组件一样。

以下示例代码声明了一个名为myName的公共变量。当您将此脚本放置在您的场景包含游戏的环境和菜单。每个独特的场景文件就像一个独特的关卡。在每个场景中,您放置您的环境、障碍和装饰,可以说是在按部分设计和构建游戏。更多信息
查看《术语表
中的GameObject上时,该变量在检查器中作为一个标签为“我的名字”的字段可见。脚本中声明的默认值“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);
    }
}

您放置脚本组件的每个GameObject都可以有自己的唯一字段值。

A public string field editable in the inspector window.
检查器窗口中可编辑的公共字符串字段。

为了创建检查器标签,Unity会在变量名的大小写字母之间插入空格,并应用其他一些规则(参见变量名到标签转换)。然而,这些更改仅用于显示目的。您应该在代码中始终使用变量名。

在检查器中,如果您编辑了我的名字值并按下播放,控制台信息现在应包括您输入的文本。

C#中让变量可编辑的最简单方法是将其声明为public。如果您想使一个私有字段可编辑,您可以使用SerializeField属性。相反,您可以使用[HideInInspector]属性(../ScriptReference/HideInInspector.html)来阻止公共变量在检查器中显示。

注意:您可以在运行模式下修改脚本的变量值,这在直接看到更改效果而不必停止和重新启动时非常实用。然而,当您停止播放模式时,变量的值将重置为您进入播放模式之前的状态(这适用于所有脚本和组件)。

对象引用字段

除了布尔型、字符串型和数值型字段外,您还可以使任何类型继承自 UnityEngine.Object 的字段在检查器中可编辑。这包括所有内置组件类型(如 Transform、AudioSource、Camera、Light),您自己的 MonoBehaviour 脚本类型以及许多资产类型。

这允许您在自己的脚本组件中使用 Unity 编辑器的强大拖放系统。例如,如果您在脚本中创建一个公共的 Transform 字段并将其添加到一个 GameObject 上,您可以在检查器中将另一个 GameObject 拖入该字段以设置对该 GameObject 的引用,您可以在运行时在脚本中访问该引用。

例如,这个“跟随”脚本来使一个 GameObject 跟随另一个

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,在编辑器中显示为可分配字段。您可以从层次结构窗口中拖动不同的 GameObject 到这个字段,然后编辑器将为该拖动对象的 Transform 组件分配一个引用。

下面的屏幕截图中,脚本放在了 Sphere GameObject 上,Cube 已经从层次结构拖动并放入了“要跟随的对象”字段中。

A public Transform field with a GameObject assigned. Here the script is on the Sphere (currently selected), and the Cube was dragged and dropped from the Hierarchy into the Spheres Object To Follow field
一个已分配 GameObject 的公共 Transform 字段。在这里,脚本在 Sphere 上(当前选中),Cube 已经从层次结构拖动并放入 Sphere 的“要跟随的对象”字段中。

注意:您还可以为 MonoBehaviour 脚本一段代码,允许您创建自己的组件,引发游戏事件,随时间修改组件属性以及以任何您喜欢的方式响应用户输入。 更多信息
术语表中 查看更多信息
中的公共对象引用字段设置默认对象引用。

变量名到标签的转换

检查器在将您的变量名转换为检查器中的标签时应用了几条规则。例如,上面的示例中的变量名已经从 myName 转换为“我的名字”,并且从 objectToFollow 转换为“要跟随的对象”。规则如下

  • 首字母大写
  • 将小写和大写字符之间添加空格
  • 在缩写和下一个单词开头的大写字母之间添加空格
  • 从开头删除“m_”
  • 从开头删除“k”
  • 从开头删除“_”

存在一些特殊情况,如“iPad”或“x64”,在这些情况下,不应用这些规则。

创建和使用脚本
运行时实例化预制体