插件(二)ShatterToolkit初探

ShatterToolkit是一款适用于Unity3D的模型粉碎插件,支持切割、击毁等功能。插件分为操作层、中间层和底层,通过射线、平面信息等实现模型的粉碎效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ShatterToolkit是针对unity3d编写的一款粉碎模型的插件,应该在当时切西瓜游戏很火的时候就已经出现了,不过因为能力不够没想着去接触,现在刚好有空就去下载下来看看。

免费的下载地址仅供学习http://download.youkuaiyun.com/detail/l364244206/8411949

 

直奔主题将插件导入到unity中,打开切西瓜的场景UvMapping,用鼠标划几下完好的西瓜被切成一块块的了

插件(二)ShatterToolkit初探
再来分析插件的功能,我们可以将代码划分为三层:

 

1.操作层

菜单MouseForce:

通过这个脚本可以对模型进行拖拽,根据当前鼠标左键按下的位置和鼠标移动后的位置在单位增量时间内的差值计算力度,并将这个力通过AddForceAtPosition附加给带有刚体属性的对象。

菜单MouseSplit:
这个脚本用于对模型的切割,按下当前鼠标左键拖动鼠标然后抬起,记录开始位置和结束位置,一帧内在屏幕空间从开始点到结束点默认相等划分为10个点(数值越大敏感度越高性能越差),并向世界坐标发射10条射线,根据【射线方向】和【划线方向】叉乘得到【法线】,通过【法线】和【当前射线点】就能确定一个【平面】,最后将这个【平面信息】传给【ShatterTool类】进行切割处理。

菜单MouseShatter:

这个脚本用于击毁模型,直接点击模型就可以将模型粉碎,上层只是通过屏幕向世界发射一条射线并传给【ShatterTool类】进行粉碎模型。

 

2.中间层

脚本ShatterTool:

其中两个函数对外:

Split(Plane[]planes)函数将获取的【面板信息】变换到【对象空间】然后通过Hull类进行切割,最后生成两个新切割后的对象。

Shatter(Vector3point)函数通过获取的【击打点】并随机生成【法线方向】创建不同的【面板信息】,然后再调用Split生成多个切割碎片,达到粉碎模型的效果。

脚本UvMapper:

它的基类有WorldUvMapper和TargetUvMapper都是设置切割面的纹理信息,WorldUvMapper设置切割面的uv缩放,TargetUvMapper比较灵活,可以设置uv起点和大小等。

 

3.底层

脚本Hull等:

之所以称Hull为底层,是因为它通过【面板panel信息】将模型进行拆分然后重组顶点,里面封装了一系列比较复杂的算法。

 

贴上一段中间连接层代码:

public void Split(Plane[] planes)
{
     if  (sendPreSplitMessage)
     {
         // 切割之前的操作
         SendMessage( "PreSplit" planes, SendMessageOptions.DontRequireReceiver);
     }
         
     if  (planes !=  null  && planes.Length && hull !=  null  && !hull.IsEmpty)
     {
         if  (uvMapper !=  null )
         {
             Plane[] localPlanes;
             // 创建本地面板信息
             CreateLocalPlanes(planes, out localPlanes);
 
             IList newHulls;
             // 通过本地面板创建新的分割对象
             CreateNewHulls(localPlanes, out newHulls);
                 
             GameObject[] newGameObjects;
             // 通过分割对象创建新的游戏对象
             CreateNewGameObjects(newHulls, out newGameObjects);
 
             if  (sendPostSplitMessage)
             {
                 // 切割之后的操作
                 SendMessage( "PostSplit" newGameObjects, SendMessageOptions.DontRequireReceiver);
             }
             // 销毁当前对象
             Destroy(gameObject);
         }
         else
         {
             Debug.LogWarning(name  has no UvMapper attached! Please attach UvMapper to use the ShatterTool." this );
         }
     }
}
 

 

如需商业用途或想了解更多
请支持原作者:http://gustavolsson.squarespace.com/shatter-toolkit/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值