ObiRope的一些笔记

之前用ObiRope做的两个小功能,分别是绳子剪裁以及绳子拖拽。但是项目没做完,公司黄了,记录一下相关的笔记。

ObiRope下载
链接:https://pan.baidu.com/s/1D6330eonD4SALxTOJ2a_bg
提取码:hg2o


ObiRope
在这里插入图片描述
这个是控制绳子的生成器,需要挂在ObiSolver下进行。需要挂在目标蓝图,使用了相同蓝图,EditPath所有的ObiRope都会一起发生修改。

在这里插入图片描述

使用EditPath可以修改绳子的初始形状,并且这个修改不是针对单个ObiRope而是针对ObiRope使用的蓝图。
通过增加控制点,可以让绳子分成X个段落,并且控制点可以合其他组件进行联动,控制绳子样式。控制点除了控制绳子的粒子位置,还能控制粒子方向其中name是用来在Attachment下的Group的一个表示,Phase则是物理相关,相同的Phase的对象不会触发物理,而不相同的对象则会触发物理。

在这里插入图片描述
ThickNess控制粒子大小,表示于物理以及渲染
Resolution粒子间隔,1为0间隔。数值越小,间隔越大
PooledParticles为备用粒子,用延长绳子,而初始的粒子数则受限于你拉的控制点长度和Resolution


Obi Particle Attachment

这是一个控制绳子上粒子组固定对象的一个组件,Target为这个粒子组会放在这个Transform上,并且响应相关的效果。Static表示这个点是固定的,绳子并不会被这个东西拉动,反而会被这个东西固定起来。

如果是Dynamic的话则这个点会受到物理效果,物体的重力绳子会对这个挂在的Target产生物理效果,但是Target需要有刚体,并且刚体不是静止的。

只要一动绑上一段的的Transform就可以对绳子进行移动了


ObiCursor
在这里插入图片描述
这个组件可以控制绳子的伸长缩短,虽然不加的时候,拉取绳子两段的Attachment绑定的也会拉长绳子,但是这时候绳子只是被【拉伸】不是被【延长】,并且里面的粒子排布会变宽,就会造成穿透等现象。
使用Cursor,可以【延长】绳子,调用它自己的 cursor.ChangeLength(length);的方法,可以调整绳子的长短,并且这个延长,增加绳子的粒子。会在SourceMu调整粒子和CursorMu来调整绳子吐出来的地方和绳子收回去的地方。
在这里插入图片描述
但是这个Cursor新增的粒子会受到蓝图的PooledParticles的粒子总数控制,超过这个总数的粒子,就不会继续延长,而是变成【拉伸】


    restLength = rope.restLength;			//稳定下来的时候的长度
    length = rope.CalculateLength();	//现在绳子的长度
    element = rope.elements.Count;		//element的个数
    partical = rope.particleCount;			//这个绳子现在有多少个粒子
    绳子

通过上面参数可以获取到当前绳子的相关状况,RestLength实则为你绳子长度,除了使用cursor.ChangeLength(length)进行长度修改之外,普通的拉伸控制点距离是不会让这个数值改变的。

CalculateLength(); 这是会计算并返回现在绳子的实际长度,这个数会把你拉伸之后的长度给复制进去

element,实则是粒子组,为是一个数据结构,有这两个粒子在总一个池子里面的索引,以及他们之间的距离所组成的一个数据结构


切割

ObiRope实际上的粒子是在Solver上进行计算的,而并不是由ObiRope进行一个处理,而一般粒子都是通过Solver粒子组的所以所表示

    [System.Serializable]
    public class ObiStructuralElement
    {
        public int particle1;
        public int particle2;
        public float restLength;
        public float constraintForce;
        public float tearResistance;
    }

是这样的一个数据结构。

可以通过这个段代码来遍历粒子的位置

       foreach(var item in rope.elements)
        {
            int p1 = item.particle1;
            int p2 = item.particle2;

            Vector3 pos1 = rope.GetParticlePosition(p1);
            Vector3 pos2 = rope.GetParticlePosition(p2);
        }

可以通过上面的这个方法,找到你要断开的一个靠近的一个电,并且获取到他对应的elements
使用这个代码让绳子在指定位置断裂

rope.Tear(element)							//切割指定的element并断开
Obi是一种先进的基于粒子的物理引擎,能够模拟各种可变形材料的行为。 取决于Burst,Jobs和Mathematics软件包,以便与Burst可以编译的所有平台兼容。没有这些软件包,它仍然可以运行,但只能在Windows,Mac,Linux,iOS和Android中运行。 使用Obi Rope,您可以在几秒钟内创建绳索和杆,并完全控制它们的形状和行为:定向粒子技术使杆能够提供扭转/扭曲效果。绳索重量更轻,可以切割/调整大小。两者都可能与环境以及彼此碰撞,并且可以附着到刚体上。 与其他绳索解决方案不同,该系统不是基于刚体和接头。它基于XPBD粒子,使其更加轻巧,细致且无条件稳定。 特征: -使用样条线进行非线性,无损的绳索编辑。立即获得有关您的绳索在编辑时的外观的反馈! -使用样条线生成过程平滑网格,并带有切线空间更新和法线贴图支持。无需手动为绳索生成几何图形。 -自适应的基于曲率的实时网格抽取:与弯曲的相比,绳索的直线部分可以生成更简单的几何形状。 -在运行时更改绳索长度。 -可撕裂/可切割的绳索。 -闭环。 -双向刚体相互作用。 -模块化求解器:不要浪费性能,仅使用绳索需要的约束即可。 -每个模块可调整的求解器迭代计数。 -独立的拉伸/弯曲刚度。 -易于使用的编辑器粒子工具:选择,笔刷选择,画笔,属性平滑...- 支持所有标准Unity碰撞器。 -自动摄像机剔除:不可见的绳索不会更新其模拟。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值