创建和使用脚本

游戏对象的行为由绑定的 组件 所控制。尽管 Unity 内置的组件非常灵活多样,但是你很快就会发现它们提供的功能远远不够,为了实现你所要的游戏功能,你需要超越它们才行。Unity 支持通过 脚本 创建属于你自己的组件。在组件中,随着时间的推移,你可以触发游戏事件、修改组件属性,还可以以任何你喜欢的方式来响应用户输入。

Unity 内置支持两种编程语言:

  • C# 一种工业标准语言,类似于 Java 或 C++;
  • UnityScript 一种专为 Unity 设计的语言,模仿自 JavaScript;

除此之外,许多其他可以编译为兼容 DLL 的语言也可以用于 Unity —— 更多细节请查阅 这里

学习编程艺术和使用这些特定语言超出了本文的范围。不过,有许多书籍、指南和其他资源可以让你学习如何在 Unity 中编程。请参阅我们网站的 学习部分 了解更多细节。

创建脚本

与其他大多数资源文件不同的是,脚本通常是直接在 Unity 中创建。你可以通过 Project 面板左上角的 Create 菜单创建一个新脚本,或者从主菜单选择 Assets > Create > C# Script (或 JavaScript) 。

新脚本将被创建在 Project 面板中选中的文件夹下。新脚本的文件名将被选中,提示你输入一个新的名称。

创建和使用脚本 - 图1

最好是在这个时候为新脚本输入名称,而不是在以后再修改。你输入的脚本名称将被用于初始化文件的内容,如下所述。

脚本文件剖析

当你在 Unity 中双击一个脚本文件时,它将被一个文件编辑器打开。默认情况下,Unity 会使用 MonoDevelop,你也可以在 Unity 偏好设置的 External Tools 面板中选择任何你喜欢的编辑器。

脚本文件的初始内容会是这个样子:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class MainPlayer : MonoBehaviour {
  4. // Use this for initialization
  5. void Start () {
  6. }
  7. // Update is called once per frame
  8. void Update () {
  9. }
  10. }

脚本通过继承内置类 MonoBehaviour 与 Unity 相连接。你可以把类当作是一种设计图,它可以创建一个新的组件,并绑定到游戏对象上。每当你把脚本组件绑定到游戏对象上时,会创建一个由设计图定义的对象实例。类的名称来自于文件创建时你提供的文件名。类名和文件名必须一致,这个脚本组件才能被绑定到游戏对象。

特别需要注意在类中定义的两个函数。函数 Update 用于放置处理游戏对象桢更新的代码。可能包括移动、触发动作和响应用户输入等,基本上包含了任何游戏运行时随着时间推移需要处理的事情。为了让 Update 函数能够工作起来,通常需要在任何游戏行为发生前,设置变量、读取配置和连接其他游戏对象。函数 Start 在游戏开始前被 Unity 调用(例如,第一次调用 Update 函数之前),是执行初始化的理想场所。

老司机请注意:你可能会惊讶于一个对象的初始化居然没有用到构造函数,这是因为,对象的构造过程是由编辑器处理的,而且不是发生在你所期望的游戏开始时。如果你试图为脚本组件定义一个构造函数,将妨碍 Unity 的正常运行,可能会引发严重问题。

UnityScript 脚本与 C# 脚本稍有不同:

  1. #pragma strict
  2. function Start () {
  3. }
  4. function Update () {
  5. }

在这里,Start 和 Update 函数具有相同的含义,但是没有显示地声明类。脚本本身就被认为是对类的定义;它将隐式地继承 MonoBehaviour,并且把脚本文件名作为类名。

控制游戏对象

如上所述,脚本只是组件的设计图,在脚本实例被附加到游戏对象之前,它的代码不会被激活。你可以拖动脚本文件到层级视图的某个游戏对象上,或者拖到到当前选中的游戏对象的检视视图中。在 Component 菜单下有一个 Scripts 子菜单,其中包含了当前项目中的所有有效脚步,包括你创建的脚本。脚本实例看起来就像检视视图中的其他组件一样。

创建和使用脚本 - 图2

绑定之后,当你按下 Play 按钮运行游戏时,脚本就开始工作。你可以在 Start 函数中添加下面的代码来验证这一点:

  1. // Use this for initialization
  2. void Start () {
  3. Debug.Log("I am alive!");
  4. }

Debug.Log 是一个简单的命令,只是向 Unity 的控制台输出打印一条消息。现在,如果你按下 Play 按钮,你会在 Unity 编辑器窗口底部和 Console 窗口(菜单:Window > Console)看到这条消息。