Unity性能优化(三)杂项优化与结语

一、音频优化

1、音频预加载

当我们播放音频时,操作系统会将音频加载到内存中,然后从内存中播放,如果音频比较小,可能没什么影响,但是如果音频比较大,就会出现明显的卡顿。我们可以选择一个合适的时机(比如加载地图时),提前加载音频,这样播放的时候就能直接从内存里读取,避免卡顿。

使用示例

使用代码控制

编写一个按下按键播放音频的脚本,挂载到场景物体上
在这里插入图片描述

public class AudioTest : MonoBehaviour
{
    public AudioSource audio;

    private void Awake()
    {
        audio = GetComponent<AudioSource>();
        audio.clip.LoadAudioData();
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.W))
        {
            audio.Play();
        }
    }
}

按下播放以后,注意到Profiler的Audio窗口,先是内存占用急剧增加,随即Cpu占用急剧增加,并且注意到当前帧的帧长达到了400ms,远超出达到60帧所需要的16.7ms,确实造成了卡顿

在这里插入图片描述
在这里插入图片描述
在Awake中进行提前加载

private void Awake()
    {
        audio = GetComponent<AudioSource>();
        audio.clip.LoadAudioData();//提前加载音频
    }

运行
注意到内存和CPU占用没有明显的波动,但是内存一开始就有51.8MB的占用,为了避免不必要的内存占用,我们应该在合适的时候卸载音频
在这里插入图片描述
在这里插入图片描述

audio.clip.UnloadAudioData();//卸载音频
在编辑器中控制

在编辑器中勾选preload audio data即可自动预加载,勾选load in background可以在副线程中加载
在这里插入图片描述

2、单声道与双声道

双声道(3D音)对比单声道会占用两倍的内存,对于一些我们不希望实现近大远小效果的音频(比如背景音乐),可以设置为单声道(Mono),在音频资源中勾选Force to mono即可
在这里插入图片描述

效果对比

可以看到修改为单声道以后Imported size变为2.7MB,对比之前减少了将近一半
在这里插入图片描述

3、音频对象池

Unity中自带了一个音频对象池(不了解对象池的同学请自行学习),打开ProjectSetting/Audio,可以看到max virtual voices和max real voices,前者代表池子大小,后者代表同时播放的声音数。一般来说人能分辨的声音数量是有限的,不需要同时播放很多音效,借助对象池可以帮我们进行限制。
在这里插入图片描述

4、最远和最小距离

在AudioSource中可以设置音频的最大和最小可以听到的距离,并且可以设置对应的曲线,超出一定距离后关闭不必要的音效能帮助减少cpu占用

在这里插入图片描述

二、碰撞体优化

1、了解Collider的复杂度

基本上来说形状越复杂的碰撞体性能消耗越高,最简单(并且也是处理器开销最低)的碰撞体是原始碰撞体类型。在 3D 中,这些碰撞体为盒型碰撞体、球形碰撞体和胶囊碰撞体。在 2D 中,可以使用 2D 盒型碰撞体 和 2D 圆形碰撞体。

2、静态对象和静态碰撞体

确定不会移动的物体建议勾选为static,因为Unity内部有优化,会将静态碰撞体的数据预加载在一个数据结构中以节省计算,对于静态碰撞体,不要在游戏运行时改变碰撞体的类型或移动它,如果你突然改变它,会重新进行大量计算
在这里插入图片描述
在这里插入图片描述

3、碰撞体的休眠机制

unity中的碰撞体如果一段时间没有发生移动和碰撞,就会进入休眠状态,当需要计算时,会立即醒来

三、代码优化

使用设计模式,不要在Update里重复进行复杂的计算等。。。

四、总结

性能优化的内容很多,随着你对unity的了解越深,你自然就能知道更多性能优化的方法。注意不要一味追求极限优化,如果当前已经达到你的目标配置和目标帧数,请将更多的精力放在其他方面。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拉达哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值