总体性能——动画模块性能

来源:互联网 发布:mac 安装kvm 编辑:程序博客网 时间:2024/06/05 10:30

Animator.ApplyOnAnimatorMove:调用次数太多说明场景中角色数量太多了;

Animator.ProcessAnimationJob:关于AnimationClip的采样和读取;

WaitingForJobUnity5.X已经将其放入了子线程,等待子线程的处理;

角色的多少和AnimationClip的复杂程度影响耗时;

Animators.FireAnimationEventsAndBehaviour:动画事件;

Animators.DirtySceneObjects:优化时,勾选Optimiz Game Object选项;




打斗比较激烈时,开销比较高;

MOnAnimatorMoveDelegate.OnAnimatorMoveOnAnimatorMove的重写函数;

FK&Statemachine:正向动力学和状态机;(Animator Controller,状态机越负责,开销越大)

Write:重写入的过程,每一帧中回写每个骨骼节点的Transform的耗时;

MeshSkinning.Update:骨骼数量和三角面片的数量多时,开销高;

 

优化方案:

1:控制SkinnedMesh的骨骼数、动画曲线(复杂度和数量)等;

2:控制Animator.Update更新模式;

Always Animated / Cull Update Transform / Cull Complete

3:开启Optimize GameObject选项;(开启后,Write写回的耗时会大幅降低)



原因:触发了GameObjectInstantiateActive;

Animator.InitializeInstantiateActive GameObject时,GameObjectAnimator Controller上有很多状态机,Unity会重建上面的DataSetAvatarDataSetControllerDataSet),重建动画模块会有一定开销;


解决方案:

除了第一次使用InstantiateActive外,之后通过对Animator Controller组件进行ActiveDeactive,而GameObject不作处理,仍是Active状态,再把GameObject移出屏幕外;

UIAnimator不要使用InstantiateActive方式;


处理后的效果如下:



推荐文章链接:如何读懂UWA性能报告?—动画篇





0 0
原创粉丝点击