也可以用Dynamic Bone,不过这个插件更新,而且已经用Jobs优化过了,DB的话得自己优化

官方文档

安装

  1. 安装Burst,用于将C#编译成native code

  2. 安装Collections,几个必须的高效容器

  3. 安装Jobs

    2021以下的Unity可以在Package Mangaer里找到

    2021以上的需要通过Git Url添加 com.unity.jobs

    img

  4. 安装Entites(可选,之后可以加入MAGICACLOTH_ECS宏,开启插件ECS)
  5. 导入插件

简单说明

MagicaPhysicsManager

img相当于中心管理器,每个场景都需要,或者DontDestroy。这个插件用自己的物理引擎进行控制,与Unity的物理引擎完全分开。因此,它完全不会干扰Unity的物理系统,PhysicsManager管理整个系统和物理的计算时间。

MagicaBoneCloth

img使用骨骼来模拟布料运动,这样的物理模型更加适用于模拟头发,绳子这些不同意拉伸但是容易形变的物体,运用在衣服时,则需要看衣物材质是否容易拉伸,开销低

MagicaBoneSpring

img使用骨骼来模拟弹性形变,适合乳摇等,开销非常低

MagicaMeshCloth

img通过改变顶点位置来模拟布料运动,开销高

MagicaMeshSpring

img通过改变顶点位置来模拟乳摇,开销中

MagicaRenderDeformer

img模型形变器,如果使用MeshCloth或者MeshSpring需要挂载,开销高

MagicaVirtualDeformer

img虚拟形变器,可以将多个形变器融合成一个,减少顶点数,开销高

Collider

img包括了:MagicaSphereCollider 、MagicaCapsuleCollider 、MagicaPlaneCollider

分别是球体,胶囊体,平面碰撞器,用来进行动态骨骼的碰撞检测,可以防止骨骼进入

BoneCloth

通过摇晃真实骨骼的transfrom来达到晃动的效果,一般用于辫子等甩动效果

1.添加脚本

image-20220725110358861

2.将需要晃动的根骨骼加入列表中

image-20220725115852402

3.设置骨骼

点击Start Point Selection

image-20220725120727946

image-20220725120721297

  • Z Test : 勾选后只会选中摄像机能看到的节点
  • Move Point : 代表插件可以晃动的节点
  • Fixed Point : 代表这个节点作为固定节点
  • Invalid Point : 不会进行计算,忽略了

设置完之后务必点击End Point Selection保存,不然没用啊

4.设置碰撞

在需要设置碰撞的骨骼上添加三种碰撞之一(根据需要),然后放到这个碰撞列表里

image-20220725120915664

5.创建

在这里有很多参数可以调节,或者直接选择预设模板,然后点击Create创建

image-20220725121009004

BoneSpring

BoneCloth基本没差别,不过这个是用于乳摇等晃动效果的

MeshCloth

不同于骨骼晃动,此脚本采用真实的布料模拟,效果好很多,但是开销也比较大

模型导入设置

务必打开读取权限

image-20220725142024917

渲染形变器

给需要形变的Mesh添加

image-20220725151006510

会自动根据网格读取对应的数据,不需要手动Create

image-20220725151026154

虚拟形变器

创建一个空节点,添加脚本

image-20220725152250318

虚拟形变器可以将多个形变器合成为一个网格数据,减少顶点数量,增加布料模拟的性能

首先将形变器添加到虚拟形变器的列表中,点击Create创建数据

默认状态下,顶点数据基本没有变少,就是3个形变器的数据之和

image-20220725153936714

点击Open Cloth Monitor可以观察顶点合并情况,可以发现默认情况顶点非常多,布料模拟会爆炸的…

image-20220725154232053

  • Merge Vertex Distance : 此距离内的顶点会被合并(单位米)
  • Merge Triangle Distance : 此距离内的面片会被合并(单位米)

设置之后可以发现数据量明显下降了

image-20220725154907829image-20220725154912127

添加布料模拟

创建一个空节点,添加脚本

image-20220725155029521

与BoneCloth应用步骤类似,添加虚拟碰撞器,添加碰撞,最后Create

MeshSpring

和MeshCloth类似,先添加形变器,再添加虚拟形变器

然后添加脚本

image-20220725160042510

拖入晃动的中心位置,设置朝向,transfrom的前方向要与这里设置的朝向一直,这里是Z,所以transfrom的z轴朝前

image-20220725160409198image-20220725160444712

摄像机剔除

在摄像机外看不到的部分可以不进行模拟

对于骨骼动画来说,需要将所属的Mesh进行绑定,并设置剔除模式

image-20220725162317397

  • Reset : 剔除摄像机以外的模拟,如果再次出现,那么重置
  • Pause : 暂停摄像机外的模拟,如果再次属性,那么回复
  • Off : 关闭功能

如果是布料模拟,那么只需要开启剔除就好了,Mesh是自动选择的

注意,在编辑器模式下,如果模型也出现在的Scene视图,那么也是不会被剔除的!

开启剔除后,运行游戏,把摄像机移动到别的地方,可以发现脚本的状态是False

image-20220725162600387

性能测试

同屏100个角色开启模拟,部分骨骼动画+布料模拟

image-20220725162848135