unity 2d与物理 2
2d铰链关节
它允许精灵绕一个点旋转,同时受到2d刚体物理效果控制。
铰链关节最明显的用法是,利用绕着一个点转的精灵来创造一个门,也可以制作机器组件,钟摆,装了弹簧的暗门,一组添加了铰链关节的精灵组件绑在一起可以组成个锁链。
铰链关节的关键是精灵环绕的这个点,可以是场景中的一个点,也可以是另一个添加了刚体的精灵。
这个点由connected rigid body和其他两个锚点参数决定。
把铰链关节链接到世界范围,或者场景内的一个点时,把connectd rigid body留空。把铰链关节链接到另外一个精灵上时,这个精灵必须有刚体组件。链接的时候需要创建对这个刚体组件的引用。
操作方法之一是直接拖拽想要链接的拥有刚体的精灵,拖拽到检视视图里,connect rigid body这个参数栏。
如果要定义锚点的精确位置,需要设置anchor(精灵要环绕的点,是相对于本地坐标空间的,这个点不需要在精灵的边界内)和connect anchor参数(代表这个点在场景中的位置,这个坐标值是相对于被连接的对象的,当链接到场景中世界位置时,这两个坐标是相对于世界范围内的,当链接到另外一个2d刚体时这些值都是在链接的对象本地坐标内的),这两个参数用来定义一个单独的锚点。
当绕着另外一个精灵旋转时,如果collide connected未选中,精灵将会忽略与被连接精灵的碰撞。
use motor,当选中时,铰链关节会对精灵施加扭矩,旋转它。
motor speed是马达要达到的目标速度,单位是 角度/秒
maimum motor force是马达为达到目标速度可以施加的最大扭矩
use limits,当选中时,铰链关节组件将防止精灵进行完整的旋转。
low angle代表旋转限制的最小角度。
upper angle代表旋转限制的最大角度。
可以用这种方法制造暗门:利用限制条件防止暗门移动的太远,利用马达使暗门回复起始位置。
chain:连接一组精灵,每个都添加刚体组件,作为链环。
每个环都用铰链关节链接到上面的环上,注意collide connected是未选中的。然后到下面加一些重物,达成自己想要的效果。
一个只限制最大距离的distance joint 2d(距离关节)组件被添加到这个重物上,可以限制其移动时,与上端链环的最大距离。
2d距离关节
允许两个受到2d刚体物理控制的精灵,相互依附,并保持一个特定的距离。
距离关节将添加一个强制的限制,而不是利用一个平缓的力来维持指定的距离。
connected rigidbody属性是对所连接对象的刚体组件的引用,这里留空,代表世界范围内的一个点。
可以设置anchor和connected anchor参数,这两个参数用来分别定义一个单独的锚点。
当和另外一个精灵进行旋转时,可以确定精灵与被连接精灵是否相互碰撞。
distance代表两个精灵之间需要利用关节保持的距离。
max distance only将只保持最大距离,不选中的话,对象之间的距离会是固定的。
可以仔细观察一下场景视图的gizmo,有一条连接两个锚点的线,有一个垂直于线上的标记,指示了场景中的距离数值,代表了关节需要在两个精灵间保持的距离。
当两个精灵移动到一个关节无法保持固定距离的位置,在这些情况下,引擎将对精灵施加作用力直到他们回到固定距离。
2d弹簧关节
利用它和带有2d刚体组件的游戏对象,可以创建2d的弹簧,添加这个组件到需要的游戏对象时,可以通过组件菜单的physics 2d类别。
你可以添加弹簧关节组件到希望被弹簧所影响的某个对象上,但是这个对象同时需要被锚定到场景里某点。这个点由connected rigidbody参数决定。
可以设置anchor和connected anchor参数,这两个参数用来定义两个不同的锚点。
distance代表了两点间的距离。
frequency代表了弹簧的强度值。
damping ratio取值范围是0-1,它允许你抑制弹簧的反应,减缓其对游戏对象的影响。
弹跳和滑动
2D中,由四个部分一起来完成弹力球的制作。
代表球的精灵图像。
为图像在场景中提供物理实体的碰撞体组件。
附加到碰撞体组件的一种2D物理材质,用来定义摩擦系数和弹跳系数。
还有一个2d刚体组件,使球可以被物理作用力影响,包括重力等,可以参与物理事件(碰撞,触发器.etc)。
制作一个弹力球时,先添加一个精灵图像到场景中,添加2d碰撞体组件到对象上,添加2d刚体组件。
添加2d物理素材,2d物理素材会放在项目视图里。创建2d物理材质的一种方法是 选择“create”-physics 2d material,这会在项目视图里创建一个新的物理材质,2d物理材质有两种属性friction(摩擦系数)和bounciness(弹跳系数),弹力球需要一个小的摩擦系数和一个大的弹跳系数。调整完后将物理材质拖拽放到2d碰撞体的materials参数栏。现在球不光会相应物理作用力以及其它场景中的碰撞体,还会在响应过程中产生弹跳行为。
制作一个很滑的冰面时,2d刚体组件不是必需的,除非这个平台需要移动,其它的地方和弹力球的设置大同小异,只是弹跳系数和摩擦系数要调小。
如果平台需要移动,那么最好添加一个刚体组件到游戏对象上,同时标注运动学。
区域效果器
可以对游戏对象施加力的作用。
在使用前需要给游戏对象设置碰撞器,选上“是触发器”,“由效果器使用”。
可以调整力度,决定了这个效果器对游戏对象施加的力的大小。
可以调节角度,力角度相对于世界范围内计算,而不是对象的本地角度:
其数值按照逆时针增加:0-正右方,90-正上方,180-正左方。270-正下方。
点效果器
官方教程这部分有涉及C#脚本,鉴于我脚本知识很疲弱,先把坑留到这里吧。