官方文档:2D - Unity 手册
1、2D与3D
2D与3D的选择:
2D | 3D | |||
全2D | 含3D图形的2D | 透视2D图形的2D | 全3D | 正交3D |
使用2D平面图形(Sprites)绘制在屏幕上,没有任何3D图形。摄像机也是正交模式。 | 2D游戏玩法,只能在两个维度上移动,但是游戏对象是3D图形。摄像机是透视模式。仍通过3D模式编辑。 | 使用不同深度的2D图形以及透视摄像机来获得视差卷轴效果。通过2D模式开发,但是摄像机设为透视,Scene设为3D。 | 通过在3D几何体的表面渲染材质和纹理来模拟游戏世界,摄像机可以在场景中自由移动,并模拟真实的光线、阴影。物体的投影是透视的。 | 与全3D类似,但是摄像机和Scene是正交的,有利于鸟瞰。通常被称为2.5D。 |
2D 与3D模式设置:在创建项目时可以设游戏模式,或者在编辑器设置中切换模式。通过在菜单栏Edit -> Project Settings中的Default Behaviour Mode修改模式。
2D与3D模式下的配置差异:
配置 | 2D | 3D |
图片模式 | 导入的图片默认为2D图片(Sprites) | 不默认为Sprites |
Sprite Packer | 使能 | 非使能 |
Scene窗口 | 2D | 3D |
实时方向光 | 默认游戏对象没有 | 默认游戏对象有 |
摄像机 | 默认位置为(0, 0, -10),正交投影 | 默认位置为(0, 1, -10),透视投影 |
Lighting | Skybox:对新的Scene不使能 Ambient Source:设为Color Realtime Global Illumination:设为off Baked Global Illumination:设为off Auto-Building:设为off | Skybox:内置默认的Skybox材质 Ambient Source:设为Skybox Realtime Global Illumination:设为on Baked Global Illumination:设为on Auto-Building:设为on |
1.1、2D图形与物理概述
2D图形:称为精灵Sprites,本质上是标准纹理。使用精灵编辑器可以从大图片中提取精灵,即将图片分割成多个精灵。渲染精灵需要使用Sprite Render组件,而不是3D的Mesh Render。
2D物理:Unity为2D设计了专门的引擎。2D物理组件区别于3D组件,名称后缀有2D,例如刚体Rigidbody2D、盒型碰撞体BoxCollider2D、2D铰链HingeJolint2D。
1.2、2D游戏开发指引
选择游戏视角:
自上而下Top-down | 以俯视图/鸟瞰图展示动作。 | 红色警戒、八方? |
侧视Side-on | 角色在2个维度上移动,屏幕随之移动,视角是从侧面的。 | Ori |
2.5D/四分之三视图 | 使用3D图形来表现环境和角色,但是摄像机限制在2个维度,并且是正交的。 | 火炬之光 |
选择美术风格:
极简主义/Minimalist | 色彩单调、线条简单、可读性高 | 俄罗斯方块、贪吃蛇大作战、Mini Metro |
像素风/Pixel Art | 像素图形(复古风格) | 魔塔、Phased |
图示性风格/Illustrative | 卡通、风格化或写实 | Ori、死亡细胞 |
预渲染3D | 以3D表现2D | 部落冲突 |
制作前的准备:安装Unity、2D模板、URP(内置渲染管线)、2D渲染器、其他需要的包。
2D Animation | 制作精灵动画必要的工具和组件 |
2D Pixel Perfect | 提供了像素风相机组件,保证不同分辨率下的清晰度 |
2D PSD Importer | 允许从PS导入多层的psd文件来制作精灵 |
2D Sprite | 提供了编辑器环境来创建、编辑精灵资源 |
2D SpriteShape | 提供了创建生物形体、地方的工具,类似于矢量绘图 |
2D Tilemap Editor | 瓦片地图编辑器能够使用精灵瓦片来绘制世界地图 |
游戏的基本概念:
游戏对象 | 游戏中的每一个对象,包括游戏中的角色、物品,以及放在这些的场所。 |
脚本 | 脚本相应玩家的输入,并在相应的时间发生相应的事件。 |
精灵/Sprite | 2D图形对象,用于所有类型的2D游戏。使用精灵集可以更号地控制角色。 |
游戏内环境 | 即游戏世界,可以通过9-slice、瓦片地图、SpriteShape来创建。 |
角色动画 | 逐帧动画:适用于传统动画风格。基于手绘动画,将动画的每一帧作为一个单独图片。 剪纸动画:多个精灵组成一个角色的身体,每个部分的移动模拟整个角色的移动。 骨架动画:将一个或多个精灵映射到一个骨架上,创建角色的骨骼并定义移动、弯曲。 |
图形 | 使用URP可以设定图形选项,包括: 光源:使用Light 2D组件优化精灵的光源; 阴影:定义一个光源的形状和性质来确定其投射的阴影; 粒子系统:创建类似火、烟雾、液体等效果; 后期处理:使用后期处理效果和全屏效果来改善游戏的外观。 |
物理2D | 设置2D物理模拟的限制,工具有: Ridigbody2D:使游戏对象受物理系统的控制,必须添加该组件; Collider2D:定义了对象物理碰撞区的形状,包含不同形状的碰撞体组件; Triggers:触发器不再发生碰撞,而是检测碰撞后调用相应的函数执行对应的事件; 2D Joints:将游戏对象链接在一起,例如世界中的一个固定位置; 2D Effectors:引导场景中的力,例如碰撞。 |
音频 | 添加BGM、音效。音频需要使用第三方软件制作后再导入。 |
UI | 游戏的UI界面,如生命条、属性栏、技能栏等。 |
优化/测试 | 根据游戏各部分的资源密集性,进行性能优化提升。 |
1.3、2D渲染顺序
渲染器优先级使根据其类型和用途,由渲染器队列确定渲染顺序。渲染器队列分为不透明队列、透明队列。
透明队列中的2D渲染器优先级顺序为:排序图层(Sorting Layer)、图层中顺序(Order in Layer)、指定渲染队列、与摄像机的距离(透视下为直接距离,正交下为投影到z轴的距离,还有自定义轴排序、精灵排序点)、排序组(同一排序组组件中的渲染器排序图层、图层中顺序、与摄像机位置相同)、材质/着色器(相同材质的渲染器排序在一起以提高渲染性能)、仲裁程序(顺序相同时进行仲裁)。
2、精灵 Sprite
精灵是2D图形对象,本质上是一种标准纹理。在2D模板中,导入的图像默认设为精灵;3D项目中,需要将Texture Type属性设为Sprite(2D and UI)。
2.1、精灵渲染器组件
Sprite | 该组件渲染的2D精灵图形。点击左侧圆圈选择或者直接将精灵拖进该位置。 |
Color | 精灵的顶点颜色,用于对精灵图形进行着色、重新着色。 |
Flip | 按指定的轴翻转所渲染的2D精灵图形,不影响对象的位置。 |
Material | 用于渲染精灵纹理的材质。 |
Draw Mode | 精灵尺寸发生变化时的缩放方式:Simple(整个图像缩放)、Sliced(9-slice模式)、Size(根据输入的宽高缩放9-slice)、Tiled(9-slice精灵的中间部分进行平铺,TiledMode包括:Continuous(9-slice精灵的中间部分进行平铺)、Adaptive(发生拉伸达到Stretch Value时中间部分开始平铺)、Stretch Value(拉伸比例门限)) |
Sorting Layer | 排序图层用于控制渲染期的精灵优先级。 |
Order In Layer | 在排序图层中的渲染优先级,编号越小优先级越高,越先渲染(被叠在下层)。 |
Mask Interaction | 精灵渲染器与精灵遮罩交互是的行为,包括:None(不交互)、Visible Inside Mask(遮罩覆盖的地方精灵可见)、Visible Outside Mask(遮罩未覆盖的地方可见) |
Sprite Sort Point | 用于排序时计算精灵与摄像机距离的点,包括:Center(精灵中心)、Pivot(支点)。 |
2.2、精灵编辑器
精灵编辑器用于从一个组合图片中抽取多个不同的精灵。要进行提取,首先要把Sprite Mode属性设为Multiple。
打开精灵编辑器:点击Project中的2D图像,在Inspector中点击Sprite Editor。(只有在Project中选中时才能打开精灵编辑器,并且Texture Type属性设为Sprite。)
精灵编辑器简介:
Slice | 自动化分割图像的选项 |
Apply | 保持更改 |
Revert | 取消更改 |
![]() | 控制材质的像素化/纹理映射,左滑降低精灵材质的分辨率 |
使用精灵编辑器:点击2D图片,通过拖动矩形选择框或者调整SpriteRect的边界,使之包围某个元素。隔离一个元素后,可以在图片的其他部分拖入新的SpriteRect。每个分割元素的SpriteRect有一个Sprite面板,可以设置名称、位置、边框、支点
自动分割:打开Slice将Type设为Automatic,Unity自动把图片分割成多个独立的Sprite。通过Pivot为每个精灵设定支点、自定义支点。通过Method来处理已经存在的精灵切片:Delete Existing(删除全部已有的SpriteRect)、Samrt(若某位置已有切片,选取最好的)、Safe(若某位置已有切片,丢弃新切片)。
栅格分割:打开Slice将Type设为Grid by Cell Size/ Grid by Cell Count,分别设置Pixel Size和Column&Row来确定如何划分。通过Offset来调整划分与图片的偏移。通过Padding来设定SpriteRect与栅格的边距。若勾选Keep Empty Rects,则允许SpriteRect不含任何像素。
2.2.1、自定义轮廓线
将精灵编辑器改为Custom Outline模式,可以使用控制点来创建和定义精灵轮廓的形状。使用Custom Outline编辑器可以减小不必要的透明区域的面积,从而提高性能。
| ![]() |
自动生成:调节Outline Tolerance使轮廓线与图像的紧密程度合适,再点击Generate生成轮廓线。
手动生成:在编辑窗中点击左键拖动,生成4个控制点组成的矩形框。左键点击并拖动,可以移动控制点。将光标放在轮廓线上,出现控制点预览后左击,即可添加控制点。选择控制点并按Del键,将删除控制点。Ctrl+左键选中两个控制点间的轮廓线,可以移动轮廓边缘。
2.2.2、自定义物理形状
将精灵编辑器改为Custom Physical Shape模式,可以编辑精灵的物理形状。物理形状决定了精灵2D Collider的初始形状,也可以通过碰撞体组件进一步优化。Custom Physical Shape窗口与操作与Custom Outline一致。
多个轮廓:精灵的物理形状可以包含多个轮廓。通过多次左击并拖动以生成多个轮廓,每个轮廓可单独调节。(更新精灵的物理形状后,需要点击Collider2D组件的标题并选中Reset,以更新碰撞体的形状。)
2.2.3、辅助纹理
将精灵编辑器改为Secondary Textures模式,可以将其他纹理(2D 图像)与当前编辑的精灵相关联,从而为精灵添加其他效果(例如贴图)。辅助纹理仅精灵渲染器支持。
添加辅助纹理:在Secondary Textures面板中点击“+”进行添加,需要设定名称和纹理,最多可以添加8个辅助纹理。(在面板中选中某个辅助纹理,会暂时隐藏其他纹理。)
删除辅助纹理:点击面板中的“-”进行删除。
2.3、排序组
排序组(Sorting Group)将具有精灵渲染器的游戏对象分在一组,将对这一组精灵渲染器同时渲染,就像对单个游戏对象的渲染。使用排序组可以避免使用具有相同Sorting Layer、Order In Layer值的多精灵角色预制件时,不同角色之间相互交叠(例如多个敌人预制件头和腿交叠)。
创建排序组:新建一个空游戏对象,为其添加Sorting Group组件,再将需要分组的对象设为该排序组对象的子对象。Unity会将同一排序组应用于添加该排序组组件的对象的所有子对象。
设置排序组:排序组组件有Sorting Layer、Order In Layer属性,用于确定排序组在渲染队列中,相对于其他渲染器/游戏对象的优先级。
排序规则:① 所有的排序组、其他的渲染器进行排序;② 若排序组中有粒子系统,该粒子系统将会独立于排序组进行排序;③ 嵌套排序组可以有一个子排序组,首先对子排序组进行内部排序,再对嵌套排序组进行内部排序。
2.4、精灵遮罩
精灵遮罩用于显示/隐藏精灵/精灵组中的部分,仅对使用精灵渲染器的对象有效。
创建精灵遮罩:GameObject -> 2D Object -> Sprite Mask。(精灵遮罩在Scene中默认不显示,在Scene菜单中勾选Sprite Mask可显示。)
Sprite | 被遮罩的精灵,直接拖进或点击右侧圆圈选择。(一般是2D图形对象) |
Alpha Cutoff | 透明度设置 |
Range Start | 精灵遮罩所在的排序图层,设置Sorting Layer、Order In Layer属性。 |
Range End | Mask All:精灵遮罩将作用于Start之后的所有图层;Custom:自定义作用的图层。 |
使用精灵遮罩:首先需要为精灵遮罩分配用于遮罩的Sprite,一般是矩形对象或Image对象。精灵遮罩作用的精灵需要在Sprite Renderer中设定Mask Interraction属性,情况有三种:Visible(总是可见)、Visible Under Mask(与遮罩重叠的部分可见)、Not Visible Under Mask(与遮罩重叠的部分不可见)。
控制精灵遮罩的交互:① 使用排序组,将精灵遮罩加入到排序组中,确保只作用于该排序组中的对象;② 使用精灵遮罩的Custom Range属性,通过勾选该属性,设置Font和Back对应的Sorting Layer、Order In Layer属性,确保精灵遮罩只影响该范围内的精灵。
2.5、精灵图集
精灵图集(Sprite Altas)可以将多个纹理资源(精灵)合并为一个组合纹理的资源,因此可以将多个绘制调用合并为一个绘制调用,使用较小的开销访问。
主精灵图集:Type为Master的精灵图集。
变体精灵图集:Type为Variant的精灵图集,不包含其自身特定的内容,接收主精灵图集中的内容副本作为自己的内容,目的是创建不同分辨率的纹理图集。通过设定Master Altas来设定其主精灵图集,主精灵图集不能是变体。通过设定Scale来调整变体精灵图集中使用的主精灵图集中的纹理的缩放程度。
创建精灵图集:在菜单栏中Asset -> Create -> Sprite Altas,文件后缀为“.spritealtas”。将需要打包的资源(Texture2D、精灵)放入Objects For Packing列表中,点击“+”可以添加资源。
优化精灵图集:① 尽量将经常使用的精灵放在同一个图集中,根据用途将精灵分成几个图集;② 减少精灵图集打包后的空白空间,以减少精灵图集的大小。通过在Inspector中将精灵图集的Max Texture Size属性设为较小值,并点击Pack View打包,若Max Texture Size小于精灵图集纹理的当前尺寸,会自动裁剪多余的空白空间;若大于,则忽略。
使用精灵图集:由于精灵图集可能有不同的分辨率,用于不同性能的电脑,启用所有的精灵图集可能会发生冲突。取消勾选Include In Bulid,将在项目加载时不自动加载该精灵图集。还可以通过分发、后期绑定来解决。
3、瓦片地图
瓦片地图组件是存储和处理瓦片来创建2D平面的系统,并将存储的瓦片信息传递给瓦片地图渲染器、瓦片地图碰撞2D等相关组件。组件属性如下:(使用前需要安装2D Tilemap Editor包)
Animation Frame Rate | 播放瓦片动画的速率 |
Color | 渲染瓦片的颜色,默认为白色(不渲染) |
Orientation | 瓦片平铺的取向方向,分为:XY、XZ、YX、YZ、ZX、ZY、Custom 选择Custom时,将启用Positon、Rotation、Scale等自定义属性。 |
Info | 瓦片地图使用的资源信息,包括:瓦片、精灵 |
3.1、栅格、瓦片地图渲染器、瓦片
Grid是帮助在瓦片地图上摆放瓦片的组件,自动进行瓦片地图的局部坐标与游戏世界的全局坐标的转换。
Cell Size | 栅格中单元格的大小,单位为1个Unity单位。 |
Cell Gap | 单元格直接的间距大小。 |
Cell Layout | 单元格布局,包括Rectangle矩形、Hexagon六边形、Isometric菱形。 |
Cell Swizzle | 将XYZ坐标转换为对应的坐标。 |
瓦片地图渲染器组件是瓦片地图对象的一部分,决定瓦片的渲染方式。
Sort Order | 瓦片地图上瓦片的排序方式。 |
Mode | 渲染器模式,分为Chunk(批量对瓦片进行渲染)、Individual(独立渲染每个瓦片)。 |
瓦片是排列在瓦片地图上的资源,每个瓦片有一个精灵,瓦片地图会在该瓦片的位置上渲染该精灵。
Sprite | 在此瓦片上渲染的精灵,直接将精灵拖进或点击右侧的圆圈图标打开选择器 |
Color | 渲染精灵的颜色,默认为白色(不渲染) |
Collider Type | 瓦片生成的碰撞体形状,分为None(不碰撞)、Sprite(精灵的形状)、Grid(单元格的形状)。 |
3.2、制作瓦片地图
创建瓦片地图、创建瓦片、创建Tile Palette来绘制地图、添加瓦片地图碰撞
创建瓦片地图:GameObject -> 2D Object -> Tilemap。将创建一个Grid父对象,其包含子对象Tilemap,Grid决定了瓦片地图的布局。
创建瓦片:第①种:从精灵自动生成瓦片:在Tile Palette窗口中,直接将精灵/精灵图集拖进窗口,即可自动生成瓦片(选择保存位置即可)。第②种:向Assets种导入纹理:在Project种选择需要导入的图片,并在Inspector中编辑Texture Import Settings,各设定如下。
Texture Type | 设为Sprite (2D and UI)。 |
Sprite Mode | Single:纹理只包含一个精灵;Multiple:纹理包含多个精灵。(与精灵设置一致) |
Pixels Per Unit | PPU 每一个Unity单位代表的像素个数。根据栅格的Cell Size和图片的宽度(Px)来设定。 若Cell Size是(1, 1, 0),图片宽度为100像素,PPU设为100,图片正好填充满栅格。 |
创建瓦片画板:在菜单栏中Window -> 2D -> Tile Palette,在新开的窗口中选择New Palette中的Create New Palette即可创建新的瓦片画板。对瓦片画布进行Grid(栅格形状)、Cell Size(单元格大小)、Sort Mode(渲染器排序模式)、Sort Axis(排序值设置),并设定存储位置。
绘制瓦片地图:将瓦片画板的Active Tilemap设为需要绘制的瓦片地图。利用画板上方的工具进行地图的绘制,包括选择S、移动M、笔刷B、取色器I、框选U、橡皮擦D、油漆桶G等功能。(当有多个瓦片地图时,焦点功能可以聚焦于某一个瓦片地图,而淡出其他游戏对象。在Scene的右下角将Focus On设为瓦片地图、栅格或者无。)
笔刷:笔刷Inspector窗口位于瓦片画板的底部,属性包括笔刷类型、脚本、可改变Z坐标、Z坐标。笔刷类型可以改为自定义的可编程笔刷。有效画笔的更改拾取瓦片的快捷键:
[ | 顺时针旋转 |
] | 逆时针旋转 |
shiht + [ | 沿x轴翻转 |
shift + ] | 沿y轴翻转 |
- (启用可改变Z坐标) | 增大z的位置 |
= (启用可改变Z坐标) | 减小z的位置 |
选择:选择Inspector窗口包含栅格选择、修改瓦片地图两个属性。
① 栅格选择的部分属性:
瓦片/Tile | 选定单元格处的瓦片。若多个相同瓦片则显示名称,不同则显示空白。 |
精灵/Sprite | 分配给瓦片的精灵。(显示方式同瓦片,默认下无法更改) |
偏移/Offset | 以单元格为单位移动瓦片精灵。(瓦片的实际单元格位置不变) |
旋转/Rotation | 在选定位置沿每个轴旋转精灵。(瓦片的实际单元格位置不变) |
缩放/Scale | 在选定位置按每个轴的因子缩放精灵。(瓦片的实际单元格位置不变) |
② 修改瓦片地图的部分属性:
移动/Move | 在Scene中激活移动工具 |
旋转/Rotate | 在Scene中激活旋转工具 |
缩放/Scale | 在Scene中激活缩放工具 |
变形/Transform | 在Scene中激活自由变形工具 |
插入删除行、列/ Insert Delete Row、Column | 插入/删除某几行/列。(点击修改Modify执行) |
瓦片地图碰撞体:Tilemap Collider 2D组件为瓦片地图上的瓦片生成碰撞体,新增/删除瓦片时,会更新碰撞体。该组件将多个瓦片的碰撞体修改操作进行捆绑,从而提高性能。瓦片的Collider Type属性会影响生成的碰撞体的形状。Tilemap Collider 2D的属性包括:
最大瓦片改变数/ Max Tile Change Count | 碰撞体全量重建(不是增量重建)之前,瓦片变更(增加/删除)的最大累计数量。(减小该值可以避免大量更改导致增量重建比全量重建慢。) |
挤压系数/ Extrusion Factor | 每个瓦片的碰撞体的挤压程度,缩小相邻碰撞体的间隙,可以将瓦片碰撞体组合在一起。仅在Used By Composite属性使能时可用。 |
材质/Material | 决定碰撞行为性质(摩擦、反弹等)的物理材质。 |
是否触发器/Is Trigger | 是否作为触发器 |
用作效果器/Used By Effector | 是否作为效果器 |
用作复合体/Used By Composite | 选中该属性将添加Composite Collider 2D组件来生成碰撞体。选中后Tilemap Collider 2D组件中的属性不再使能,而是在Conposite Collider 2D组件中设定这些属性。 |
(Tilemap Collider 2D和Conposite Collider 2D可以同时使用。在把相邻的瓦片碰撞体组合起来的同时,会对相邻的瓦片碰撞体的角、边进行平滑。)
3.3、可编程瓦片
继承自TileBase类或其子类Tile类,并重写RefreshTile()、GetTileData()、GetTileAnimationData()等方法。使用 ScriptableObject.CreateInstance<新的瓦片类名>() 创建该新类的实例,调用 AssetDatabase.CreateAsset() 将此新实例转换为 Editor 中的资源以便重复使用。TileData类的属性包括Sprite、Color、Matrix4x4、GameObject、TileFlags、Tile.ColliderType。
3.4、可编程笔刷
继承自GridBrushBase类或其子类GridBase类,并重写方法Paint()、Erase()、BoxFill()、FloodFill()、Rotate()、Flip()、Select()、Pick()、Move()、MoveStart()、MoveEnd()等。使用 ScriptableObject.CreateInstance<新的笔刷类名>() 创建该新类的实例,调用 AssetDatabase.CreateAsset() 将此新实例转换为 Editor 中的资源以便重复使用。
4、2D物理系统
2D物理系统的组件包括:Rigidbody 2D、Collider 2D、Joint 2D等。
4.1、2D刚体
2D刚体(Rigidbody 2D)是物理引擎将碰撞体与碰撞交互后的移动向关联的组件,2D刚体组件会覆盖变化组件(Transform),并将其更新为2D刚体的位置、旋转。添加到该游戏对象上的其他2D碰撞组件都隐式依附于2D组件。因此,移动对象需要通过移动2D刚体,而不是变换组件或2D碰撞体,避免出现穿插、嵌入等问题。若不添加2D碰撞体,2D刚体不会发生碰撞。
刚体类型/ Body Type (不同类型的刚体的属性不同) | Dynamic:具有全部的属性(有限质量、重力、作用力),所有2D刚体属性都可以使用,最具互动性的、性能成本最高的刚体类型。(D) Kinematic:运动不受重力、作用力影响,仅受到用户明确的控制,通过 Rigidbody2D. MovePosition进行显示重定位。具有无限质量,与质量相关的属性不可用。仅与Dynamic 2D刚体发生碰撞。系统资源需求较低。(K) Static:不会移动的静态2D刚体,具有无限质量,仅与Dynamic 2D刚体发生碰撞。(S) |
材质/Material | 为连接到父2D刚体的所有子2D碰撞体指定材质。2D碰撞体的材质使用顺序为:2D碰撞体自身的Materia属性 > 父2D刚体的材质 > Physics 2D窗口中指定的材质。(D/K/S) |
模拟/Simulated | 选中时,2D刚体及其关联的2D碰撞体、2D关节将与物理系统交互。(D/K/S) |
质量/Mass | 2D刚体的质量。选中Use Auto Mass时将显示灰色,自动使用2D碰撞体的质量。(D) |
Linear Drag | 位移的阻力系数。(D) |
Angular Drag | 旋转的阻力系数。(D) |
Gravity Scale | 重力因子,受重力影响的程度。(D) |
碰撞检测/ Collision Detection | 碰撞检测,定义监测2D碰撞体之间碰撞的方式。(D/K) Discrete:在物理更新期间2D碰撞体可以重叠或穿过,仅在新位置发生碰撞点。 Continuous:在物理系统更新期间2D碰撞体不可重叠,会计算第一个碰撞点并将游戏对象移动到该点。会比Discrete消耗更多的CPU时间。 |
睡眠模式/ Sleeping Mode | 对象在静止时的睡眠方式,以节约资源。(D/K) Never Sleep:禁用睡眠。Start Awake:最初处于唤醒状态。 Start Asleep:最初处于睡眠状态,碰撞后唤醒。 |
插入模式/ Interpolate | 在物理更新期间插入游戏对象移动的方式(可避免运动趋于颠簸)。(D/K) None:不应用平滑。Interpolate:根据前一帧的位置来平滑。 Extrapolate:根据下一帧的预估位置来平滑。 |
限制/ Constraint | 对2D刚体运动的限制。分为冻结位移、冻结旋转。(D/K) |
4.2、2D碰撞体
2D碰撞体的形状一般是近似游戏对象的,在游戏运行时不易察觉,主要分为:圆形Circle、盒形Box、多边形Polygon、非封闭的边界Edge、胶囊形Capsule以及复合碰撞体Composite。
圆形碰撞体:在精灵内部的局部坐标空间内具有确定的位置、半径的圆形碰撞体。
材质/Material | 用于某种特定的碰撞属性(摩擦、弹性)的物理材质。 |
触发器/Is Trigger | 是否用于触发器。 |
效果器/Used By Effector | 是否被附加的2D效果器使用。 |
偏移/Offset | 该碰撞体几何形状的局部偏移。 |
半径/Radius | 圆形的半径(局部空间单位)。 |
盒形碰撞体:在精灵内部的局部坐标空间内具有确定的位置、宽、高的矩形碰撞体。
材质、触发器、效果器、偏移 | 同上。 |
用于复合体/Used By Composite | 是否被附加的2D复合碰撞体使用。当选中时,材质、触发器、效果器和圆角半径这些属性消失,转为由2D复合碰撞体控制。 |
自动平铺/Auto Tiling | 当该精灵的精灵渲染器的Draw Mode被设为Tiled时可用。选中时,将根据精灵的尺寸变化,自动调整2D碰撞体的形状。 |
尺寸/Size | 盒形碰撞体的尺寸大小(局部空间单位)。 |
圆角半径/Edge Radius | 控制矩形圆角的半径(默认为0即不进行圆角)。 |
多边形碰撞体:形状由可自由变形的线段决定(必须封闭)的碰撞体,可以适合精灵的形状。
材质、触发器、效果器、复合体、自动平铺、偏移 | 同上 |
Points | 生成的多边形的信息(不可编辑)。 |
边界碰撞体:形状由可自由变形的线段决定,起点和终点无须封闭,可以适合精灵的形状。
材质、触发器、效果器、偏移、圆角半径、Points | 同上 |
边界碰撞体/Edit Collider | 点击“编辑多段线”按钮(多段线图标)使得碰撞器轮廓可编辑。 编辑:按住点、边并拖动 新建:单击边的空白处 删除:按住Ctrl并点击要删除的点/边 |
胶囊碰撞体:形状是没有角的连续圆边的胶囊,不易被其他碰撞体撞到(圆边面积小),其内部是实心的即胶囊内部检测碰撞。
材质、触发器、效果器、偏移、尺寸 | 同上 |
方向/Direction | 分为垂直Vertical、水平Horizontal。垂直时,胶囊的圆头在垂直方向;水平时,胶囊圆头在水平方向。 |
复合碰撞体:没有内置的形状,而是根据设置的其他碰撞体的顶点合并新的几何图形。附着到复合碰撞体的盒形、多边形碰撞体必须是同一个2D刚体。
材质、触发器、效果器、偏移 | 同上 |
密度/Density | 控制2D刚体的质量计算。设为0时,2D刚体质量计算时忽略所有的2D碰撞体。该选项只有2D刚体的Use Auto Mass使能时可用。 |
几何类型/Geometry Type | 组合从碰撞体提取的顶点的方式。 轮廓/Outlines:空心轮廓的2D碰撞体。(与边界碰撞体类似) 多边形/Polygons:实心多边形的2D碰撞体。(与多边形碰撞体类似) |
生成方式/Generation Type | 同步/Synchronous:更改复合碰撞体或其他碰撞体时,立即生成新碰撞体。 手动/Manual:需要调用CompositeCollider2D.GenerateGeometry的API或点击“再生成几何形按钮”进行请求。 |
顶点距离/Vertex Distance | 设置从碰撞体提取的顶点的间距,小于该值的顶点将被删除。用于控制合并顶点的有效分辨率。 |
圆角半径/Edge Radius | 同上。仅对轮廓/Outlines类型有效。 |
自定义碰撞体:不同通过编辑器配置碰撞体,只能通过PhysicsShapeGroup2D API分配PhysicsShape2D图形来配置碰撞体,之后可通过增删改PhysicsShape2D图形来进一步定义碰撞体。
密度、材质、触发器、效果器、偏移 | 同上 |
自定义形状数量 | 碰撞体使用的PhysicsShape2D图形的个数(只读)。 |
自定义顶点数量 | 碰撞体使用的所有PhysicsShape2D图形中顶点的个数(只读)。 |
4.3、2D物理材质
物理材质用于定义碰撞体碰撞时的摩擦、弹性。通过菜单Assets -> Create -> Physics Material 2D来创建2D物理材质(3D物理材质为Physic Material,结尾没有s)。
摩擦力/friction | 碰撞体的摩擦系数。 |
弹性/Bounciness | 碰撞体的弹性。0表示完全非弹性碰撞;1表示弹性碰撞,没有能量损失。 |
4.3、2D关节
关节Joint用于将游戏对象链接在一起,只能用于附加2D刚体的对象和世界中的固定位置。分为:距离关节、固定关节、摩擦关节、铰链关节、相对关节、滑动关节、弹簧关节、目标关节、车轮关节。
距离关节/Distance:连接两个游戏对象,使这两个对象保持一定距离。
Enable Collision | 是否允许链接的两个对象发生碰撞。 |
Connected Rigid Body | 指定一端连接的游戏对象。 设为None,可将另一端固定在空间中Connected Anchor定义的点。 |
Auto Configure Connected Anchor | 是否自动设置另一端连接的游戏对象的锚点位置。 选中时无需设定Connected Anchor。 |
Anchor | 定义距离关节的端点连接到游戏对象的位置。 |
Connected Anchor | 定义距离关节的另一端连接到游戏对象的位置。 |
Auto Configure Distance | 是否自动将对象间的距离设为距离关节在这两个对象间的距离。选中后,无需设定Distance属性。 |
Distance | 指定距离关节在两个对象间的距离。 |
Max Distance Only | 是否只限制最大距离为Distance,对象仍可以相互靠近。 |
Break Force | 指定破坏该关节的力,破坏后则删除关节。Infinity表示不可破坏。 |
固定关节/Fixed:弹簧式关节,将两个对象固定在相对位置上,保持相对的线偏移、角偏移。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Break Force | 同上 | |
Damping Ratio | 关节的阻尼,介于0~1,值越大,振幅减小越快。 | |
Frequency | 关节振动的频率,介于1~1000000,值越大,关节越硬。设为0则完全没弹性。 | |
Break Torque | 指定破坏该关节的扭矩,破坏后则删除关节。Infinity表示不可破坏。 |
摩擦关节/Friction:将两个对象间的相对速度(线速度/角速度)降为0,即阻碍相对运动。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Break Force、Break Torque | 同上 | |
Max Force | 阻碍相对线性移动的力,值越大,阻碍越大。(最大值为1000000) | |
Max Torque | 阻碍相对旋转的力,值越大,阻碍越大。(最大值为1000000) |
铰链关节/Hinge:将游戏对象连接到空间中的一点,并可以绕该点旋转。可以通过碰撞触发旋转,或电机自动旋转,并可以对旋转进行限制。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Break Force、Break Torque | 同上 | |
Use Motor | 是否使用电机。 | |
Motor Speed | 电机的目标速度(度/秒)。 | |
Maximun Motor Force | 到达目标速度时,电机可以施加的最大扭矩。 | |
Use Limits | 是否限制旋转。 | |
Lower Angle | 旋转弧的下限 | |
Upper Angle | 旋转弧的上限 |
相对关节/Relative:控制两个游戏对象保持一定的相对位置(自定义的位置、角度偏移)。
Enable Collision、Connected Rigid Body、Break Force、Break Torque | 同上 | |
Max Force / Max Torque | 保持对象间相对移动的最大力/扭矩。 | |
Correction Scale | 校正关节以确保正确的行为,介于0~1之间,默认为0.3。 | |
Auto Configure Offset | 自动设置和维持对象间的位置和角度。无需设定线偏移、角偏移。 | |
Linear Offset | 对象间的相对位置(局部空间坐标)。 | |
Angular Offset | 对象间的相对角度。 |
固定关节与相对关节的区别:固定关节使用弹簧来保持相对线偏移、角偏移;而相对关节使用电机。固定关节使用锚点来保持相对的线偏移、角偏移;相对关节没有锚点。
滑动关节/Slider:控制游戏对象沿着空间中的一条线移动,可以响应碰撞,或被电机驱动,并限制在某个范围内。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Use Motor、Motor Speed、Maximun Motor Force、Use Limits、Break Force、Break Torque | 同上 | |
Auto Configure Angle | 是否自动检测对象间的角度,并将其设为关节的角度。选中后无需Angle。 | |
Angle | 对象间的角度。 | |
Lower Translation | 到链接锚点的最小距离。 | |
Upper Translation | 到链接锚点的最大距离。 |
弹簧关节/Spring:将两个对象像弹簧一样链接在一起,对象可以沿轴线振动。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Damping Ratio、Frequency、Break Force | 同上 | |
Auto Configure Distance | 是否自动检测对象间的距离,并将其设为关节的距离。选中后无需Distance。 | |
Distance | 弹簧关节需要维持的对象间的距离。 |
目标关节/Target:弹簧式关节,将对象移动到指定的目标,被链接的不必是2D刚体对象。即关节对对象施加线性力,使得对象与目标之间的距离缩短至0。
Anchor、Max Force、Damping Ratio、Frequency、Break Force | 同上 | |
Target | 刚体的另一端移动的目标位置(世界坐标)。 | |
Auto Configure Target | 选中时自动将关节的一端设为对象的当前位置,且Target会随对象移动而变化。 |
车轮关节/Wheel:模拟车轮和悬架,使对象通过车轮移动,并可以对车轮施加电机。
Enable Collision、Connected Rigid Body、Auto Configure Connected Anchor、Anchor、Connected Anchor、Damping Ratio、Frequency、Use Motor、Motor Speed、Maximum Motor Force、Break Force、Break Torque | 同上 | |
Suspension | 悬架,行为类似于弹簧。 | |
Angle | 悬架的世界移动角度。 |
4.4、2D恒定力
2D恒定力用于向2D刚体施加恒定力,用于给对象一个加速度。每次更新物理引擎时,恒定力会将线性力、扭矩施加于对象。
Force | 施加于 2D 刚体的线性力。 | |
Relative Force | 施加的线性力(相对于 2D 刚体坐标系)。 | |
Torque | 施加于 2D 刚体的扭矩。 |
4.5、2D效果器
通过将2D效果器和碰撞体组件组合,可以在游戏对象发生碰撞时引导物理作用力。分为:平台效果器、表面效果器、点效果器、浮力效果器、区域效果器。用于效果器的碰撞体一般不会设置为触发器,可以碰撞。
平台效果器/Platform:平台效果器实现各种平台行为,如单向碰撞、消除侧向摩擦/弹性等。
Use Collider Mask | 是否使用Collider Mask。若否,则所有碰撞体默认采用全局碰撞矩阵。 | |
Collider Mask | 用于选择与效果器作用的特定层Layer。 | |
Use One Way | 是否使用单向碰撞。 | |
Use One Way Grouping | 是否使用单向碰撞组(确保单向碰撞禁用的所有触点作用于所有碰撞体)。启用该功能有利于多个碰撞体组合。 | |
Surface Arc | 阻止碰撞体通过的中心靠上的弧的度数,弧外的物体都认为是单向碰撞。 | |
Use Side Friction | 是否在在平台两侧使用摩擦。 | |
Use Side Bounce | 是否在在平台两侧使用弹性。 | |
Side Arc | 定义平台侧边的中心靠效果器左/右的弧的度数,弧外的碰撞都认为是侧边行为。 |
表面效果器/Surface:表面效果器沿碰撞体的表面施加切向力,类似于传送带。
Use Collider Mask、Collider Mask | 同上 | |
Speed | 表面的速度。 | |
Speed Variation | 速度Speed的随机增量(随机加减速)。 | |
Force Scale | 效果器沿切面施加的力的因子。0表示不施加力,1表示施加全力。值越低,对象达到指定速度越慢。施加全力容易抵消对象的其他受力。 | |
Use Contract Force | 是否对接触点施力。对接触点施力可以是对象旋转。 | |
Use Friction | 是否使用摩擦。 | |
Use Bounce | 是否使用弹性。 |
点效果器/Point:点效果器通过施加力来吸引/排斥源点(碰撞体/刚体的中心)。目标碰撞体与效果器接触时,才对目标施力。
Use Collider Mask、Collider Mask | 同上 | |
Force Magnitude | 施加力的大小。 | |
Force Variation | 施加力的大小变化。 | |
Distance Scale | 源点与目标之间的距离的因子。通过改变有效距离,来控制施加力的大小。 | |
Drag | 刚体/碰撞体的线性阻力。 | |
Angular Drag | 刚体/碰撞体的角阻力。 | |
Force Source | 力的源点(吸引/排斥目标的位置),分为碰撞体、刚体。 | |
Force Target | 目标对象上被施加力的位置。分为碰撞体(未处于质心将产生扭矩)、刚体。 | |
Force Mode | 力的施加模式。分为Constant(恒定力,忽略距离)、Inverse Linear(力是距离的反线性函数,越近力越大)、Inverse Squared(力是距离的反平方函数,越近力越大,与现实重力相似)。 |
浮力效果器/Buoyancy:定义简单的流体行为,例如浮动、流体阻力、流量,以及流体表面和流体下方的流体行为。
Use Collider Mask、Collider Mask | 同上 | |
Surface Level | 流体的表面位置(世界空间y轴的偏移)。对象高于此线时,不对其施加浮力。 | |
Density | 流体的密度。效果与现实流体类似。 | |
Linear Drag | 流体内部的线性阻力。 | |
Angular Drag | 流体内部的角阻力(阻碍对象旋转)。 | |
Flow Angle | 流体的流动方向与世界空间的角度(度)。流体沿指定方向施加浮力。 | |
Flow Magnitude | 流体的流动力量。为负值时,在Flow Angle的逆向施加浮力。 | |
Flow Variation | 流体的流动力量的随机变化。 |
区域效果器/Area:2D区域效果器在碰撞体定义的区域内施力,可以在任意角度为力配置特定的幅度。
Use Collider Mask、Collider Mask、Drag、Angular Drag | 同上 | |
Use Global Angle | 是否使用全局角度。选中时,将Force Angle定义为全局角度。 | |
Force Angle | 施加的力的角度。 | |
Force Magnitude | 施加的力的大小。 | |
Force Variation | 施加的力的随机变化。 | |
Force Target | 在目标对象上施加力的位置。Collider:目标位置为碰撞体的当前位置。Rigifbody:目标位置为刚体的质心(不会产生扭矩)。 |
111