Table of Contents:

开发环境配置

  1. 下载Unity Hub,设置中添加Licenses,个人开发就添加个人版的Licenses
  2. 下载Unity Editor, 版本为2022.3.16f1, 并在Unity Hub中添加Editor,当然也可以在Unity Hub中下载Editor
  3. 在Unity Hub中添加游戏工程
  4. 在Unity Editor的Project面板中,打开Assets/Scenes目录下的game.unity场景文件,此文件是游戏的入口文件

目录说明

Assets\SceneScript, 场景里面用到的脚本文件,比如:水特效的、例子特效的

基本概念

场景文件

.unity后缀,场景是游戏内容的承载体

游戏对象(Game Objects)

游戏对象(Game Objects)是构成游戏世界的基本元素之一。它们是组成场景的实体,可以代表角色、物体、相机、灯光等可见或不可见的元素。

游戏对象本身并没有可见的形状或图像,它们是一种容器,可以包含各种组件(Components)来定义其行为、外观和功能。游戏对象是通过添加不同的组件来定义其属性和行为的,例如 Transform 组件控制位置、旋转和缩放,而 Mesh Renderer 组件控制渲染模型,Collider 组件用于碰撞检测等等。

Unity 的游戏对象是一种通用的容器,可以根据不同的需求添加、移除和组合不同的组件,从而实现各种各样的游戏逻辑和功能。

组件(Components)

组件(Components)是附加到游戏对象(Game Objects)上的模块化功能单元,用于定义游戏对象的行为、特性和功能。通过将不同的组件附加到游戏对象上,可以为它们赋予各种不同的特性和行为。

常用的 Unity 组件:

  1. Transform 组件:
    • 控制游戏对象的位置、旋转和缩放。
  2. Renderer 组件:
    • 包括 Mesh Renderer(用于渲染3D模型)、Sprite Renderer(用于渲染2D精灵)等,用于渲染游戏对象。
  3. Collider 组件:
    • 用于碰撞检测,包括 Box Collider、Sphere Collider、Mesh Collider 等。
  4. Rigidbody 组件:
    • 使游戏对象具有物理属性,可以通过物理引擎进行运动和碰撞计算。
  5. Script 组件:
    • 允许附加脚本(例如 C# 或者 UnityScript/JavaScript)到游戏对象,从而为其添加自定义的逻辑和行为
  6. Animator 组件:
    • 用于控制角色和物体的动画,通常与动画控制器(Animator Controller)配合使用。
  7. Audio Source 组件:
    • 控制游戏对象的声音播放。
  8. Particle System 组件:
    • 用于创建粒子效果,例如火焰、爆炸、烟雾等特效。
  9. Camera 组件:
    • 定义游戏世界的视图和投影方式,控制场景的可视化。
  10. Light 组件:
    • 控制光源,包括 Directional Light(平行光)、Point Light(点光源)、Spotlight(聚光灯)等,用于场景的照明。

      预制体(prefab)

      .prefab后缀,是一种预制资源,它允许你保存游戏对象及其相关组件、属性和设置,并在项目中重复使用。

将游戏对象转换为 Prefab:
1. 在场景中选择你想要转换为 Prefab 的游戏对象。
2. 将其拖拽到项目视图中(Project 视图)中,这样就在项目文件夹中创建了一个 Prefab。

使用 Prefab:
一旦创建了 Prefab,你可以在项目中的任何地方使用它:
- 将 Prefab 拖拽到场景中创建一个新的实例。
- 在脚本中使用 Instantiate 方法动态地生成 Prefab 的实例。

unity运行过程

c#语言

c#语言托管环境

unity引擎架构

Unity 游戏引擎是用 C++ 和 C# 以及一些其他语言开发的。主要的引擎代码和底层系统是用 C++ 编写的,而编辑器和一些高级功能是用 C# 编写的。

  1. 底层引擎:
    • Unity 的底层引擎和核心系统,包括了渲染引擎、物理引擎、资源管理、输入系统等,大部分是用 C++ 实现的。这些底层系统负责处理渲染、性能优化、内存管理等任务。
  2. Mono(现在为IL2CPP):
    • Unity 的脚本运行时是基于 Mono(现在逐渐过渡到 IL2CPP)的,它是一个用于在运行时执行 C# 代码的虚拟机。这个部分主要负责管理和执行 C# 脚本代码。
  3. 编辑器和高级功能:
    • Unity 编辑器和一些高级功能是用 C# 编写的。编辑器提供了可视化界面,允许开发者进行场景构建、资源管理、游戏对象设置等操作。

IL2CPP 首先将 C# 脚本代码编译成中间语言(Intermediate Language,IL),这是 .NET 平台通用的中间码。然后 IL2CPP 将 IL 代码转换为 C++ 代码,包括了类型信息、虚函数表等,最后将这些 C++ 代码编译为目标平台的本地机器码,如 x86、ARM 或者其他架构的机器码。

IL2CPP 的工作流程使得游戏可以在不同平台上运行,而不必依赖于特定的 .NET 运行时,同时也提供了更好的性能和更高的代码安全性。

C# 脚本在unity的编译过程

  1. 编写脚本,开发者将编写好的脚本保存到 Unity 项目中的特定目录下,例如 Assets/Scripts 文件夹
  2. Unity 编辑器编译,Unity 编辑器会监测项目中的脚本文件变化,并在需要时触发 C# 编译器(通常是 Mono 或者 Roslyn)编译这些脚本。编译过程会生成对应的 DLL 文件,包含了编译后的 C# 代码
  3. 生成 Meta 文件:,每个脚本文件都有一个对应的 .meta 文件,用于存储该脚本在 Unity 中的设置、引用和相关信息。这个文件与脚本文件一同保存在项目中
  4. 加载 DLL 文件:,当 Unity 运行时,它会加载先前编译生成的 DLL 文件,这些文件包含了编译后的 C# 代码。
  5. 解析脚本组件:,Unity 会根据场景中游戏对象上所附加的脚本组件,查找并读取相应的 DLL 文件,并在需要时实例化相关的 C# 类和对象。
  6. 运行脚本:,当游戏运行时,Unity 会根据脚本组件的定义执行相应的 C# 代码逻辑。这些脚本可能包含着游戏对象的行为、控制、交互逻辑等等。

编译后的文件放在:Library\ScriptAssemblies目录中, 下面是各个名字的含义:

Phase Assembly name Script files
1 Assembly-CSharp-firstpass Runtime scripts in folders called Standard Assets, Pro Standard Assets and Plugins.
2 Assembly-CSharp-Editor-firstpass Editor scripts in folders called Editor that are anywhere inside top-level folders called Standard Assets, Pro Standard Assets and Plugins.
3 Assembly-CSharp All other scripts that are not inside a folder called Editor.
4 Assembly-CSharp-Editor All remaining scripts (those that are inside a folder called Editor).

Unity 引擎在处理和管理项目时,会生成一些额外的目录和文件。Library 目录是其中一个,其中包含了项目的一些缓存和中间文件。在 Library 目录下,ScriptAssembliesUnityAssemblies 目录都是与编译和脚本相关的。
1. ScriptAssemblies 目录:
- ScriptAssemblies 目录存储了项目的脚本编译后的程序集文件。在 Unity 中,编译器将脚本编译成 IL(Intermediate Language),然后通过脚本后端(Scripting Backend)编译成特定平台的机器码。这些编译后的程序集文件(Assembly)被存储在 ScriptAssemblies 目录中。这些程序集文件包括了项目中的 C#、JavaScript 或 Boo 脚本编译后生成的代码。
2. UnityAssemblies 目录:
- UnityAssemblies 目录包含了 Unity 引擎的一些核心程序集文件。这些程序集文件包含了 Unity 引擎的核心功能和库,它们是 Unity 运行时所需的一部分,用于支持游戏运行和项目的正常运行。这些程序集文件通常是 Unity 引擎的一部分,而不是用户自己编写的脚本。通常是预先编译好的本地机器码

unity的运行

编辑与配置阶段:

  1. 创建项目与场景:
    • 开发者使用 Unity 创建项目,包括添加场景、导入资源、编辑场景布局等。
  2. 设计与组织游戏对象:
    • 在场景中创建游戏对象,并附加所需的组件、脚本、材质等,构建游戏世界。
  3. 设置配置与调试:
    • 配置摄像机、光照、物理属性、碰撞器等,并在编辑器中进行调试、预览游戏效果。

运行阶段:

  1. 编译 C# 脚本与资源:
    • Unity 编辑器检测并编译所有脚本和资源文件,生成对应的 DLL 和二进制文件。
  2. 启动游戏场景:
    • 开发者选择启动的场景并在编辑器中点击运行按钮,Unity 开始加载所选场景。
  3. 加载资源与场景:
    • Unity 加载场景所需的资源文件(模型、纹理、声音等),初始化并构建场景中的游戏对象。
  4. 执行游戏逻辑与更新循环:
    • Unity 进入主循环,持续执行游戏逻辑和更新。
      • 输入处理: 处理玩家输入(键盘、鼠标、触摸等)。
      • 物理更新: 更新物理引擎状态,处理碰撞、力学模拟等物理效果。
      • 脚本执行: 执行场景中各游戏对象所附加的脚本,运行相应的逻辑。
      • 渲染: 渲染引擎根据相机设置,将场景中的对象呈现到屏幕上。
  5. 循环更新直至结束:
    • 游戏循环持续执行,直到游戏结束或者玩家退出。
  6. 游戏结束与清理:
    • 游戏结束时,Unity 执行清理工作,释放资源并保存必要的数据。