【Unity】十万人同屏寻路? 基于Dots技术的多线程RVO2避障

本文介绍了一种无需ECS代码的Unity解决方案,利用Dots、Jobs System和Burst加速实现多线程RVO避障。作者提供了一个高度封装的插件,支持万人同屏动画人物的避障,并附带性能压力测试包和视频教程。通过使用Burst Job System和Batch Renderer Group,优化后的方案在5千人场景中提升了20帧左右的性能。

 【万人同屏方案Pro】是以GPU动画为基础实现3D、2D Spine高性能渲染,同时支持GPU Instancing或DOTS Instancing。基于Dots技术栈(Jobs&Burst)实现高性能海量单位锁敌/碰撞检测。同时提供BRG和ECSGraphics两套高性能渲染器, 传统开发方式拥有使用DOTS的渲染性能。无ECS技术门槛,无需写ECS代码,UI程序员也能直接上手写出万人同屏项目。 

 插件获取&Demo下载

Unity万人同屏集成方案Pro 支持微信小游戏PC店铺https://efunstudio.cn

性能/功能/红蓝对抗测试Demo Web在线体验https://assets.efunstudio.cn

一图看懂插件功能

插件视频教程

【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染_unity 万人同屏-CSDN博客文章浏览阅读7.5k次,点赞20次,收藏52次。《万人同屏插件》是一款基于Dots技术的高性能Unity开发工具,通过GPU动画渲染和BRG/ECSGraphics多线程渲染器,实现3D/2D Spine动画的海量单位渲染(10万单位)。支持武器挂载、动画事件、骨骼信息保留及LOD优化,GPU动画兼容全平台包括WebGL。插件提供一键转换工具将Animator/Spine动画转为GPU动画,大幅降低DrawCall和包体体积。新增ECSGraphics渲染器支持无限实例、8级LOD和动态挂载点切换。配套RVO多线程避障系统可实现大规模单位寻敌与碰撞检_unity 万人同屏 https://blog.csdn.net/final5788/article/details/142005465

 性能压力测试包自取:

 PC 10万动画人同屏对抗:https://pan.baidu.com/s/1CgpTV0TuFagobtAf7k38OA?pwd=xwsf 
安卓 1万动画人同屏避障: https://pan.baidu.com/s/1RkXyVXt_he5uCgizTSA42A?pwd=k0ji 

插件使用视频教程:

Unity低成本性能开挂 gpu动画+dots graphics万人同屏渲染 jobs rvo2 弹幕游戏海量单位索敌

效果见视频:

Unity Dots 10万人同屏RVO避障是一种什么体验? 3D人物带动画,不使用ECS

Unity弹幕游戏, RVO红蓝对抗 割草游戏 海量单位高性能索敌攻击方案压测

不使用Entities(ECS),只使用Batch Renderer Group、Job System和Burst加速,实现万人同屏RVO避障。

前面博文中尝试过使用传统多线程RVO避障,PC端5000人帧数100多帧:【Unity】万人同屏, 从入门到放弃之——多线程RVO避障_TopGames的博客-CSDN博客

RVO是算力开销大头,能不能用炸裂的Burst + Job System并行计算RVO算法呢?但是要想把RVO2替换为Job System实现也绝非易事,因为JobSystem限制非常多,用来传递处理数据的NativeContainer只允许值类型,好在github上有国外大佬早已做过相同的事。

RVO2 JobSystem实现:https://github.com/Nebukam/com.nebukam.orca

插件依赖Burst + Job System,安装URP会自动依赖这些库,除此之外还依赖两个包:

1.GitHub - Nebukam/com.nebukam.common 

2. com.nebukam.job-assist: https://github.com/Nebukam/com.nebukam.job-assist

使用Unity PackageManager从github地址添加即可。

使用方法:

1. 初始化

            agents = new AgentGroup<Agent>();
            obstacles = new ObstacleGroup();
            
            simulation = new ORCA();
            simulation.plane = axis; //设置XY方向寻路还是XZ方向
            simulation.agents = agents;
            simulation.staticObstacles = obstacles;

 2. 在Update中执行JobSystem Schedule:
 

        private void Update()
        {
            //Schedule the simulation job. 
            simulation.Schedule(Time.deltaTime);
        }

3. 在LateUpdate中把RVO计算位置/选装结果设置给物体Transform:

if (m_orca.TryComplete())
        {
            if (m_AutoUpdateEntityTrans)
            {
             
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eFunTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值