您想找什么?
Hero background image
适用于资深程序员的Unity脚本编写教程

对于刚接触 Unity 的程序员

在Unity中,您可以使用脚本开发游戏或其他实时交互式内容的几乎每个部分。Unity 支持使用 C# 编写脚本,并且在 Unity中构建 C# 脚本的主要方式有两种:面向对象设计(这是传统且使用最广泛的方法)和面向数据的设计(现在可在 Unity 中针对特定用例通过我们新的高性能多线程 面向数据技术堆栈 (DOTS)实现)。

您是从C++背景转到Unity来的吗?

Unity支持C#,这是一种类似于Java或C++的行业标准语言。

与C++相比,C#更易于学习。此外,它是一种“托管语言”,也就是说它会自动进行内存管理:分配/释放内存、覆盖内存泄露等。

一般来说,如果您想早一点制作出一款游戏,那么C#比C++更好,您可以之后再学习更高级的编程技能。

Unity中的游戏对象和组件
Unity中的游戏对象和组件
Unity中的脚本组件
基于 DOTS 构建的 Unity《特大城市》演示
使用DOTS进行面向数据的设计的好处

传统的“游戏对象-组件”概念仍将继续有效,因为它易于被程序员和非程序员理解,并且易于构建直观的UI。当您将刚体组件添加到游戏对象时,该游戏对象会开始下落;将光源组件添加到游戏对象时,它将开始发光。依此类推。

但是,该组件系统是基于面向对象的框架编写的,随着硬件的不断发展,它给开发人员带来了一系列难题,例如缓存和内存的管理。

组件和游戏对象是“重型C++”对象。所有游戏对象都有一个名称。它们的组件是基于C++组件的C#包装器。这使得它们易于使用,但可能会降低性能,因为它们最终可能以非结构化方式存储。这种C#对象可能存储在内存中的任意位置。C++对象也可能存储在内存中的任意位置。它们可能不在同一块连续的内存空间中。每次将任何内容加载到CPU中进行处理时,都必须从多个位置获取所有内容。这可能导致操作缓慢且效率低下,因此需要通过多种方法进行优化。

为了解决上述性能问题,我们正在使用高性能、多线程的面向数据的技术堆栈(也称为DOTS)重新构建Unity的核心基础(当前处于“预览”阶段)。

使用DOTS,您的游戏可充分利用最新的多核处理器。它包含以下部分:

在DOTS中,新的组件系统是ECS;在该新系统中,您将使用实体进行使用游戏对象(在使用传统的面向对象的方式时)进行的操作。组件仍称为组件。它们的关键区别在于数据布局。您可以在博客文章“中阅读更多相关信息”关于 DOTS:实体组件系统

基于 DOTS 构建的 Unity《特大城市》演示
充分利用现代硬件

使用ECS不仅能让您在设计方面实现更好的游戏编程,还能让您占据利用Unity C#任务系统和Burst编译器的有利地位,助力您充分利用现代硬件。

DOTS的多线程系统支持您创建可在各种硬件上运行的游戏,构建元素更多和模拟更复杂的丰富的游戏世界。反过来,高性能的代码有助于优化玩家移动设备上的热控制和电池寿命。通过从面向对象的设计转向面向数据的设计,您可以更轻松地重用代码,其他人也能更轻松地理解和处理代码。

由于DOTS的某些技术仍处于“预览”阶段,我们建议开发人员使用它解决项目中的特定性能难题,而不要基于它构建整个项目。请查看本页面底部的“更多资源”部分,以获取指向DOTS关键资源的链接。

用于优化性能的 Unity Profiler
Unity中的调试

Unity中的调整和调试效率很高,因为在开发者开发时,所有游戏变量均显示在右侧,随时可以修改,不需要编写一行代码。您可以随时暂停游戏,也可以逐行调试代码,每次执行一个语句。

下面是一些很好的资源,可帮助您进一步了解如何在Unity中进行优化:

性能分析器

Profile Analyzer

内存性能分析器

了解Unity中的优化

优化图形性能

一般最佳实践(包括有关优化Unity UI系统的丰富技巧)

Unity中的脚本后端

净额.NET:Unity已经对脚本使用了本身支持C#的标准Mono运行时的实现方案。Unity当前附带适用于Mac的Visual Studio,而不是macOS上的MonoDevelop-Unity。在Windows上,Unity附带Visual Studio。

Unity中的.NET 4.6脚本运行时支持许多令人振奋的C#新功能和C# 6.0及以后版本中的调试功能。C#新功能还会带来非常好的C# IDE体验。

IL2CPP:IL2CPP:这是一种通过Unity开发的脚本后端,在为某些平台构建项目时可用于替换Mono。如果选择使用IL2CPP构建项目,Unity在创建本机二进制文件(例如,.exe、apk、.xap)之前会根据您所选的平台将脚本和程序集内的IL代码转换为C++代码。

请注意,为iOS和WebGL构建项目时,IL2CPP是唯一可用的脚本后端。

通过扩展编辑器自定义Unity
更多资源
将您的游戏迁移到DOTS
将您的游戏迁移到DOTS
基于 DOTS 构建的《特大城市》演示
DOTS文档
Unity 开发平台中包含的工具和服务
Unity实时3D平台概述