Unity3D官方文档 2D游戏的起始3:2D物理续 Collider、关节、效应器
之前介绍了刚体组件,这边要把剩下物理组件介绍完。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 Speed:Motor本身的速度,在不受力情况下一直作用的速度;
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游戏的起始系列: