Unity:基础、架构和 C# 开发

作者: IT Sectr 发布日期: 2026-05-02 阅读时间: 9 分钟

Unity 是一个跨平台游戏引擎,用于创建 2D 和 3D 应用程序,支持编译到移动平台、桌面和游戏主机。它既用于游戏开发,也用于建筑、汽车和零售领域的非游戏应用。根据 Unity Technologies, 2025 的数据,App Store 前 1000 名中超过 70% 的移动游戏都是用 Unity 创建的。C# — 是该引擎的主要编程语言,用于编写游戏逻辑、组件和编辑器脚本。

要点

  • Unity — 跨平台游戏引擎,支持 2D、3D、AR 和 VR
  • C# — 用于编写游戏逻辑、组件和编辑器脚本的主要语言
  • 基于组件的架构 — 对象的行为由组件构建(MonoBehaviour)
  • Asset Store — 提供现成模型、纹理、声音和插件的市场
  • 移动端编译 — 针对 ARM 架构优化的 iOS 和 Android 构建

什么是 Unity?

Unity — 是由 Unity Technologies 于 2005 年创建的游戏和实时应用开发环境。该引擎支持 27 个平台,包括 iOS、Android、Windows、macOS、PlayStation、Xbox、Nintendo Switch 和 WebGL。根据 Unity Gaming Report (2024) 报告,2023 年每月在 Unity 上启动的移动游戏超过 30 亿。

Unity 的主要特点是面向组件的架构。场景中的每个对象都是一个空容器(GameObject),可以向其添加决定其行为的组件:渲染、物理、声音、动画和用户逻辑。这使 Unity 区别于层级式引擎(如 Unreal Engine),后者通过类继承来确定行为。

根据 Statista (2025) 的数据,Unity 占据移动游戏引擎市场 48% 的份额,领先于 Unreal Engine (15%) 和自有解决方案 (37%)。独立工作室因其较低的入门门槛而选择该引擎,大型发行商则因其针对不同平台的编译管道的灵活性而选择它。

Unity 架构:场景、对象和组件

Unity 的架构基于四个基本概念:场景、GameObjects、组件和预制体。理解这一层级结构对于高效使用引擎至关重要。

场景和 GameObjects

场景 (Scene) — 是一个容器,包含游戏关卡或应用程序状态的所有对象。每个场景都有自己的一组 GameObjects、光源、摄像机和音源。场景之间的切换通过 SceneManager.LoadScene() 完成。

GameObject — 是 Unity 的基本构建块。它没有视觉表现或默认行为 — 它是场景层级结构中的一个空节点。所有行为和外观都通过组件添加。例如,要使 GameObject 可见,需要添加 MeshRenderer;要遵循物理规则 — 添加 Rigidbody。

MonoBehaviour 组件

MonoBehaviour — 是 Unity 中所有自定义脚本的基类。它提供生命周期:Awake(在对象加载时调用)、Start(在第一帧之前)、Update(每一帧)、FixedUpdate(每个物理步骤)和 OnDestroy(在销毁时)。

每个组件可以通过 GetComponent<T>() 与同一 GameObject 上的其他组件交互。这允许创建模块化系统:例如,Health 组件可以独立于 Movement 组件,但两者都可以通过 UnityEvent 对事件做出反应。

预制体

预制体 (Prefab) — 是作为资源保存在项目中的 GameObject 模板。预制体的更改会自动应用到场景中它的所有实例。这是 Unity 中重复使用的核心机制,可以加速迭代并减少错误数量。

预制体支持嵌套(Nested Prefabs):一个预制体可以包含其他预制体,形成层级结构。例如,汽车预制体可以包含车轮、发动机和车身的预制体,每个都有自己组件和设置。

Unity 中的 C# 代码示例

我们来看一个 C# 中角色移动的基本组件。这个脚本会相对于对象的当前旋转向前移动对象,并处理用户输入。

csharp
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        float move = Input.GetAxis("Vertical");
        Vector3 direction = transform.forward * move;
        CharacterController controller = GetComponent<CharacterController>();
        controller.SimpleMove(direction * speed);
    }
}

Update() 方法在每一帧被调用。Input.GetAxis 读取垂直控制,SimpleMove 在考虑物理的情况下应用移动。CharacterController — 是一个内置的 Unity 组件,处理碰撞而无需编写碰撞物理。

处理碰撞和造成伤害的脚本示例:

csharp
using UnityEngine;

public class DamageHandler : MonoBehaviour
{
    public int health = 100;

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            health -= 10;
            if (health <= 0)
            {
                Destroy(gameObject);
            }
        }
    }
}

OnCollisionEnter 方法在 GameObject 与另一个对象碰撞时由物理引擎调用。通过标签 (CompareTag) 进行比较确定具体与什么发生了碰撞。这种方法允许在不修改代码的情况下为玩家、敌人和可破坏对象重复使用 DamageHandler 组件。

在 Unity 中开发移动游戏

Unity 提供专门的工具,用于在资源有限的移动设备上优化游戏。关键的优化方向包括内存管理、减少 draw calls 数量和适配不同的屏幕分辨率。

性能优化

对于移动平台,Unity 提供 Asset Bundles — 一种内容打包系统,可按需加载资源,减小应用的初始大小。这对于具有许多关卡或角色的游戏尤其重要,由于应用商店的限制,同时加载所有资源是不可行的。

Unity Profiler 可以通过 ADB (Android) 或 USB (iOS) 连接分析真实设备上的 CPU、GPU 和内存使用情况。根据 Unity Documentation (2025) 的数据,将移动设备上的 draw calls 数量优化到 100–300 可在中端设备上提供稳定的 60 FPS。

触摸输入和 UI

对于移动游戏,Unity 使用 Input System,它将触摸控制、加速度计和陀螺仪抽象到统一的 API 下。虚拟摇杆、滑动和点击通过 Input Action Assets 进行配置,无需编写触摸处理代码。

Unity 的 UI 系统 (uGUI) 支持 Canvas Scaler,用于自动适应不同屏幕比例的界面。使用 Scale With Screen Size 模式的 Canvas Scaler 组件可确保按钮在平板电脑和智能手机上不会超出屏幕边缘。

编译到 iOS 和 Android

在 Unity 中编译移动游戏通过 Build Settings 窗口完成。Android 需要 Android SDK 和 NDK,Unity 会生成一个 Gradle 项目,编译为 APK 或 AAB。iOS 需要 Xcode — Unity 会创建一个带有 Objective-C/Swift 包装的 Xcode 项目,然后通过 Apple 编译。

IL2CPP — 是一种编译选项,将 C# 代码转译到 C++,然后到原生 ARM 代码。根据 Unity Benchmark (2024) 的数据,与 Mono 相比,IL2CPP 在 iOS 和 Android 上的性能提高了 15–25%,但会增加编译时间和二进制文件大小。

Unity 与其他引擎的比较

Unity 与 Unreal Engine 和 Godot 作为游戏引擎市场的主要替代方案进行比较。选择取决于项目类型、团队资质和目标平台。

标准UnityUnreal Engine 5Godot 4
语言C#C++ / BlueprintsGDScript / C#
图形Built-in / URP / HDRPNanite + Lumen自有渲染器
移动端优化优秀(70% 移动游戏)良好(AAA 移植)良好(轻量引擎)
入门门槛
许可证Personal / Pro / Enterprise5% 版税($100万以内)MIT(免费)

对于移动游戏,Unity 仍然是行业标准,这得益于其灵活的渲染系统(URP — Universal Render Pipeline),该系统针对计算能力有限的移动 GPU 优化了图形。URP 自动减少渲染通道的数量并合并着色器以降低 GPU 负载。

Unreal Engine 5 提供更好的图形质量(Nanite 处理几何,Lumen 处理光照),但需要更强大的硬件和更丰富的团队经验。Godot 以开源代码和小巧的引擎体积吸引人,但现成资源较少,专家市场也较小。

Unity 用于非游戏应用

Unity 在游戏开发之外也被积极使用 — 在建筑、汽车工业、零售和教育领域。实时可视化 (RT3D) 允许创建交互式 3D 演示、模拟器和产品配置器。

在汽车工业中,Unity 用于创建汽车的数字化双胞胎和 HMI(人机界面)系统。梅赛德斯-奔驰和宝马在物理原型发布之前就使用 Unity 进行仪表板面板和多媒体系统的原型设计。

在零售领域,Unity 用于产品配置器:宜家(虚拟家具布置)、耐克(鞋子定制)和奥迪(汽车配置器) — 所有这些项目都基于 Unity 构建。用户可以实时更改产品的颜色、材料和配置,在 3D 中查看结果。

对于非游戏项目,Unity 提供专门的工具:AR Foundation(用于 ARKit 和 ARCore)、Pixyz 插件(用于导入 CAD 模型)和 Unity Reflect(用于与 Revit BIM 模型同步)。公司正在积极发展 Unity Industry 方向,其中包括面向企业客户的云服务。

常见问题

初学者学习 Unity 难吗?

Unity 被认为是初学者最容易上手的游戏引擎之一,这得益于其广泛的文档、免费的 Unity Learn 课程和庞大的社区。要开始学习,只需要了解 C# 基础知识和理解基于组件的架构原理。大多数初学者在 2–3 个月内就能创建他们的第一个游戏。

可以在 Unity 中创建 2D 游戏吗?

是的,Unity 拥有完整的 2D 管道:Sprite Renderer、2D Physics (Box2D)、用于从瓦片创建关卡的 Tilemap 和用于精灵骨骼动画的 2D Animation。许多流行的 2D 游戏,包括《空洞骑士》和《茶杯头》,都是用 Unity 创建的。2D 工具内置于引擎中,无需安装插件。

Unity 用于移动开发需要多少钱?

年收入在 20 万美元以内时,Unity Personal 是免费的。Unity Pro 每位开发者每年费用为 2,040 美元,包括高级分析工具、云构建和优先支持。对于移动开发,Personal 的功能足以满足大多数独立项目的需求。

Unity 与 Cocos2d 游戏引擎有何不同?

Cocos2d — 是一个 2D 框架,支持 C++、Lua 和 JavaScript,专注于简单的 2D 游戏。Unity 是一个完整的 3D/2D 引擎,带有编辑器、可视化工具并支持 27 个平台。Cocos2d 在亚洲流行于超休闲游戏,Unity 则是适用于任何类型的通用选择。

Unity 支持 AR 和 VR 吗?

是的,Unity 通过 AR Foundation (ARKit + ARCore)、XR Interaction Toolkit 和 OpenXR 提供对 AR 和 VR 的内置支持。像《半条命:Alyx》(技术演示)和 VRChat 这样的 VR 项目都是在 Unity 中创建的。该引擎支持所有主流 VR 头显:Meta Quest、HTC Vive、Valve Index 和 PlayStation VR。

总结

  • Unity — 用于 C# 2D/3D 游戏和实时应用的跨平台引擎
  • 架构 基于场景、GameObjects、MonoBehaviour 组件和预制体
  • C# — 游戏逻辑、组件和编辑器扩展的唯一语言
  • 移动端优化 — IL2CPP、Asset Bundles、URP 和针对 iOS 和 Android 的 Profiler
  • 比较 — Unity 在移动市场领先 (48%),Unreal 在 AAA,Godot 在独立游戏领域
  • 非游戏应用 — 建筑、汽车工业、零售和交互式 3D 演示
  • 入门门槛 — 低,提供免费的 Unity Learn 课程和庞大的社区

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读