unity物理引擎中之关节和布料

版权声明:未经本人同意不得转载 https://blog.csdn.net/jjjndk1314/article/details/84993493

关节

关节分类

  1. 铰链关节
  2. 固定关节
  3. 弹性关节
  4. 角色关节
  5. 可配置关节

铰链关节(Hinge Joint)
• 铰链关节 将两个刚体 (Rigidbody) 组合在一起,从而将其约束为如同通过铰链连接一样进行移动。它十分适合门,也可用于对链条、钟摆等进行模拟效果。
铰链关节组件属性:

	属性:	                            功能:
•连接体 (Connected Body): 对关节 (Joint) 所依赖的刚体 (Rigidbody) 的可选引用。如果未设置,则关节 (Joint) 连接到世界坐标。
•锚点 (Anchor):   主体围绕其摇摆的轴的位置。
•轴 (Axis):   主体围绕其摇摆的轴的方向。
知识讲解
•使用弹簧 (Use Spring):  启用使用弹簧 属性。
•弹簧 (Spring) :   对象为移动到位所施加的力。
•目标位置 (Target Position):  使刚体 (Rigidbody) 相对于其连接体达到特定角度。
•阻尼 (Damper):   此值越高,对象减慢的幅度越大。
•使用电机 (Use Motor): 启用使用电机 (Use Motor) 时使用的电机 (Motor) 的属性。
•目标速率 (Target Velocity): 对象尝试达到的速度。
•力 (Force):     为达到该速度而应用的力。

铰链关节组件属性:

属性:	功能:
•自由旋转 (Free Spin): 如果启用,则电机从不用于对旋转制动,仅进行加速。
•使用限制 (Use Limits) :如果启用,则铰链角度会限制在最小 (Min) 和最大(Max) 值内。
•限制 (Limits): 启用使用限制 (Use Limits)s 时使用的限制 (Limits) 的属性。
•最小 (Min): 旋转可以达到的最小角度。
•最大 (Max):旋转可以达到的最大角度。
•最小反弹 (Min Bounce): 对象在命中最小停止时反弹的量。
•最大反弹 (Max Bounce): 对象在命中最大停止时反弹的量。
•折断力 (Break Force): 为使此关节 (Joint) 折断而需要应用的力。
•折断扭矩 (Break Torque): 为使此关节 (Joint) 折断而需要应用的扭矩
•启动碰撞Enable Collision : 如果启用,将启用与绑定物体之间的碰撞效果

用铰链关节制作开门效果

  1. 给门框添加刚体(并取消重力),给门添加铰链关节。

  2. 将门框作为门的连接体。
    课堂练习

  3. 调节门铰链关节的位置以及角度。
    在这里插入图片描述

  4. 此时可通过电机或者弹力设置开门效果。
    • 电机方式:启用电机,设置目标速率跟力,并限制开门的角度。
    • 弹性方式:启用弹性,设置弹力大小,并给一个目标位置角度。
    固定关节(Fixed Joint)
    •固定关节将对象移动限制为依赖于其他对象。这在某种程度上类似于父子化 ,不过是通过物理而不是变换层级结构来实现。使用它们的最佳情况是在具有要方便地相互分离的对象,或是连接两个对象的移动而不进行父子化时。
    固定关节组件属性:

属性:				功能:
连接体 (Connected Body): 对关节 (Joint) 所依赖的刚体 (Rigidbody) 的可选引用。如果未设置,则关节 (Joint) 连接到世界坐标。
知识讲解
折断力 (Break Force):	为使此关节 (Joint) 折断而需要应用的力
。
折断扭矩 (Break Torque): 为使此关节 (Joint) 折断而需要应用的扭矩
。
启动碰撞Enable Collision : 如果启用,将启用与绑定物体之间的碰撞效果。

弹性关节(Spring Joint)
• 弹簧关节 将两个刚体 (Rigidbody) 组合在一起,从而将其约束为如同通过弹簧连接一样进行移动效果。 
弹性关节组件属性:

属性:			功能:
连接体 (Connected Body):对关节所依赖的刚体 (Rigidbody) 的可选引用
。
锚点 (Anchor): 对象局部坐标空间中定义关节中心的位置(静止时)。这不是将对象拉向的位置。
知识讲解
弹簧 (Spring): 弹簧的强度。
阻尼 (Damper): 弹簧在处于活动状态时缩减的量。
最小距离 (Min Distance): 大于此值的距离不会使弹簧激活。最大距离 (Max Distance): 小于此值的距离不会使弹簧激活。
折断力 (Break Force): 为使此关节折断而需要应用的力。
折断扭矩 (Break Torque): 为使此关节 折断而需要应用的扭矩。
启动碰撞Enable Collision : 如果启用,将启用与绑定物体之间的碰撞效果

给刚体添加力

rigidbody.AddForce(Vector3.forward*500);
//世界坐标前方(Z轴)方向添加一个500的力。
rigidbody.AddForce(transform.forward*500);
//自己的坐标前方(Z轴)方向添加一个500的力。

布料

Unity4中, 需要对SkinnedMeshRenderer使用SkinnedCloth, 或者对Cloth Renderer使用Interactive Cloth, 很麻烦, 在Unity5中, Cloth合二为一了.
Cloth只能必须和Skinned Mesh Renderer搭配使用, 但是这不代表使用简单的物体时还必须在Max中导出一个带有蒙皮信息的FBX, 其实可以新建一个GameObject然后赋予Cloth组件, 这会自动添加Skinned Mesh Renderer组件, 然后在Skinned Mesh Renderer组件中赋予基本体的Mesh上去并且设置正确的材质也完全可以.
布料可以接受外部影响,但完全不会将影响赋予外部刚体, 换句话说, 布料系统的物理模拟是单向的.

ClothConstraint布料约束
在这里插入图片描述

MaxDistance可以设置每个顶点最大可移动距离,最常用的用法是将不能动的顶点的Max Distance设置为0.
Surface Penetration表面嵌入控制,控制的是顶点最大可以嵌入到Mesh里面的程度. 在布料网格顶点比较稀疏的情况下可以明显对比出差别.
在这里插入图片描述

Visualization这里能够选择当前在Scene视图中预览Max Distance还是Surface Penetration. (这两者二选一), 还能选择是否让操作影响视口背面的顶点ManipulateBackfaces.
Select编辑模式要先通过框选, 或者Shift+点击来多选, 来选中顶点, 然后勾选Max Distance或者Surface Penetration前面的复选框, 代表我现在要改变选中的顶点的值了。然后再在后面的数值里面输入想要的数值就可以了, 要想将当前有数值的顶点设置为Unconstrained, 只需要选中那些带有数值的顶点然后将对应复选框取消勾选即可。

布料属性介绍

Stretching Stiffness—拉扯硬度.

Bending Stiffness—弯曲硬度.

Use Tethers—默认开启, 绳索属性,两个固定点之间的属性

Use Gravity—是否使用世界重力.

Damping—阻尼会应用于每个布料顶点. 要想打造看上去抖动更小的布料, 可以调整这个属性.

External Acceleration—恒定加速度(模拟风效)

Random Acceleration—随机加速度.(模拟风效)

World Velocity Scale与World Acceleration Scale共同组成布料运动时的物理模拟造成的影响比例.

Friction—当布料碰到在这个列表中存在的Collider时所产生的摩擦力, 这只会影响布料的模拟. 上面说过了布料的物理模拟是单向的.

Collision Mass Scale— 碰撞质量

Use Continuous Collision—使用Continuous Collision, 增加消耗, 减少直接穿透碰撞的几率.

Use Virtual Particles—添加一个虚拟粒子碰撞每个三角形来提高稳定性。

Solver Frequency—显然是一个优化参数, 默认120很高了, 可以试着调低一些.

Sleep Threshold—静止阈值.

出于性能的考虑, 可以对Cloth产生影响的Collider只有两种, SphereCollider以及CapsuleCollider, 但是SphereCollider可以赋予两个为一组(当然了还可以只赋予一个, 第二个保持null), 那么通过组合这两个SphereCollider可以出现第三种, Unity会将这组的两个SphereCollider进行相连, 那么就可以有圆锥形的Collider

猜你喜欢

转载自blog.csdn.net/jjjndk1314/article/details/84993493