Unity学习笔记(六)2D

官方文档:2D - Unity 手册


1、2D与3D

        2D与3D的选择

2D3D
全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模式下的配置差异

配置2D3D
图片模式

导入的图片默认为2D图片(Sprites)

不默认为Sprites
Sprite Packer使能非使能
Scene窗口2D3D
实时方向光默认游戏对象没有默认游戏对象有
摄像机默认位置为(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模板中默认安装的包
2D Animation制作精灵动画必要的工具和组件
2D Pixel Perfect提供了像素风相机组件,保证不同分辨率下的清晰度
2D PSD Importer允许从PS导入多层的psd文件来制作精灵
2D Sprite提供了编辑器环境来创建、编辑精灵资源
2D SpriteShape提供了创建生物形体、地方的工具,类似于矢量绘图
2D Tilemap Editor瓦片地图编辑器能够使用精灵瓦片来绘制世界地图

        游戏的基本概念

游戏对象游戏中的每一个对象,包括游戏中的角色、物品,以及放在这些的场所。
脚本脚本相应玩家的输入,并在相应的时间发生相应的事件。
精灵/Sprite2D图形对象,用于所有类型的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 EndMask 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 ModeSingle:纹理只包含一个精灵;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)
质量/Mass2D刚体的质量。选中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

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值