Unity3D官方文档 2D游戏的起始3:2D物理续 Collider、关节、效应器

发表于2017-11-06
评论0 4.7k浏览

之前介绍了刚体组件,这边要把剩下物理组件介绍完。Collider大家平时都在用,关节可能少点,实现特定功能会用到,至于效应器,大家跟我一起来看看这个东西有什么作用吧。

 

Collider 2D:

用于定义2D物体的形状,使刚体与刚体之间可以发生碰撞,这边Collider需要根据需求来设定,一般简单的Box、Circle已经足够用于游戏的物理碰撞。

 

刚体使用Auto Mass的情况会自动根据Collider形状的大小来生成质量,这一点和浮力效应器能够很好的配合。

 

♦ Box Collider 2

个人感觉这个Box最常用,就以这个来作为讲解的范例。反正就是一个矩形的碰撞盒嘛。



Edit Collider按钮:这个按钮要介绍的,很好用,能直接在Scene窗口下调整碰撞盒的大小。

 

Density:密度,影响刚体设置自动生成质量,当然这个只在刚体设置了Use Auto Mass;

 

Material:2D的物理材质,不多说了,详细的请看上一章;

 

Is Trigger:该Collider是否用于Trigger;

 

Used By Effector:该Collider是否用于效应器;

 

Used by Composite:该Collider是否是Composite Collider 2D的一部分,勾选该框之后,该Collider的其他属性会被忽略,因为Unity会以Composite Collider 2D的属性做为该Collider的属性;

 

Auto Tiling:当Sprite Renderer的Draw Mode设置为Tiled的时候,可以勾选该选项,以自动适应Sprite的平铺;

 

Offset:调整Collider的偏移;

 

Size:调整Collider的宽和高;

 

Edge:在Collider的周围生成一圈圆形的边缘,用于增加Collider的范围,默认为0。

 

♦ Circle Collider 2D、Capsule Collider 2D

圆和胶囊的Collider,形状不一样,其他的与上面一样。

 

♦ Polygon Collider 2D、Edge Collider 2D

Polygon和Edge最大的区别,Polygon必须是封闭的,而Edge不用,他们都可以按照点位自定义形状,其他的与上面一样。

 

Polygon在2017版中可以在Sprite Editor中编辑然后默认生成了,但是还是没有提供直接生成和Mesh对应的碰撞盒。

 

♦ Composite Collider 2D

复合碰撞体,它可以结合其他的碰撞体生成一个大的碰撞体。与上面的属性相比多了下面几个:

 

Geometry Type:几何形状类型

    1.Outlines,线性形式,类似Edge Collider 2D;

    2.Polygons,多边形形式,类似Polygon Collider 2D。

 

Generation Type:产生的类型

    1.Synchronous,只要其他的Collider一发生变化,该几何形状就会立刻发生变化;

    2.Manual,使用CompositeCollider2D.GenerateGeometry()方法才能生成,或者点击Regenerate Geometry按钮。

 

Vertex Distance:顶点与顶点之间的最小间距,小于该间距的点只会保留一个。

 

2D Joints:

关节用于定义刚体与刚体之间连接的效果,数量很多,我在介绍一些关键的属性后,会说明各个关节的作用,有需要的自己实践一下。

 

♦ Distance Joint 2D 距离关节

距离关节保持两个Rigidbody一直在同一个距离,需要注意的是该关节不能作用旋转力,如果需要旋转力的话请使用一个没有弹力的spring关节:



Enable Collision:关节启用碰撞;

 

Connected Rigidbody:需要连接的Rigidbody,如果设置为None,则连接点为Connected Anchor;

 

Auto Configure Connected Anchor:勾选该选项后,连接的锚点会自动配置(感觉不好用);

 

Anchor:当前GameObject的锚点;

 

Connected Anchor:被连接的GameObject的锚点;

 

Auto Configure Distance:自动配置当前关节的距离,运行中,取消勾选该选项后,关节就会固定两个刚体;

 

Distance:关节的距离;

 

Max Distance Only:勾选该选项后,关节连接的两个刚体之间的距离可以小于Distance。大于Distance距离时才会产生拖动效果;

 

Break Force:作用多少力之后关节会被破坏而删除。

 

应用举例:没选Max Distance Only,汽车轮子之间的固定距离;勾选Max Distance Only,类似悠悠球。

 

♦ Fixed Joint 2D 固定关节

该关节会将两个刚体固定到同一距离和方向,而Distance Joint 2D的话方向不会固定。接下来介绍的属性只会说一些上面没有说的属性:

 

Damping Ratio:值只能在0到1,决定是抑制震动的力,值越到抑制力越大;

 

Frequency:决定震动的强度,值越大震动的越快,设置个30看着效果就不错。

 

♦ Relative Joint 2D 相对关节

类似于固定关节,所以提到前面来先讲,固定关节是固定在另一个点上进行震动,而相对关节是关节角度不会变化,另一个连接点追着固定点进行震动。

 

Max Force:设置对线性震动进行抵消的力;

 

Max Torque:设置对扭转震动进行抵消的力。

 

固定关节是弹簧的实现、与锚点相关、但不能修改实时速度和角度;相对关节是最大力和扭力的实现、与锚点无关、可以修改实时速度和角度。

 

应用:太空游戏中额外的电池需要滞后的跟随飞船;相机跟随玩家需要用可配置的力来追踪。

 

♦ Friction Joint 2D 摩擦关节

该关节是让两个点尽量保持一个相对的距离和方向:如果另一个点是固定点,那该刚体会慢慢减慢速度直到静止;如果另一个点会运动,则两个最终会保持一个相对位置持续向一个方向运动,但保证了他们俩之间是相对静止的。

 

属性上没什么特别的都是之前做过的。应用上可以做一个平台,玩家跳到上面后,平台有向下移动的趋势。

 

♦ Hinge Joint 2D 铰链关节

铰链关节感觉是个非常常用的关节,它可以用于一个刚体绕着某个点旋转的效果,其中Connected Anchor指明绕着世界坐标中的哪个点旋转,Anchor指明当前刚体的旋转点。它可以被动的受力旋转,也可以设置Motor Speed本身就旋转,更加可以利用Limits属性设置旋转的最大最小角度。

 

Auto Configure Connected这个选框没什么用,一般直接调整Anchor就好,Connected Anchor保持(0, 0),下图是实现一个链子的一个铰链关节。



Use Motor:是否使用铰链的Motor功能;

 

Motor SpeedMotor本身的速度,在不受力情况下一直作用的速度;

 

Maximum Motor Force:最大能达到的速度;

 

Use Limits:使用限制模式;

 

Lower Angle:限制模式下的最小角度;

 

Upper Angle:限制模式下的最大角度。

 

应用:

1.比如一扇撞开后自动关闭的门,使用限制模式调整门的最大最小旋转角度、在使用Motor Speed产生一个自旋转的速度;

2.剪刀、跷跷板、轮子将锚点点固定到其他物体上的情况;

3.链子也可以使用多个铰链关节来实现。

 

    ♦ Slider Joint 2D 滑块关节

铰链关节的移动版,铰链是固定在一个点旋转,而滑块是固定在一个方向内滑动,属性跟铰链也差不多,就不再多说了。

 

可以实现类似滑动门这样的效果,物体响应碰撞或者力沿着一个固定的方向自由自动,当然也可以启用限制模式和Motor模式。

 

♦ Spring Joint 2D 弹簧关节

类似于距离关节,但它表现的效果类似于弹簧。如果需要一个僵硬不动的弹簧,设置Frequency、Damping Ratio一个高数值。

 

技术上来讲Frequency为0、Damping Ratio为1时跟距离关节是一样的。

 

♦ Target Joint 2D 目标关节

相对关节的简化版,刚体会以弹簧的行为移动到Target点。用作鼠标点击物体拖动到一个其他点的效果。

 

♦ Wheel Joint 2D 车轮关节

正如名称所示,用于模拟车轮。测试下来,Connected Rigidbody必须要设定为被运送的车体,不然即使设定了Motor,车轮也不会转,车体最好设定冻结z轴旋转,这样就不会翻车了,即使是独轮车都能运作。

 

车轮关节是滑块关节和铰链关节的组合,能非常方便的实现车轮效果。它与3D中的车轮碰撞器不同,车轮碰撞器模拟的是悬挂,只提供牵引力,轮子旋转只是动画效果。

 

♦ Constant Force 2D

这个不是关节,在我们给Rigidbody附加里的时候会使用AddForce函数,该组件用于附加一个恒力,给Rigidbody一直提供动力:



仔细一看3D物理中也有类似的实现,通过这个感觉可以实现几种重力共存的效果,不过这个组件自己写一个也不难。

 

好了这一节的内容就介绍到这里了,下面是效应器。

 

Effector 2D:

效应器是什么东西?上面不是说用Constant Force 2D实现一个多重利共存的效果嘛,更好的实现方式就是使用效应器,它能给一定区域内的物体同时作用一个力。

 

♦ Area Effector 2D 区域效应器

区域效应器对制定的一个2D区域施加一个力,注意区域使用Collider 2D来制定,Collider 2D上需要勾选Used By Effector。

 

还有一个默认的细节需要注意,Collider 2D上除了要勾选Used By Effector,还要勾选Is Trigger,否则会和其他物体发生碰撞。



Use Collider Mask:是否使用Collider Mask属性,默认状态下效应器对所有刚体都会施加里;

 

Collider Mask:选择Layer,用于指定会被效应器影响的物体;

 

Use Global Angle:勾选时,Angle属性会以全局形式进行处理;

 

Force Angle:力的角度;

 

Force Magnitude:力的大小;

 

Force Variation:力变化的大小,用于给力增加一个随机量;

 

Drag:线性力的阻力;

 

Angular:角速度的阻力;

 

Force Target:

    1.Collider,当Collider2D的中心没有放在质心时会产生扭力;

    2.Rigidbody,不会产生扭力。

 

♦ Buoyancy Effector 2D 浮力效应器

浮力效应器定义了简单的流体行为,设置流体的阻力、浮动和流动。甚至可以控制流动发生在流体下面。

 

Surface Level:当刚体完全小于该表面时,区域才会施加浮力;

 

Density:密度,用于计算产生力的效果。

 

♦ Point Effector 2D 点效应器

以当前区域Transform的坐标为中心,产生吸引力或排斥力,可以做到类似小行星围绕地球旋转的效果。

 

♦ Platform Effector 2D 平台效应器

首先使用该效应器需要去除Is Trigger选项,平台效应器可以实现单向碰撞、去除边侧碰撞的效果。

 

Use One Way:是否允许一方通行;

 

Use One Way Grouping:当多个平台效应器启用一方通行时,启用该值;

 

Use Side Friction:边侧是否使用摩擦力;

 

Use Side Bounde:边侧是否使用弹力;

 

Side Arc:边侧的角度,只有法线与其垂直的才算是边侧。

 

♦ Surface Effector 2D 表面效应器

首先使用该效应器需要去除Is Trigger选项,表面效应器可以实现传送带的效果。

 

Force Scale:允许调整施加里的比例,最好不要设为1,不然会抵消掉跳跃移动等力。

 

2D官方文档的研究就到这里。


【Unity3D官方文档】2D游戏的起始系列:

1.2D与3D的区别、细节,Sprite设置处理

2.2D物理 全局设置与刚体



如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: