插件简介
【Unity万人同屏插件】是Unity通用性能优化插件,超大规模渲染、寻路移动、索敌碰撞检测等全方位性能瓶颈解决方案,支持Animator、Animation、Spine转为GPU动画prefab,并支持多线程合批渲染大幅提升性能, 兼容Unity全平台(含微信/抖音小游戏)
新手友好、简单易用,无ECS技术门槛,传统开发方式,也适用于旧项目免重构性能提升。
插件用法
插件包含三大模块:
| 模块名称 | 功能 |
|---|---|
| GPUAnimation | 把Animator、Animation、Spine Skeleton资源直接转换成 100%纯GPU计算的GPU动画。支持平滑过渡、事件、挂载点记录、武器挂载、切换皮肤,支持Mesh / Material以及贴图合并、一键自动生成LOD简化Mesh 直接使用GPU动画prefab 以GameObject传统方式使用,相比直接使用Animator、Skeleton可提升10倍以上性能。 |
| ECSGraphics | 基于Entities Graphics(DOTS) API高度封装简化的高性能渲染接口,无需用户写ECS代码。支持把静态模型或GPUAnimation 通过DOTS技术高性能合批渲染,进一步大幅提升性能,是实现10万级同屏渲染的最佳方案。 同时提供了目标搜索/索敌/碰撞检测、Raycast / SphereCast检测 接口。内置两套Jobs多线程实现的空间划分算法,支持10w+单位高性能目标查找。 |
| RVO | 纯数据驱动、Jobs多线程计算,支持超大规模 避让移动、寻路/导航、支持Terrain 3D地形、目标搜索/索敌/碰撞检测、Raycast / SphereCast检测,全面覆盖游戏业务中常见性能热点。 动态避让移动支持精确控制哪些单位之间不碰撞、避让权重(boss不给小兵让路),Targeting索敌系统支持根据视野、攻击范围、阵营、标签、优先级等参数,精准筛选所需目标。 |
GPUAnimation
GPU动画是万人同屏插件的基石,把Animator/Animation 和 Spine 动画从CPU计算 完全 转变成GPU计算,从而完美支持合批渲染。
把Animator、Animation、Spine Skeleton资源直接转换成 100%纯GPU计算的GPU动画。支持平滑过渡、事件、挂载点记录、武器挂载、切换皮肤,支持Mesh / Material以及贴图合并、一键自动生成LOD简化Mesh
直接使用GPU动画prefab 以GameObject传统方式使用,相比直接使用Animator、Skeleton可提升10倍以上性能。
一. 创建GPU动画Builder
在Unity 资源管理界面 选中[Animator/Animation预制体] 或 [SkeletonDataAsset 资源] 鼠标右键 Create -> GPUAnim -> Create Builders From Selection 创建GPUAnim 或 GPUSpine转换文件:

编辑

编辑
二. GPU动画Builder配置
创建完GPU动画配置文件后,可在配置文件中设置各项转换参数以满足GPU动画不同需求。
1. GPU Spine (2D)
直接解析SkeletonDataAsset 精准还原动画、特效。除基本骨骼动画帧外,还额外支持 颜色/透明度 、Deform网格变形、Active显隐关键帧。

编辑
如下图所示,配置文件会自动根据Skeleton文件初始化,每项配置都有中 / 英 双语展示:
合并材质:支持把Spine的材质、贴图合并成一个材质/图集,优化成一个DrawCall,并且单材质支持Normal 和 Addictive两种常用Blend混合模式,既优化DrawCall 又兼顾混合效果。
动画/Clips:默认会把Spine文件所有动画添加进列表,根据也许需求 拖拽 排放动画索引顺序即可。支持为每个动画设置 速度、是否循环播放。
记录挂载点:点击 ‘+’ 添加挂点Slots,在下拉列表中选择Skeleton的挂点,列表中的挂点会记录到GPU动画数据,用于把武器挂载到挂点上 或 运行时实时获取挂点位置/旋转。
构建按钮: ‘构建当前Skin’ 会只把当前选中的皮肤名称 构建成GPU Spine;‘构建全部Skins’ 会把Skeleton所有皮肤构建成GPU Spine.

编辑
2. GPU Anim (3D)
如下图所示,对于3D GPU动画,工具提供了全方位的功能需求

编辑
进阶用法:
- 启用分组构建功能,精确控制Mesh / Material,按组合并
第一步:点 ‘+’ 添加Mesh Group 组,这些组是用于把模型分成多个Sub Mesh块,每个Sub Mesh块就可以单独用一个Material渲染。
第二步:在Render 分配栏,通过下拉框选择每个Mesh对应的组。
Mesh Group的应用场景(举个例子):
例子1:角色身体、头发、衣服都需要用不同的材质(shader)才能渲染出对应的质感,就可以用Mesh Group分组进行合并。最终生成的GPU动画资源就是 单 Mesh + 多Materials,以解决不同部位用不同材质的需求。
例子2:换装,对于换装需求,角色身上的衣服是需要动态切换的,不能直接合并到Mesh里。就可以把 ‘衣服’ 建组,同时勾选 【作为挂载物单独导出】,‘衣服’就会独立作为GPU动画资源导出。

编辑
- 记录挂载点
GPUAnim / GPUSpine 都支持记录挂载点,挂载点可用于挂载GPU动画武器、皮肤等挂载物。
支持运行时 实时获取挂点position / rotation / scale 数据。例如: GPU动画 坦克,炮弹需要从炮管端点创建并发出,就可以在炮管端点处添加一个挂载点,就能在GPU动画播放的任意时刻拿到准确的炮管端点位置。
点‘+’添加 【挂点】,直接拖拽挂点GameObject添加。
编辑
- 静态 / 动态武器(挂载物)
对于静态模型挂载物,直接把prefab配置到静态挂载物列表。
对于GPU动画挂载物(也就是武器自己也有GPU动画),可以把其它GPU动画构建文件直接配置到列表,支持嵌套。构建GPU动画时会自动构建出 静态 / 动态 挂载物。
编辑
3. GPU动画资源
