• 游戏
  • 工业
  • 资源
  • 社区
  • 学习
  • 支持
开发
Unity 引擎
为任何平台构建2D和3D游戏
下载计划和定价
商业化
应用内购买(IAP)
发现并管理各商店的IAP
聚合平台
最大化收入并优化变现
Ad Quality
保护您应用的用户体验
Tapjoy
建立长期用户忠诚度
所有变现产品
用户获取
用户获取
被发现并获取移动用户
Unity向量AI
将玩家与合适的游戏连接
Aura设备内广告
在用户高峰参与时触达用户
所有增长产品
使用案例
3D协作
实时构建和审查3D项目
沉浸式培训
在沉浸式环境中培训
客户体验
创建互动3D体验
所有行业解决方案
行业
制造业
实现运营卓越
零售
将店内体验转化为在线体验
汽车
提升创新和车内体验
所有行业
技术库
文档
官方用户手册和API参考
开发者工具
发布版本和问题跟踪器
路线图
查看即将推出的功能
术语表
技术术语库
洞察
案例分析
真实成功案例
最佳实践指南
专家提示和技巧
所有资源
新增功能
博客
更新、信息和技术提示
新闻
新闻、故事和新闻中心
社区中心
讨论
讨论、解决问题和连接
事件
全球和本地活动
社区故事
Made with Unity
展示Unity创作者
直播活动
加入开发者、创作者和内部人员
Unity奖项
庆祝全球的Unity创作者
适合每个级别
Unity Learn
免费掌握Unity技能
专业培训
通过Unity培训师提升您的团队
Unity新手
准备开始
开始您的学习
Unity基础路径
你是Unity 新手?开始您的旅程
使用指南
可操作的技巧和最佳实践
教育
对于学生
开启您的职业生涯
对于教育者
增强您的教学
教育资助许可证
将Unity的力量带入您的机构
认证
证明您的Unity精通
支持选项
获取帮助
帮助您在Unity中取得成功
成功计划
通过专家支持更快实现目标
常见问题解答
常见问题解答
联系我们
与我们的团队联系
计划和定价
语言
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
社交
货币
采购
  • 产品
  • Unity Ads
  • 订阅
  • Unity Asset Store
  • 经销商
教育
  • 学生
  • 教师
  • 机构
  • 认证
  • 学习
  • 技能发展计划
下载
  • Unity Hub
  • 下载存档
  • Beta 版测试
Unity Labs
  • 实验室
  • 作品
资源
  • 学习平台
  • 社区
  • 文档
  • Unity QA
  • 常见问题解答
  • 服务状态
  • 案例分析
  • Made with Unity
Unity
  • 我们公司
  • 新闻简报
  • 博客
  • 事件
  • 工作机会
  • 帮助
  • 新闻
  • 合作伙伴
  • 投资人
  • 附属机构
  • 安防
  • 社会影响力
  • 包容性与多样性
  • 联系我们
版权所有 © 2025 Unity Technologies
  • 法律
  • 隐私政策
  • Cookie
  • 不要出售或分享我的个人信息

“Unity”、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其分支机构在美国及其他地区的商标或注册商标(单击此处获取更多信息)。其他名称或品牌是其各自所有者的商标。

Hero background image

适用于资深程序员的Unity脚本编写教程

对于刚接触 Unity 的程序员

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

  • 您是从C++背景转到Unity来的吗?
  • Unity中的游戏对象和组件
  • Unity中的脚本组件
  • 使用DOTS进行面向数据的设计的好处
  • 充分利用现代硬件
  • Unity中的调试
  • Unity中的脚本后端
  • 通过扩展编辑器自定义Unity

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

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

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

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

了解详情
请参阅 Unity API 文档
Unity中的游戏对象和组件

Unity中的游戏对象和组件

在 Unity 中开发的所有游戏玩法和交互功能均基于三个基本构建块构建:游戏对象、组件和变量。

游戏中的任何对象都是游戏对象:角色、光源、特效、道具等等。

组件
游戏对象本身并不能发挥作用。要让游戏对象真正发挥作用,还需要通过添加组件为其分配属性。

组件用于定义和控制相关联的游戏对象的行为。一个简单示例是创建光源,这会涉及将光源组件附加到游戏对象(请参阅下文)。或者,将刚体组件添加到对象以使其下落。

组件可以有任意数量的可编辑属性(也称为变量),这些属性均可通过Unity editor中的Inspector窗口和/或通过脚本进行调整。在上面的示例中,光源的部分属性是范围、颜色和强度。

Unity中的脚本组件

虽然Unity的内置组件可能用途很广泛,但是您很快就会发现,必须超越组件可提供的功能才能实现自己的游戏逻辑。为此,您需要使用脚本实现自己的游戏逻辑和行为,然后将这些脚本作为组件添加到游戏对象。为了连接到Unity的内部架构,每个脚本将实现一个类,此类从称为MonoBehaviour的内置类派生而来。

利用脚本组件可以实现很多功能:触发游戏事件、检查碰撞、应用物理属性、响应用户输入等,不一而足。有关更多信息,请参阅Unity Scripting API。

基于 DOTS 构建的 Unity《特大城市》演示

使用DOTS进行面向数据的设计的好处

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

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

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

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

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

  • 可高效运行多线程代码的C#作业系统。
  • 默认情况下编写高性能代码的实体组件系统(ECS)。
  • 生成高度优化的本地代码的Burst编译器。

在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

作为一名工程师,您在Unity中可以获得很大的灵活性,因为就像标准编辑器中的Inspector、Scene和任何其他内置窗口一样,您可以使用自己的自定义窗口扩展编辑器。您还可以将自己的工具添加到Unity,从而为您团队的独特工作流程和需求提供支持,最终提高效率。

更多资源

将您的游戏迁移到DOTS

将您的游戏迁移到DOTS

观看视频
基于 DOTS 构建的《特大城市》演示

DOTS文档

了解详情
Unity 开发平台中包含的工具和服务

Unity实时3D平台概述

了解详情