脚本创建与调试
Unity游戏逻辑代码(即GamePlay层)遵循了组件式变成的思路,整体都是通过游戏对象(GameObject)和组件(Component)这两个基本单元构成的。除了Unity内置的组件之外,所谓的游戏脚本其实就是我们自定义的组件。我们的游戏逻辑,比如角色移动、按钮按下后的动作等,都是通过脚本代码实现的。
Unity脚本只能使用C#语言编写(新版本中已经移除了JavaScript和Boo语言的支持),经过一个Unity定制的编译器编译成IL后,再通过IL2CPP和C++编写的引擎整合在一起。
创建脚本
在Unity编辑器中,我们可以在项目资源面板里新建一个Scripts文件夹,便于存放我们所有的游戏脚本。在文件夹上右键Create -> C# Script,可以创建一个C#脚本。创建完成后,将其拖放到我们需要操作的游戏对象上即可。

在脚本资源上双击,即可打开我们配置好的集成开发环境,我这里使用的是微软的Visual Studio(社区版免费,推荐),当然Unity同时也支持Jetbrains Rider(139$/year,功能不成熟,不推荐)和VSCode(完全免费,推荐),我们可以根据自己的习惯选择。

注意:
- 创建、删除脚本的操作,都需要在Unity编辑器的资源面板中进行,因为Unity需要对项目中的各种文件生成相应的
meta信息,以便管理整个工程的所有文件。 - 脚本文件名需要和脚本类同名,否则会报一个找不到脚本类的错误,这里修改脚本文件名时需要注意。
编写脚本
以下是创建脚本文件后,Unity自动生成的内容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
这里我们引用了命名空间UnityEngine,Unity的核心功能都是在这个命名空间下的,除此之外,常用的还有比如UI系统需要的UnityEngine.UI等,用到时我们再详细介绍。
我们的脚本需要继承MonoBehaviour,实际上,我们的脚本编写也是基于这个类展开的。MonoBehaviour除了作为脚本组件的基类,还为我们封装了很多功能,比如一些生命周期函数,组件获取功能等。
Start()和Update()是MonoBehaviour的两个生命周期回调函数,顾名思义,Start就是该脚本组件初始化时的回调,Update则是游戏每一帧刷新时,对脚本组件的回调。在后续笔记中,我们还会详细了解脚本组件的生命周期。
我们在Update()中,编写一个简单的输出调试信息的代码:
void Update()
{
Debug.Log("Hello, world!");
}
在Unity中运行我们的游戏(注意脚本需要已经挂载到一个游戏对象上):

控制台中可以看到输出的调试信息:

断点调试
使用Visual Studio断点调试Unity程序非常简单,点击上方附加到Unity按钮,即可进入调试状态,我们可以在编辑器中设置断点。

此时再启动Unity的游戏预览功能,代码就会在我们的断点处暂停:

这里游戏逻辑停在了一个Update()函数中,Unity的游戏预览也停在了上一帧,我们这里就可以很方便的进行脚本的单步调试了。
查阅文档
Unity官网的文档相当详细,同时,我们安装Unity编辑器后,本地也会附带一份当前版本的文档。

Unity编辑器中点击图中选项即可打开本地文档。
