当前位置: 首页 > article >正文

【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染

【万人同屏插件】已经重构、重磅升级新版使用手册最新版万人同屏插件使用手册https://blog.csdn.net/final5788/article/details/160112516【跨代升级:万人寻路导航、3D地形Terrain全新GPUSpine自动合并网格图集自动简化生成LOD网格重写小游戏平台渲染系统性能/功能全面提升、2D/3D全面兼容】万人同屏插件重磅升级, 功能介绍https://efunstudio.cn/unitymasskit在线体验网页版demohttps://efunstudio.cn/web-demo/⚠注意我司拥有⌈Unity万人同屏插件⌋合法著作权盗版必究著作权登记号2025SR1686440插件有防盗机制谨防受骗。对于盗版商用项目我司将以法维护知识产权。盗版传播、出售将永久停更、禁用并通过知识产权保护平台封禁、处罚盗版者。⚠使用订单号登录http://assets.efunstudio.cn/随时更新插件、免费获取更多文档和视频教程插件自2023年发布频繁更新至今。倾听客户需求和反馈不断优化完善发布了多项突破性重磅功能有效解决行业痛点、技术难题。完美解决中小企业和独立开发者的技术劣势打破技术壁垒提升项目竞争力 已为客户创造多个爆款产品一次付费永久免费更新不以任何理由二次收费。插件运行时百分百源码永远不会给客户任何潜在风险。合法授权使用、不破解/盗版即可永久获取更新。更新流程发布功能计划 - B站优先展示测试版功能 - 内部测试打磨验证稳定性 - 更新发布到assets.efunstudio.cn 请勿催更, 验证通过后会第一时间发布正式版万人同屏插件获取体验Demo下载万人同屏插件是一款通用的Unity性能优化插件是实现千人同屏、万人同屏的必备插件直击性能消耗痛点功能将2D Spine和3D动画渲染性能十倍至百倍提升Jobs多线程移动避让和索敌算法以及兼容全平台的高性能渲染器。新手友好、简单易用无ECS技术门槛传统开发方式同样适用于旧项目低成本性能优化。万人同屏插件兼容Unity全平台包括WebGL(2.0)微信/抖音小游戏等平台同样大幅性能翻倍Unity万人同屏插件功能性能演示Unity万人同屏集成方案Pro 支持微信小游戏https://efunstudio.cn/性能/功能/红蓝对抗测试Demo Web在线体验https://assets.efunstudio.cn/插件核心功能图十万单位红蓝对抗 多兵种战斗 弹幕游戏项目模板网页版在线测试性能▷幸存者Demo▷性能测试Demo【万人同屏插件】无ECS技术门槛无需写ECS代码通过传统开发方式获得极致性能UI程序员也能直接上手写出万人同屏项目。以GPU动画为基础实现3D动画、2D Spine高性能渲染同时支持GPU Instancing或DOTS Instancing。基于Dots技术栈(JobsBurst)实现高性能计算海量单位移动/锁敌/碰撞检测。独立开发高度封装了渲染器接口通过合批十倍或百倍大幅提升游戏帧数。并且支持Unity全平台PC、Android、iOS以及WebGL和微信小游戏、抖音小游戏等平台可以大幅提升PC、移动平台、小游戏平台的游戏帧数同时转换为GPU动画后可以抵消AnimationClip文件大小某些情景下可用作包体大小优化。适用于海量单位游戏项目突破技术门槛同时也适用于任何需要做性能优化的项目。例如割草、类吸血鬼、RTS、SLG、弹幕游戏以及海量树木、植被、建筑渲染等。Dots正式版发布于Unity2022.3 LTS版因此强烈建议使用Unity 2022.3.x及以上版本插件同样支持最新版Unity 6。 若仅使用GPU动画无上述限制。万人红蓝对抗项目​​​Unity万人同屏 新版ECSGraphics pc 手机 性能测试 安卓也能万人同屏战斗了测试环境系统Windows 11UnityUnity 2022.3.45f1CPU: i7-13700KFGPU: RTX 3070 8GUnity万人同屏 新功能ECSGraphics接口用法 详解 性能 功能 大幅提升 简单易用保姆级使用教程GPU动画插件(支持3D\2D Spine)兼容性纯Shader实现的GPU动画超高性能。插件支持Unity全平台兼容WebGL可用于H5/小游戏开发。支持动画事件、保留骨骼信息(动态获得骨骼节点位置/旋转/缩放)、2D Spine半透物体渲染顺序、动画平滑融合过渡(Pro)、LOD生成(Pro)。实现原理由于Animator或Spine动画都是CPU计算因此存在性能瓶颈、并且蒙皮动画无法合批渲染DrawCall大幅降低帧数以性能测试demo为例1w个Animator仅有8 fps)。GPU动画是把Animator转换为GPU计算, Shader中播放动画。使用MeshRenderer或BRG渲染自动合批渲染大幅降低DrawCall。以性能测试demo为例, 1w个GPU动画117 fps; 而使用BRG渲染GPU动画帧数高达800 fps一、3D动画转GPU动画1. GPU动画批量转换(新增)2025.6.1更新新增GPUAnimationBuilder优化GPU动画转换工作流支持批量转换便于维护。同时保留旧版GPU动画转换窗口。①创建GPUAnimationBuilder资源②设置要转换的动画Prefab和转换参数拖入动画Prefab后点击ResetConfigs按钮一键填充默认参数③添加要记录的骨骼(可选)打开动画Prefab邮件节点GPUAnimation-Copy Transform path复制节点路径粘贴到骨骼记录列表(RecordBones)④点击Build按钮生成GPU动画2. GPU动画转换工具界面(不推荐)通过Unity顶部菜单Game Framework-GPU Animation-GPU Animation Converter打开工具界面GPU动画转换工具面板①拖入需要转换的Animator/Animation预制体②动画模式支持GPU骨骼动画和顶点动画推荐骨骼动画,功能更强大③合并网格合并Mesh降低DC, 对于Spine动画将进行排序,确保半透物体渲染排序正确仅支持共用相同材质的网格合并对于不同材质、多张贴图的物体可通过三方插件Mesh Baker先合并材质/贴图再转换GPU动画。④Animator相关设置默认值即可。 如是否冻结根骨骼位置/旋转等⑤选择GPU动画shader, Spine动画要选择2D shader也可生成GPU动画后再切换材质shader;⑥需要烘焙到GPU动画贴图的Animation Clips 工具默认添加Animator中引用的所有Animation Clip通过列表的索引值切换动画状态⑦把需要运行时获取transform值的骨骼节点拖到此处 转换为GPU动画后仍能实时获取到骨骼transform值; 此功能可使转换为GPU动画后骨骼信息不丢失比如可以实时获取头部、手部位置3. GPU动画工具用法①把Animator或Animation动画角色预制体拖入场景②把拖入场景的预制体拖入GPU动画转换工具的Input栏③拖动Animation Clips列表元素组织好自己的动画索引对应的动画可选④把需要保留骨骼transform信息的节点拖到Record Bones列表⑤点击Convert按钮转换为GPU动画4. GPU动画资源转换后会生成以下GPU动画文件①动画贴图。记录着动画数据②GPU动画Prefab。将原动画Prefab中的SkinnedMeshRenderer转换为了MeshRenderer同时拥有动画播放功能和自动合批渲染③GPU动画帧事件用于GPU动画播放时触发动画事件。工具默认会把Animation Clip文件中添加Event事件转换为GPU动画帧事件④GPU动画材质由于是纯shader实现因此可以不依赖任何脚本仅修改材质属性切换动画⑤GPU动画MeshMesh中寄存了某些信息以便GPU动画Shader读取使用5. 自定义GPU动画Shader插件使用Shader Graph和Amplify Shader Editor封装好了函数节点只需添加GPU动画节点连接顶点位置、顶点法线即可轻松实现自定义Shader使用Amplify Shader Editor使用Shader Graph二、2D Spine转GPU动画十代i5 1050显卡下依然性能强悍实际上只需要把Spine转换为Animator就可以通过标题一的步骤把Animator转换为GPU动画2d spine动画帧数提升数十倍spine转gpu动画 2d spine动画 10w单位1. Spine转Animator工具①通过Unity顶部菜单栏 GameFramework-GPU Animation-Spine to Animator打开工具②把Spine文件拖到工具点击Bake按钮开始转换Spine转Animator注意事项Spine独立实现了一些Animator不支持的特性必须绕过这些特性才能完整转换为Animator后还原完整动画效果不支持转换的关键帧是骨骼动画中非必要特性可以轻松绕过烘焙骨骼不支持以下特性① 禁用旋转/缩放继承② 局部错切变换③ 所有约束类型④ 绑定骨骼超过4根的权重顶点烘焙动画不支持以下特性① 网格变形关键帧② 颜色关键帧③ 绘制顺序关键帧2. Spine转GPU动画使用GPU Animation Converter把步骤1 Spine转换出的Animator预制体转换为GPU动画。注意Spine通常是2D半透明物体因此需要把GPU动画Shader切换为2D的Shader(如GPUAnimation/2D/GPUBonesAnim2D)三、GPU Animation LOD工具 [PRO版功能]多线程渲染器支持LOD, 根据距离显示不同精度模型,大幅提升性能1. 自动生成减面LODs根据LOD 0 Mesh生成LOD 1~4简化Mesh;①此工具依赖三方插件MantisLOD用于自动简化Mesh面数同时尽量保留Mesh轮廓。安装MantisLOD后解除代码GPUAnimationLODCreator.cs第一行注释即可使用功能#define ENABLE_MANTISLOD //安装MantisLOD插件后解除此行注释 ... #if ENABLE_MANTISLOD using MantisLOD; using MantisLODEditor; #endif②GameFramework-GPU Animation-GPU Animation LOD打开工具2. 使用已有LOD Mesh生成可选除了使用工具自动生成减面LOD Mesh, 当然也可以根据已有的Mesh直接生成LODs Mesh。注意仅使用BRG渲染器需要步骤②合并LOD Mesh 使用ECSGraphics无需合并。四、武器挂载、动画事件、骨骼获取武器挂载 帧事件 骨骼获取 视频教程1. 武器挂载①把武器作为GPU动画角色的子节点修改材质shader为GPUAnimation/GPUAttachBoneLit并将主角的动画贴图赋值到材质②通过修改武器材质的AttachBoneIndex来设置武器绑定到哪个骨骼说明: 这里AttachBoneIndex对应的就是GPU动画工具界面RecordBones记录的骨骼节点索引2. 动画事件GPU动画事件触发时实时获取拳头骨骼位置转换GPU动画时会自动生成动画事件文件如下图默认情况下工具是从Animation Clip文件读取动画事件以key, value形式保存。key是触发帧value是事件名。用户可直接修改此文件增删事件。①. GPU动画帧事件用法使用GPUAnimation脚本设置好Event Data:GPU动画事件实例代码using Cysharp.Threading.Tasks; using GPUAnimation.Runtime; using UnityEngine; public class GPUAnimEventDemo : MonoBehaviour { GPUAnimation.Runtime.GPUAnimation m_GPUAnim; private void Start() { m_GPUAnim GetComponentGPUAnimation.Runtime.GPUAnimation(); //添加GPU动画事件监听 m_GPUAnim.Events.AddListener(OnGPUAnimEventCallback); m_GPUAnim.GPUAnimMaterial.SetVector(_ClipId, new Vector4(4, Time.time, 0, 0)); } private void OnDestroy() { m_GPUAnim.Events.RemoveListener(OnGPUAnimEventCallback); } /// summary /// GPU动画事件回调 /// /summary /// param nameclipIndex动画index/param /// param nameframe触发帧/param /// param nameeventName事件名/param private void OnGPUAnimEventCallback(int clipIndex, int frame, string eventName) { if (eventName DamageTrigger) //挥拳动画事件触发时在拳头位置发射小球 { var boneData GPUAnimationUtility.GetAttachBoneTransform(m_GPUAnim.GPUAnimMaterial, 1);//获取右手当前动画帧的位置 GameObject ball GameObject.CreatePrimitive(PrimitiveType.Sphere); ball.transform.localScale Vector3.one * 0.2f; ball.transform.position m_GPUAnim.transform.position boneData.Position; _ UniTask.Delay(1000).ContinueWith(() { Destroy(ball); }); } } }②. ECSGraphics多线程渲染下GPU动画帧事件用法为了应对海量单位下动画事件触发依然流畅ECSGraphicsComponent组件专门提供了jobs多线程实现的事件触发检测函数public bool GPUAnimationEventsUpdate(out NativeQueueGPUAnimTriggerInfo triggerResults)代码示例在Update中每帧调用以批量检测动画事件触发void Update() { if (ECSGraphicsComponent.Instance.GPUAnimationEventsUpdate(out var triggerResults)) { while (triggerResults.TryDequeue(out var result)) { //当前帧触发的GPU动画事件数据result if (m_Players.TryGetValue(result.ECSEntity, out Player unit)) { unit.OnGPUAnimationEvent(result.ECSRenderIndex, result.ClipIndex, result.TriggerAtFrame); } } triggerResults.Dispose(); } }3. 骨骼获取用于GPU动画运行时实时获取某个骨骼节点的Transform信息例如角色持枪射击子弹应从枪口位置创建发射市面上其它GPU动画插件转换GPU动画后骨骼信息全部丢失无法获取枪口位置。GPUAnimationUtility类提供了多种获取当前GPU动画帧某个骨骼的transform信息的接口例如获取RecordBones记录的索引为1的骨骼transform信息GPUAnimationUtility.GetAttachBoneTransform(GPUAnimMaterial, 1);ECSGraphicsComponent同样提供了封装好的接口ECSGraphicsComponent.Instance.GetGPUAnimationBone(entity, boneIndex)五、动画平滑过渡、融合 [PRO版功能]3D/2D Spine动画平滑切换,支持控制过渡时长直接把GPU动画材质的Shader切换为支持平滑过渡的Shader即可如GPUAnimation/GPUBonesAnimMergeLitClipId该参数用于切换动画对于不支持动画融合的Shader x是动画index y是开始播放的时间(Time.time)对于支持动画融合的Shaderz是上个动画的indexw是上个动画的播放时间x是要切换到的动画indexy是动画第一帧开始的时间也就是不算融合时间Time.time 动画过渡消耗时间AnimTransDration动画平滑过渡(融合)速度GPU动画使用限制尽管已经实现大量GPU动画功能但依然比不上高级动画系统的功能如IK、Avatar Mask是不支持的。由于GPU动画贴图储存动画信息有限目前支持记录Transform信息和GameObject的显示隐藏。对于3D动画完全足够。但对于2D Spine动画有时会记录特殊的关键帧如修改颜色、修改贴图等这些GPU动画是不支持的但仍可以通过显示隐藏实现 例如皮肤A切换到皮肤B可以通过隐藏皮肤A显示皮肤B以实现换装功能。ECSGraphics渲染器(推荐)随着Unity ECS方案逐步完善因此我们使用Entities Graphics高度封装了一套高性能渲染器用于平替之前的自定义BRG方案虽然引入了ECS包但同样不用写一行ECS代码传统开发方式即可实现超高的渲染性能。提供更完善的功能同时带来大幅性能提升。相比官方Entities Graphics, 我们使用GPU Instancing技术实现了无感知对Web平台的支持, 实现了全平台的高性能渲染。Web平台性能展示demohttps://efunstudio.cn/#web-demoECSGraphics功能0. 2025.10.9重磅更新新增对Web平台支持率先支持微信小游戏等web平台。(解决Unity官方DOTS不支持Web平台的痛点), 网页版demo体验https://efunstudio.cn/#web-demo1. 支持子物体比如给角色添加血条为子物体就能跟随角色自动移动。解决之前BRG不支持子物体想要添加武器还需要自行同步武器位置的问题。2. 支持武器挂载挂载点切换等。我们的GPU动画方案支持挂载但之前只能在Prefab模式使用武器挂载。现在我们直接支持将武器挂载到GPU动画主体并支持动态切换挂载点使武器跟随骨骼位置运动。3. 不再限制最大创建数量BRG版本固定内存长度因此有数量限制。ECSGraphics渲染器无限数量、动态扩容。4. LODs等级数量由BRG版本最大4级ECSGraphics渲染器最大支持8级LOD。5. 更好的支持半透明物体同时性能翻倍。6. RVO渲染同步、GPU动画事件检测等性能提升。7.(new) 2025.12.2新增独立的目标查找/索敌/碰撞检测/射线检测系统ECSGraphics用法1. 注册要渲染的物体:与使用BRG渲染器一样需要将渲染的Mesh和Material添加到ECS Renders列表如果有GPU动画事件也需要配置事件文件如果需要LOD功能则将不同等级mesh配置到LOD Renders列表。最大支持8个LOD等级。2. 创建/销毁一个物体先要渲染一个物体只需要调用Add方法 移除Removevar entity ECSGraphicsComponent.Instance.Add(0, Vector3.zero, Quaternion.identity, 1); ECSGraphicsComponent.Instance.Remove(entity);//移除指定物体 ECSGraphicsComponent.Instance.RemoveAll(); //移除全部创建物体时也可以指定父节点使其跟随父节点移动public Unity.Entities.Entity Add(int renderId, float3 pos, quaternion rot, float scale 1, Unity.Entities.Entity parentEntity default, int customId 0)3. 添加/删除GPU动画挂载物体可以将任意Mesh挂载到GPU动画物体的任意骨骼上使挂载物跟随GPU动画骨骼运动。挂载物的Material需使用GPU动画提供的GPU动画的AttachBone shader。同时支持动态切换挂载到哪个骨骼。比如给GPU动画玩家右手挂载一把枪player ECSGraphicsComponent.Instance.Add(0, Vector3.zero, Quaternion.Euler(0, 180, 0), 3); weapon ECSGraphicsComponent.Instance.AddAttachment(2, player, 0, Vector3.zero, Quaternion.identity); ECSGraphicsComponent.Instance.RemoveAttachment(player, weapon);//移除player身上的weapon挂载物 ECSGraphicsComponent.Instance.RemoveAllAttachments(player); //移除player身上所有挂载物体切换挂载点, 比如将武器从右手切换到左手ECSGraphicsComponent.Instance.SetAttachmentBoneIndex(weapon, boneindex);4. 播放/平滑切换GPU动画ECSGraphicsComponent.Instance.PlayGPUAnimation(player, gpuAnimationClipIndex);同时也支持切换动画时传入动画平滑过渡时间若不传入过渡时间程序将默认读取GPU动画shader材质上的 _AnimTransDuration字段配置的时间public void PlayGPUAnimation(Unity.Entities.Entity entity, int animClipIndex, float animCrossFadeDuration)5. GPU动画事件触发检测全局只需要在一处Update中实时跳用GPU动画事件检测刷新函数ECSGraphicsComponent.Instance.GPUAnimationEventsUpdate(out var events)即可得到事件触发列表批量对已触发事件做出响应.void Update() { //GPU动画事件触发检测 if (ECSGraphicsComponent.Instance.GPUAnimationEventsUpdate(out var events)) { while (events.TryDequeue(out var eventInfo)) { Debug.Log($动画事件触发: 动画clip:{eventInfo.ClipIndex}, entity:{eventInfo.ECSEntity}, 触发帧:{eventInfo.TriggerAtFrame}); //实时获取GPU动画骨骼的Transform信息 var bone ECSGraphicsComponent.Instance.GetGPUAnimationBone(player, 1); //在当前骨骼位置创建一个物体,并0.5秒后删除 var ball ECSGraphicsComponent.Instance.Add(1, bone.Position, bone.Rotation, 0.5f); UniTask.Delay(500).ContinueWith(() { ECSGraphicsComponent.Instance.Remove(ball); }).Forget(); } events.Dispose(); } }此次渲染器升级相比BRG不仅增加了多项功能、更简单易用同时性能也普遍大幅提升。尤其是半透明物体渲染性能BRG版本需要自行对半透明物体进行排序后渲染对性能影响很大。比如1万个2D GPU Spine动画, 红米K80P测试机下的表现具体性能提升请见文章开头提供的demo下载ECSGraphics版手机端能达到最大限制帧数120帧ECSGraphics版120帧ECSGraphics目标搜索系统也就是说, 即使不使用RVO仅仅使用ECSGraphics, 从图形层面就可以使用多线程Jobs高性能索敌/目标搜索接口。创建实体时添加一个ECSTargetingData(索敌筛选配置)即可参与索敌var entity ECSGraphicsComponent.Instance.Add(0, pos, Quaternion.identity); ECSGraphicsComponent.Instance.AddComponentDataECSTargetingData(entity, new ECSTargetingData(ECSTargetingLayer.L1, ECSTargetingLayer.L1, ECSTargetingLayer.NONE, 0.5f, 5f, 100, 360));1. Raycast / SphereCast射线检测支持以实体查找、以点查找NativeArrayUnity.Entities.Entity targets; if (Input.GetKey(KeyCode.Q)) { // 射线检测 targets ECSGraphicsComponent.Instance.Raycast(m_QueryPoints, m_QueryPointsB, m_PointsTargetingData); } else { // SphereCast 球体抛射检测 targets ECSGraphicsComponent.Instance.SphereRaycast(m_QueryPoints, m_QueryPointsB, m_PointsTargetingData); } // 遍历检测目标 if (targets.IsCreated) { foreach (var tag in targets) { if (tag Unity.Entities.Entity.Null) { break; } ECSGraphicsComponent.Instance.SetMainColor(tag, new Unity.Mathematics.float4(1, 0, 0, 1)); } targets.Dispose(); }2. GetNearest查找最近实体, 支持以实体查找、以点查找targets ECSGraphicsComponent.Instance.GetNearest(m_QueryPoints, m_PointsTargetingData);3. GetWithin查找范围内实体支持以实体查找、以点查找:1. 批量查询每个实体 攻击范围内的敌人 var targets ECSGraphicsComponent.Instance.GetWithin(m_Player, m_Player.Length); if (targets.IsCreated) { int resultIndexOffset 0; for (int i 0; i m_Player.Length; i) { var player m_Player[i]; 2. 根据每个实体配置的最大攻击个数遍历被攻击对象 var maxTargetCount ECSGraphicsComponent.Instance.GetComponentDataECSTargetingData(player).MaxAttackCount; var playerColor ECSGraphicsComponent.Instance.GetComponentDataMaterialBaseColor(player).Value; for (int j 0; j maxTargetCount; j) { var target targets[resultIndexOffset j]; 3. 遇到Null说明后面已经无对象 if (target Unity.Entities.Entity.Null) { break; } 4. 对目标进行伤害 //TODO Something... player.Attack(target); } resultIndexOffset maxTargetCount; } 5. 用完结果后释放内存 targets.Dispose(); }RVO多线程避让Unity Dots 10万人同屏RVO避障是一种什么体验? 3D人物带动画,不使用ECS1. 添加RVO单位AddAgent()会返回一个RVOAgent对象可通过此对象设置各种rvo参数m_RVO RVOComponent.Instance.AddAgent(position);2. 移除RVO单位RVOComponent.Instance.RemoveAgent(m_RVO);3. RVO属性功能Draw Debug: 在Editor下Scene窗口绘制RVO单位调试线框, 以图形展示单位位置、方向、大小PlaneRVO移动平面空间3D通常设为XZ, 2D通常设为XY (RVO之所以性能高于多线程寻路数十倍到百倍原因是计算量小、为平面空间计算. 如需支持三个维度可根据需求刷新pos第三维度数值实现)AutoUpdateEntityTrans: RVO单位创建时支持绑定GameObject勾选即表示自动同步RVO与绑定GameObject的位置、方向。RVO单位移动避让参数每个RVO单位可独立设置以下属性Height默认值即可无需修改RadiusRVO单位的碰撞体半径, 可理解为Circle Collider(圆形碰撞体)的半径RVO单位之间的碰撞以此半径计算Radius Obst: RVO单位与Obstacle障碍物的碰撞半径MaxSpeed: RVO单位的移动速度(最大)接近目标点后会自动减速MaxNeighbors: RVO避让计算参与影响的临近RVO单位数量默认即可Neighbor DistRVO避让计算参与影响的临近RVO单位距离默认即可TimeHorizon可理解为RVO单位之间的避让减速距离TimeHorizonObst: 可理解为RVO单位与Obstacle障碍物之间的避让减速距离。AvoidWeight避让权重比如高级兵不给小兵让路小兵需要给高级兵让路以避免高级兵被小兵挡住的情况。只需设置avoidWeight取值0-1值越小越不让路。layerOccupationRVO单位分层与layerIgnore配合用于精准控制不同层之间是否碰撞。layerIgnore设置忽略碰撞的单位layer类型。该参数为位枚举可精准控制忽略一种或多种单位之间的碰撞。如rvoA.layerOccupation L0, rvoB.layerOccupation L1; rvoA.layerIgnore L1表示rvoA不与rvoB碰撞collisionEnabled是否碰撞false表示不碰撞RVO会相互穿透。navigationEnabled是否启用移动避让。false表示原地不动。stopMoveSelf停止主动移动但会被其它RVO单位挤走。arrived是否已经到达targetPosition。RVO单位索敌相关参数searchRadius目标搜索半径, 索敌接口将返回满足半径内的目标id注意, searchRadius指的是RVO单位边到边的距离双方RVO的Radius会被减去searchCount寻敌数量1单体攻击1, 群体攻击targetPosition移动目标点给定目标点rvo单位会自动向目标点移动。camp单位所属阵营数据类型是位枚举所以支持单个单位多个阵营以满足用户特殊需要searchTag标记自己的标签数据类型是位枚举支持标记多个标签此标签配合ignoreSearchTag使用用于精准控制寻敌过滤目标例如敌方阵营有个飞行单位我方阵营的近战单位虽然属于敌对阵营但近战单位不可能攻击到高空飞行目标。ignoreSearchTag寻敌时忽略掉ignoreSearchTag位枚举中包含的searchTag用于精准控制筛选寻敌collisionEnabledrvo单位之间是否碰撞为false时rvo之间将会重叠穿模navigationEnabledrvo单位是否自动移动设为false后即可通过rvo的position来随意设置位置例如击飞效果单位受到攻击后被击飞就可以通过设置navigationEnabled为false然后自行设置position实现击飞效果落地后再设置navigationEnabled为true即可从击飞落地位置重新移动。4. 障碍物①添加圆形障碍物把CircleObstacle脚本挂到障碍物GameObject上即可②添加举行障碍物把BoxObstacle脚本挂到障碍物GameObject上即可③添加边界障碍物把EdgeObstacle脚本挂到障碍物GameObject上即可通过面板参数添加边界顶点位置④扩展自定义障碍物自定义类继承ShapeObstacleBase重写方法即可海量单位多线程寻敌/碰撞检测Unity弹幕游戏, RVO红蓝对抗 割草游戏 海量单位高性能索敌攻击方案压测方案是通过Jobs多线程批量查询单位支持查询最近单位、范围内单位等通过RVOComponent提供的接口查询具体使用方法可参考插件提供的demo, EnemiesSearchDemo.cs1. 查询最近单位var ids RVOComponent.Instance.GetNearest(pointsA, pointsA.Length, new TargetingData(TargetingLayer.NONE, TargetingLayer.NONE, TargetingLayer.NONE, 0, 0), out int idsLength); RVOComponent.Instance.ForeachSingleTargetingResults(ids, idsLength, (queryIndex, targetAgentId) { if (RVOComponent.Instance.TryGetAgent(targetAgentId, out var targetAgent)) ECSGraphicsComponent.Instance.SetMainColor(targetAgent.ecsEntity, debugColor); });2. 查询范围内目标int maxAttackCount RVOComponent.CalculateMaxTargetingCountWithin(debugTargetingRadius, 0.5f); var ids RVOComponent.Instance.GetWithin(pointsA, pointsA.Length, new TargetingData(TargetingLayer.NONE, TargetingLayer.NONE, TargetingLayer.NONE, debugTargetingRadius, maxAttackCount, 360), math.forward(), out int idsLength); RVOComponent.Instance.ForeachMultiTargetingResults(ids, pointsA.Length, maxAttackCount, (queryIndex, targetAgentId, targetIndex) { if (RVOComponent.Instance.TryGetAgent(targetAgentId, out var targetAgent)) { ECSGraphicsComponent.Instance.SetMainColor(targetAgent.ecsEntity, debugColor); } });3. 射线检测/球体抛射//通过点的方式批量射线检测。A、B两点确定一条射线适用于技能伤害等场景 1. 提供了最大索敌个数预测接口, 可以快速计算出空间内最多容纳多少单位 int maxAttackCount RVOComponent.CalculateMaxTargetingCountRaycast(pointsA[0], pointsB[0], 0, 0.5f); 2. Raycast接口重载以点的方式射线检测。 TargetingData是目标筛选过滤数据支持根据视野、攻击范围、阵营、Layer、优先级等精准控制过滤。 var ids RVOComponent.Instance.Raycast(pointsA, pointsB, pointsA.Length, new TargetingData(TargetingLayer.NONE, TargetingLayer.NONE, TargetingLayer.NONE, attackRadius, maxAttackCount), out int idsLength); 3. 提供了索敌结果遍历接口更简单易用。接口自动遍历批量索敌结果返回索敌者和被锁敌者信息。 RVOComponent.Instance.ForeachMultiTargetingResults(ids, pointsA.Length, maxAttackCount, (queryIndex, targetAgentId, targetIndex) { //遍历每个被索住的目标处理攻击、伤害等AI逻辑 if (RVOComponent.Instance.TryGetAgent(targetAgentId, out var targetAgent)) ECSGraphicsComponent.Instance.SetMainColor(targetAgent.ecsEntity, debugColor); });注意事项一、ECSGraphics兼容性渲染管线支持URP、HDRP、自定义SRP。不支持内置渲染管线。首推URP兼容平台Unity全平台我们额外实现了WebGL支持解决官方DOTS不支持WebGL的痛点。您可在Web平台、微信小游戏、抖音小游戏等完美使用大幅提升性能。Windows using DirectX 11Windows using DirectX 12Windows using VulkanUniversal Windows PlatformLinux using VulkanmacOS using MetaliOSAndroid (Vulkan and OpenGL ES 3.x)PlayStation 4PlayStation 5Xbox OneXbox Series X and Xbox Series SNintendo SwitchGoogle StadiaWebGL (WebGL 2.0)二、打包设置1. URP Rendering Path选择Forward (Forward才能发挥BRG最大性能)2. BatchRendererGroup Shader变体选择 Keep All3. 打包WebGL常见问题1编辑器或其它平台正常打包WebGL渲染异常解决方法如果PlayerSettings设置的为WebGL 1Shader Model需设置为2.0WebGL2可设置Shader Model为3.0或3.5使用Amplify Shader Editor打开GPU动画Shader设置Shader Model

相关文章:

【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染

【万人同屏插件】已经重构、重磅升级!新版使用手册: 最新版万人同屏插件使用手册https://blog.csdn.net/final5788/article/details/160112516 【跨代升级:万人寻路导航、3D地形Terrain,全新GPUSpine,自动合并网格图集&#xff…...

别再只盯着Log4j了:盘点5种容易被忽略的DNSlog攻击利用场景与排查清单

超越Log4j:DNSlog攻击的五大隐蔽战场与实战防御手册 当大多数安全团队还在为Log4j漏洞疲于奔命时,黑客早已将目光转向更隐蔽的数据外带通道。DNSlog攻击就像网络世界的"暗网快递",利用最基础的域名解析协议,悄无声息地搬…...

如何用LlamaDeploy构建企业级AI系统:核心架构深度解析

如何用LlamaDeploy构建企业级AI系统:核心架构深度解析 【免费下载链接】llama-agents Deploy your agentic worfklows to production 项目地址: https://gitcode.com/gh_mirrors/ll/llama-agents LlamaDeploy是一款强大的企业级AI工作流部署工具,…...

PathLayoutManager实战:打造J20战机飞行轨迹特效

PathLayoutManager实战:打造J20战机飞行轨迹特效 【免费下载链接】PathLayoutManager RecyclerView的LayoutManager,轻松实现各种炫酷、特殊效果,再也不怕产品经理为难! 项目地址: https://gitcode.com/gh_mirrors/pa/PathLayo…...

信奥赛CSP-J复赛集训(DP专题)(4):[USACO11JAN] Profits S

信奥赛CSP-J复赛集训(DP专题)(4):[USACO11JAN] Profits S 题目描述 The cows have opened a new business, and Farmer John wants to see how well they are doing. The business has been running for N (1 <= N <= 100,000) days, and every day i the cows rec…...

JDspyder终极指南:3步实现京东茅台自动化抢购的完整方案

JDspyder终极指南&#xff1a;3步实现京东茅台自动化抢购的完整方案 【免费下载链接】JDspyder 京东预约&抢购脚本&#xff0c;可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 你是否在京东抢购茅台时总是慢人一步&#xff1f;面对秒杀时…...

信奥赛CSP-J复赛集训(DP专题)(3):魔族密码

信奥赛CSP-J复赛集训(DP专题)(3):魔族密码 题目背景 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 题目描述 花花:……咦好冷我们现在要解决的是魔…...

BepInEx框架深度解析:游戏运行时注入的架构哲学与实践范式

BepInEx框架深度解析&#xff1a;游戏运行时注入的架构哲学与实践范式 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx不仅仅是一个Unity/XNA游戏的插件框架&#xff0c;它…...

飞书文档批量迁移终极方案:3步完成企业知识库完整备份

飞书文档批量迁移终极方案&#xff1a;3步完成企业知识库完整备份 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 当企业决定从飞书迁移到其他协作平台时&#xff0c;技术团队面临的最大挑战是什…...

BetterGI:3分钟解锁原神自动化,告别重复劳动的智能助手

BetterGI&#xff1a;3分钟解锁原神自动化&#xff0c;告别重复劳动的智能助手 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | …...

Arylic H50无线Hi-Fi放大器评测:高解析音频与多房间体验

1. Arylic H50无线立体声放大器深度评测作为一名音响设备评测博主&#xff0c;我最近花了三周时间深度体验了Arylic H50这款支持TIDAL Music的无线立体声放大器。这款设备最吸引我的地方在于它同时兼顾了无线流媒体的便利性和Hi-Fi级别的音质表现。相比市面上同价位的产品&…...

从零开始使用 Python 在五分钟内接入 Taotoken 并完成第一次对话

从零开始使用 Python 在五分钟内接入 Taotoken 并完成第一次对话 1. 环境准备 开始前请确保已安装 Python 3.7 或更高版本。推荐使用虚拟环境管理依赖&#xff0c;可通过以下命令创建并激活虚拟环境&#xff1a; python -m venv taotoken-env source taotoken-env/bin/activ…...

leetcode:最小覆盖字符串

1笨方法对于算法题目&#xff0c;自己能想到的往往是最基础的笨方法。代码如下&#xff1a;如果t的长度是len1&#xff0c;s的长度是len2&#xff0c;那么最小窗口是len1&#xff0c;最大窗口是len2。所以可以从len1到len2&#xff0c;遍历窗口大小&#xff0c;对于每个窗口大小…...

如何解锁NVIDIA显卡隐藏性能:NVIDIA Profile Inspector完整配置指南

如何解锁NVIDIA显卡隐藏性能&#xff1a;NVIDIA Profile Inspector完整配置指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否遇到过游戏画面撕裂、帧率不稳或输入延迟过高的问题&#xff1f;N…...

PowerShell 第11章:过滤和比较(下)Where-Object、迭代命令行模型、$_作用域与实战练习

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…...

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题 一、问题场景:RGB模型降噪了,但颜色变脏了 上一篇我们实现了RGB图像去噪。 模型能正常训练,也能处理彩色图片,但在真实测试中我遇到一个非常明显的问题: 噪声确实少了,但颜色变灰、变暗,…...

Mac鼠标滚轮优化终极指南:如何用Mos解决外设滚动冲突并提升工作效率

Mac鼠标滚轮优化终极指南&#xff1a;如何用Mos解决外设滚动冲突并提升工作效率 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction in…...

多尺度3D场景生成技术:从NeRF到动态高斯面元

1. 技术背景与核心挑战在计算机视觉和图形学领域&#xff0c;3D场景生成技术正经历着革命性的发展。这项技术允许我们从单张2D图像出发&#xff0c;构建出可自由探索的3D虚拟环境。想象一下&#xff0c;当你看到一张向日葵田的照片时&#xff0c;不仅能"走进去"环顾四…...

基于配置化驱动的对话AI开发:从原理到Confichat实践

1. 项目概述&#xff1a;一个专注于配置化对话的AI工具最近在折腾AI应用开发&#xff0c;特别是想快速搭建一个能处理特定领域对话的聊天机器人时&#xff0c;发现了一个挺有意思的项目&#xff1a;1runeberg/confichat。这个名字拆开看&#xff0c;“confi” 像是 “configura…...

【Docker安全红皮书更新】:27版强制网络命名空间隔离、默认拒绝模式与自动微分段(仅限企业版Early Access)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker 27网络隔离安全增强全景概览 Docker 27&#xff08;即 Docker Engine v27.x&#xff09;引入了多项底层网络栈重构与安全策略强化机制&#xff0c;核心聚焦于容器间通信的默认隔离性、跨命名空间…...

OASIS快速入门指南:5分钟搭建你的第一个社交模拟环境

OASIS快速入门指南&#xff1a;5分钟搭建你的第一个社交模拟环境 【免费下载链接】oasis &#x1f3dd;️ OASIS: Open Agent Social Interaction Simulations with One Million Agents. 项目地址: https://gitcode.com/gh_mirrors/oasis2/oasis OASIS&#xff08;Open…...

Phi-2轻量级语言模型:高效推理与本地部署实践

1. 认识Phi-2&#xff1a;轻量级语言模型的新标杆 在大型语言模型&#xff08;LLM&#xff09;如GPT-4、Claude等占据主流的今天&#xff0c;微软研究院推出的Phi-2以其仅2.7B参数的"小身材"却实现了令人惊艳的常识推理和语言理解能力。这个模型最吸引我的地方在于—…...

别再手动调时间了!RedHat 8/9 上用 Chrony 搞定集群时间同步,保姆级配置流程

RedHat集群时间同步实战&#xff1a;用Chrony告别时间漂移的终极指南 凌晨三点&#xff0c;运维工程师小李被刺耳的告警声惊醒——日志系统显示某关键业务节点的证书验证突然集体失效。排查两小时后&#xff0c;真相令人哭笑不得&#xff1a;集群中三台服务器的时间偏差超过了证…...

B站缓存视频一键转换终极指南:m4s-converter完整使用教程

B站缓存视频一键转换终极指南&#xff1a;m4s-converter完整使用教程 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困境…...

FastAPI与MongoDB构建现代后端服务:从原理到生产级实践

1. 项目概述&#xff1a;为什么选择 FastAPI MongoDB 构建现代后端服务&#xff1f;如果你正在寻找一个既能快速开发原型&#xff0c;又能轻松应对高并发、数据模型灵活多变的后端技术栈&#xff0c;那么wpcodevo/fastapi_mongodb这个项目模板绝对值得你深入研究。它不是一个简…...

从崩溃到重生:Genesis物理引擎构建失败全案解决方案

从崩溃到重生&#xff1a;Genesis物理引擎构建失败全案解决方案 【免费下载链接】Genesis A generative world for general-purpose robotics & embodied AI learning. 项目地址: https://gitcode.com/GitHub_Trending/genesi/Genesis Genesis是一个为通用机器人技术…...

智慧树刷课插件:三步实现高效学习自动化,节省90%刷课时间

智慧树刷课插件&#xff1a;三步实现高效学习自动化&#xff0c;节省90%刷课时间 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 你是否厌倦了在智慧树平台上手动点击&…...

自动化系统清理工具Rguvh/byebyeclaw:从声明式配置到安全实践

1. 项目概述与核心价值最近在和一些做安全研究的朋友交流时&#xff0c;经常听到一个词&#xff1a;“Rguvh/byebyeclaw”。乍一听&#xff0c;这像是一个晦涩的内部代号&#xff0c;或者某个开源工具的神秘仓库。实际上&#xff0c;它指向的是一个在特定技术圈层里&#xff0c…...

开源技能安全扫描实战:静态代码分析守护第三方代码集成

1. 项目概述与核心价值在开源生态和自动化工具日益普及的今天&#xff0c;我们经常需要集成或运行来自社区的各种“技能”&#xff08;Skills&#xff09;或插件。这些代码片段极大地提升了效率&#xff0c;但同时也引入了不可忽视的安全风险。想象一下&#xff0c;你从某个仓库…...

如何让Windows电脑成为iPhone的免费AirPlay 2接收器?完整指南

如何让Windows电脑成为iPhone的免费AirPlay 2接收器&#xff1f;完整指南 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 你是否曾经遇到过这样的尴尬场景&#xff1a;会议室里同事用iPhone演示产品&am…...