Unity 性能优化三:动画模块、物理模块

这篇具有很好参考价值的文章主要介绍了Unity 性能优化三:动画模块、物理模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

动画模块

Mecanim 模块

1.1 Animator active的数量

1.1.1 Culling Mode

1.1.2 Optimize Gameobject

1.1.3 Apply Root Motion

1.1.4 Compute Skinning

1.1.5 Animator Initialize

1.2 Legacy动画

物理模块

2.1 物理更新次数

2.1 减少不必要的Collision

2.5 Auto Simulation

2.6 RaycastCommand

2.7 碰撞产生GC

2.8 Raycast、BoxCast、OverlapBox等函数产生的GC


动画模块

Mecanim 模块

1.1 Animator active的数量
1.1.1 Culling Mode

1. 设置animator的culling model,主要是针对视野中看不到的动画体,animator 更新的内容主要有:Retarget、IK、回传的transform信息

Always animate: 看不见也都更新,UI要使用

Culling Update Transform:不更新上面的部分,但逻辑,根节点还是更新的,依然可以收到 OnAnimatorMove 回调,即位置保持更新,动画不再,其他动画将被跳过,比如骨骼动画,IK,OnAnimatorIK,一般推荐使用这个,但是有的复杂动画,在进入视野时会有问题,如果有问题,更改为Always animate

Culling Completely:看不见完全不更新,比如静态的花草动画,不更新也没关系

它主要影响playerloop里面的 Animator.Update()方法的耗时

1.1.2 Optimize Gameobject

在模型导入的RIG 栏中,勾选该选项,native层的骨骼数据,将不会回传到c#层,默认开启

它主要影响playerloop里面的 MeshSkinning.Update(),勾选后,将在主线程计算Animator.WriteJob

1.1.3 Apply Root Motion

对不需要使用根节点的动画,不勾选这个,它的耗时主要体现在Animator.ApplyBuiltinRootMotion函数,当该函数的耗时占比较高时,需要确认场景中Animator对象是否都需要产生位移。

1.1.4 Compute Skinning

在projectsetting 里面,可以勾选这个,表示是否是有GPU加速计算骨骼动画

经uwa测试,开启之后耗时比不开始还大,主要是主线程在等待GPU计算

1.1.5 Animator Initialize

每次setactive或Instantiate激活一个带有animator的组件,会调用这个方法,可以把该物体的animator组件关闭,然后把物体移出屏幕外

1.2 Legacy动画

Animation.Sample的调用次数显示了场景中实际在更新的Animation对象的数量,而它的父节点Animation.Update的调用次数则是显示了场景中存在的Animation对象的数量。因此,优化Legacy Animation动画耗时则是要减少Animation.Sample的调用次数。

物理模块

2.1 物理更新次数

1. Unity物理系统的性能瓶颈主要体现在CPU端的耗时,它的主要耗时函数为FixedUpdate.PhysicsFixedUpdate。在开启Physics设置时,它的主要耗时堆栈是Physics.Processing和Physics.Simulate,需要针对这两个函数进行优化。

影响原因:

调用次数越多则耗时也就越高,调用次数受到Projectsetting->Time->Maximum Allowed Timestep和Fixed TimeStep的影响

Maximum Allowed TimeStep决定fxf了单帧物理最大调用次数,该值越小,单帧物理最大调用次数越少,一般为8~10FPS;Fixed TimeStep决定了FixedUpdate的更新间隔,该值越大,每帧物理更新调用次数越少

当游戏卡顿时,单帧耗时比较长,则在下一帧会调用多次物理模拟,去跟上当前的时间进度 

2.1 减少不必要的Collision

1. Physics Layer中取消不必要的层之间的碰撞检测,避免多余的Contacts的产生。

2. 尽量不要使用MeshCollider,如果非要用,可以勾选在Projectsetting->Prebake Collision Meshes

3. collider 只控制碰撞结果,不进行物理模拟

4. 如果不使用碰撞模拟,只想要触发结果,可以用trigger替代,也可以使用Collider.Bounds实现替代Trigger,避免使用Unity的物理模块。Trigger触发是比较方便的能够使用非物理模拟的方式来进行替换的一种Collision,使用C#逻辑来替代掉Trigger可以降低部分物理模块的耗时。

6. 如果使用了rigidbody,尽量不要直接修改transform改变物体位置,这样会在物理系统里面重新计算其位置,使用add force、move position 

2.5 Auto Simulation

2. 如果项目不使用物理模拟,则在Edit>Project Settings>Physics关闭Auto Simulation选项,也可以通过脚本设置

3. Auto Sync Transforms,在Edit>Project Settings>Physics中开启或关闭,默认关闭,它表示是否在transform 发生改变时,同步到物理系统,关闭时,会把transform的变化缓存到数组里面,在fixedupdate的时候更新,也可以通过脚本设置

需要注意的是,关闭Auto Simulation的情况下,如果需要使用射线检测,则需要开AutoSyncTransform选项

2.6 RaycastCommand

如果射线比较多,可以使用RaycastCommand代替Raycas,在子线程中执行射线检测

2.7 碰撞产生GC

OnCollisionEnter/Stay/Exit 会将返回的的结果,生成新的实例,分配到内存中,所以会造成GC,可以在projectsetting->physics->勾选Reuse Collision Callbacks,默认开启,这样就不会生成新的实例,而是重复使用一个

2.8 Raycast、BoxCast、OverlapBox等函数产生的GC

这些函数,返回的结果都是一个单独的实例,分配到内存中,造成GC开销,使用其对应的NonAlloc版函数


 文章来源地址https://www.toymoban.com/news/detail-614513.html


 

到了这里,关于Unity 性能优化三:动画模块、物理模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 性能优化五:渲染模块压力

    Batching 在GPU渲染前,CPU会把数据按batch发送给GPU,每发送一次,都是一个drawcall,GPU在渲染每个batch的时候,会切换渲染状态,这里的渲染状态指的是: 影响对象在屏幕上的外观的渲染属性或材质,比如:材质球,贴如,颜色,渲染模式(透明、半透明)等 unity中的合批方式:

    2024年02月14日
    浏览(39)
  • Unity游戏开发客户端面经——性能优化(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 性能优化 常问问题总结,有帮助的可以收藏。 性能优化,主要聚焦在 内存、 CPU、GPU 三大方向上。 1.1 详细介绍    Unity内存占用组成 Unity(基本

    2024年03月22日
    浏览(61)
  • 游戏性能优化指南:如何最大程度提升Unity游戏的帧率和流畅度

    FPS (Frames per Second):显示当前游戏帧率。帧率越高,游戏画面越流畅。为提高帧率,可减少游戏对象数量、优化渲染方式等。 Draw Calls :显示当前帧需要渲染的次数。过多的Draw Calls会导致游戏运行缓慢。降低此指标可通过优化场景、材质或使用批处理技术等方式。 Tris :显

    2024年02月06日
    浏览(88)
  • 顶级工程师教你移动端游戏性能优化!Unity官方教程!

    ** 本期将给大家介绍如何提高资源、项目配置和图形的性能。所有教程均来自Unity官方,感兴趣的朋友可以去Unity官网查看完整教学内容。 降低或禁用 Accelerometer Frequency(加速度计频率) Unity每秒钟是会以一定次数统计移动设备的加速度计状态的。如果我们的程序不会用到加

    2024年02月20日
    浏览(51)
  • Unity 内存性能分析器 (Memory Profiler)

    安装有两种 方式一: add package : com.unity.memoryprofiler 方式二: From Packages : Unity Registry 搜索 Memory Profiler 打开:Windows - Analysis - Memory Profiler 打开MemoryProfiler界面,可以链接真机检测,也可以在Editor检测。 点击Capture 保存当下帧的内容。 Capture 完毕之后,会保存本地一个镜像 :

    2024年02月03日
    浏览(68)
  • unity 使用模拟器进行Profiler性能调试

    这篇文章主要记录如何实现通过模拟器对打包的app游戏进行Profiler调试。主要记录一些比较重要的点。 首先你要能够打包unity的安卓包,如果没有安装安卓组件,请先安装组件。 安装完成以后,会在unity的安装目录找到相应的SDK 这个platform-tools后面会用到,而这些组件设置了

    2024年02月07日
    浏览(57)
  • 【unity资源加载与优化章】Profiler优化工具详解

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity性能章 Profiler是Unity中的一种性能分析工具, 用于帮助开发者识别和解决应用程序中的性能问题。它可以提供详细的统计信息,如帧

    2024年04月28日
    浏览(34)
  • Unity游戏开发之游戏动画(Unity动画系统)

    Unity动画系统分为 动画片段 Animation Clip: 动画资源,与模型无关 动画状态机 Animator Controller:帮助我们跟踪当前动画的播放状态,并且根据设置觉得如何切换动画片段 动画组件 Animator Component:玩家角色需要播放动画功能时,需要动画组件,将游戏对象需要的动画状态机(以

    2024年02月13日
    浏览(58)
  • 【Unity游戏开发】动画系统(三)按钮动画

    动画系统是一个比较重要的系统,因为我们做游戏是离不开这个东西的,但是我们又不用自己做动画,而动画系统就是管理美工做的动画,我们加以修饰,使之适配我们的游戏 而按钮动画也是一个点,当然重不重要其实还是你说了算,而按钮动画适配我们的2D和3D游戏 用于

    2024年02月09日
    浏览(56)
  • Unity游戏开发之游戏动画(模型动画制作及导入)

    在stream中下载Fuse软件 在Fuse中制作人物,导出模型为OBJ格式(注意:这里导出目录必须为英文路径,否则只能导出空的OBJ文件) 压缩Obj文件为zip格式 打开Mixamo网站:https://www.mixamo.com/ 点击右侧 UPLOAD CHARACTER 按钮,导入zip文件。 绑定骨骼,等待2~3分钟 绑定完成 选择动作,调

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包