1、简介
https://assetstore.unity.com/packages/tools/physics/obi-rope-55579 Obi 是一款基于粒子的高级物理引擎,可模拟各种可变形材料的行为。
如果有 Burst、Jobs、Collections 和 Mathematics 资源包,它可以兼容所有 Burst 可以编译的平台。如果没有这些资源包,它仍可以运行,但仅限于 Windows、Mac、Linux、iOS 和 Android 平台。
使用 Obi Rope,你可以在几秒内创建绳索和杆子,同时完全控制它们的形状和行为:导向粒子技术可以对杆子使用不同的扭转/扭曲特效。绳索更加轻量化,并且能裁剪/调整尺寸。两者都可以与环境发生碰撞以及相互碰撞,也可以附着在坚硬的身体上。
2、安装
将安装包拖拽到项目面板的assets之后松开,弹出Obi Rope的导入界面。
3、示例测试
obi rope自带如下7个示例。 在项目界面中打开Sample Scenes文件夹,鼠标双击某一个示例,即可打开对应的场景进行测试。
3.1 Chains
编辑界面: 运行界面: 对象树:
3.2 Crane
编辑界面:
运行界面: 对象树:
3.3 ElectricalWires
编辑界面:
运行界面:
3.4 FreightLift
编辑界面: 运行界面:
3.5 Rocker
编辑界面:
运行界面:
3.6 RopeAndJoints
编辑界面:
运行界面:
3.7 RopeShowcase
编辑界面:
运行界面:
4、简单测试
4.1 新建绳子对象
- 新建一个工程或场景.
- 在层级树上添加一个Obi Rope对象,如下:
绳子的属性如下:
4.2 修改绳子材质
- 修改属性Mesh Renderer - Materials Material改变绳子的材质: 鼠标点击Element 0后面的按钮,选择一个绳子的材质。
三维场景中的绳子如下:
4.3 修改绳子贴图UV
Initialize: 可以生成绳子
thickness scale: 改变绳子的粗细
UV scale: 改变绳子贴图UV
- 修改属性Obi Rope - UV scale(纹理参数) 修改Obi Rope属性分页下的参数UV scale中的Y为10.
绳子上的材质效果修改如下:
4.4 修改绳子粗细
- 修改属性Obi Rope - Thickness(绳子的粗细) 修改为0.1,然后点击初始化按钮Initialize,如下: 绳子变化如下:
4.5 固定绳子上粒子点
绳子的一端一般需要固定到某个物体上或者墙上。 我们点击Obi Rope的Edit particels 按钮。Editor面板中绳子会变成如下所示的一堆蓝色点。这些蓝色点是绳子的信息点,控制这绳子的固定,handle,还有和物体的绑定。还有绳子平滑度的信息。
- 固定绳子上的一个粒子点 点击Edit particles 进入绳子的编辑状态,此时绳子上会出现很多蓝色的点。 点击笔刷工具可以对点进行选取某一个或某些关键点。 按住Shift可以取消选点,选中的点可以进行。
点击最上面的编辑点,然后点击编辑栏,点击Inverse selection–点击下方fix selected,此时运行该动画,便可实现柔性随鼠标拖动进行摆动的效果。 Handle的形式固定的点会对应生成一个Obi Handle。我们程序可以控制handle点,来让绳子运动. 运行如下:
4.6 添加绳子控制点
通过Add control point可以增加绳子控制点,来改变绳子的形状。 (1)取消粒子编辑框。 (2)点击按钮“Add control point”,多了一个控制点如下: 然后点击绳子生成按钮Initialize,自动生成了一段绳子,如下。 当然也可以通过移动或旋转绳子控制点,来改变绳子的形状。
4.7 修改其他属性
绳子的弹性、弯曲度等相关属性的设置 在Obi Rope上找到Obi Solver Distance Constraint Parameters 可以设置绳子的弹性 Bending Constraint Parameters 可以设置绳子的弯曲度
- Obi solver的一般参数:
1、MaxParticles(最大粒子数):为粒子池分配的内存,ObiActor会在需要时借用粒子,如果此时值为5000,每个ObiActor使用1000个粒子,则这个ObiSolver最多可以模拟 5 个角色。
2、改为增加分步骤,场景中碰撞过多的话,可以尝试减少分步骤。但是这个参数是之前旧版本的,在当前版本是没有的。
3、Simulate With Invisible( 隐形时模拟 ): 当所有相机看不见时,这个ObiSolver是否应该保持模拟?
4、Simulate In Local Space(在当地空间模拟):切换局部和世界空间。
5、Simulate Order(模拟选择):选择在哪个函数里更新该物理模拟。
- Obi solver的Parameters参数:
1、Mode:模型类型(3D,2D)
2、Interpolation:有无差值(没有,有)
3、Gravity:重力(设置XYZ三轴向上的重力值)
4、Damping:阻尼系数(0-1)//控制绳索柔软度
5、Advection Radius:平流半径
6、Sleep Threshold:睡眠阈值//控制绳索的灵活度,后节与前节之间的动作连接幅度强度,值越小绳子越灵活,值越大绳子越硬
- Obi solver的约束参数:每个约束都有相同的4个参数
1、Enabled: 功能为是否启用,用来判断是否更新和与该约束相关的物理模拟,默认是开启的
2、Evaluation Order: 选择模式,顺序和并行
3、Iterations:迭代,每个子步骤应该执行多少次该物理模拟 值越大物理模拟越精细。
4、SOR Factor:SOR代表连续过度放松。当试图满足约束时,改善收敛的一种方法是“过度放松”约束。也就是说,如果向左移动粒子2个单位将满足现在的约束,为什么不将它移动3个单位呢?这正是这个因素的用途。1是默认值,根本不执行过度放松。2是最大值,允许您在约束条件下执行两倍的松弛。高值可用于帮助加速两种模式(顺序或并行)中的任何一种的收敛,但请记住,模拟稳定性可能会降低。
4.8 添加碰撞物体
有碰撞的物体上需要添加Obi Collider
(1)新建一个立方体对象 (2)修改立方体的属性如下: 改立方体的位置,大小,材质等。
(3)给立方体添加一个组件:obi collider (4)预览如下: 绳子落在了立方体做的地面上。
4.8 绑定物体到绳子上
首先创建一个Cube碰撞体,然后添加Obi Collider组件,然后这个Cube就可以和绳子进行碰撞交互了。还可以给Cube添加Rigidobject刚体,让Cube拥有重力。 然后我们通过点击绳子最下部的蓝色信息点,在绳子的Inspector面板找到Obi Pin Constraints组件,点击Add Pin Constraint按钮,然后,我们拖拽Cube到Pinned To参数上即可实现绳子和Cube的绑定。
(1)新建一个立方体对象Cube2,添加Obi Collider组件,如下: (2)Obi Rope属性面板中点击Edit particles按钮,显示蓝色的信息点,鼠标选中其中一个点,接着点击按钮Add Pin Constraint,如下: (3)在Obi Pin Constrains属性面板中将Pinned to的值设为上面新建的立方体对象Cube2。同时修改Offset的xyz的值为0,如下图所示。 (4)预览如下: (5)给立方体对象Cude2添加刚体组件RigidBody,这样立方体cude2有了重力会往下掉。同时将绳子的其他某一个信息点设为固定点。 (6)运行如下:
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!