IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity性能优化之unity profiler -> 正文阅读

[游戏开发]Unity性能优化之unity profiler

Unity profiler 所能收集到的内容

  1. CPU消耗量(包括每一个子系统)
  2. 基本、详细的渲染和GPU的信息
  3. 运行时内存的分配和总消耗量
  4. 音频/数据的使用情况
  5. 物理引擎(2D\3D)的使用情况
  6. 网络消息传递和活动情况
  7. 视频回放的使用情况
  8. 基本和享系的用户界面性能
  9. 全局光照同继数据

常用的使用profiler的方法

  1. 指令注入:所谓的指令注入就是通过代码开启一个指令命名,然后在目标函数前开启,目标函数结束关闭,以此来观察目标函数的行为(后面会说到),这里面可能包括,调用次数、总共的执行时间、分配了多少内存、、、
  2. 基准分析:所谓的基准分析就是,当某一个时刻或者某一阶段,性能突然发生变化,如渲染帧率FPS突然增大、总体内存消耗突然增多或者其他指标在表现上突然出现的峰值,那么这个时候就可能存在性能问题

使用时注意事项

  1. profiler可以分析的项目类型有很多,如本地实例、浏览器上运行的WEbGl实例、IOS设备上运行的远程实例、android设备上的远程实例都是可以连接到profiler的 但是需要注意的在打包的时候需要将Development Build 和AutoConnectProfiler标志打开,如下
    在这里插入图片描述

怎样连接到IOS远程实例

  1. 构建项目的时候打开DevelopmentBuild和autoconnect
  2. 设备连接到本地wifi网络
  3. 通过usb将设备连接到MAC上
  4. 和平常一样构建项目
  5. 打开unity 的profiler,在connectplayer中选择要连接的远程实例,如下在这里插入图片描述
  6. 打开profiler就可以看到正在收集的远程实例数据

连接到Android的流程基本类似

profiler 视图

网上有很多这里不再赘述

性能分析的最佳方法

基本流程

  1. 验证目标脚本是否出现在场景中
  2. 验证脚本在场景中出现的次数是否正确
  3. 验证事件的正确顺序

验证目标脚本是否出现在场景中 ,在hierarchy中输入要查找的脚本名称,不区分大小写

在这里插入图片描述
在这里插入图片描述

验证脚本次数

在这里插入图片描述
观察一下调用次数,如果次数比预期的多,可能是在编写代码的时候,发生了多此的创建等情况

验证事件顺序

对于unity的生命周期函数而言其执行顺序是一定的,但是,这种顺序是指在单一的脚本中,如果我在一个awake中初始化了一些数据,在另一个awake中修改了这些数据,那么就可能会发生一些不可预知的错误,为什么?当场景中的对象发生重建或者重组的时候,代码库和编译过程中的随机变化就可能导致这些awake顺序发生变化,所以,永远不要去指望所编写的函数按照预期的顺序去执行,其他的生命周期函数也是同样的道理,但是可以确定的是,awake一定是早于start执行,(包括其他的不同的周期函数,所以对于上述情况来看,可以在awake中初始化数据,在start中进行数据的修改)

如何对代码片段进行针对性的分析呢?

上文已经说了,对于一个出现性能问题的脚本或者代码分析的基本流程,可能有的人会注意到,上文说的分析粒度太大了,而我们平常遇到的问题,基本上是某个函数,或者某个语句所导致的性能问题,那么怎样才能将粒度具体到某个函数或者某个语句呢?

两类方法

  1. 从代码脚本控制profiler
    可以通过profiler类在脚本中控制profilier,使用UnityEngine.profiling.profiler类的BeginSample和EndSampler方法来访问,示例如下
void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            text();
        }
    }
    void text()
    {
        Profiler.BeginSample("my profiler sample");
        for(int i = 0; i <10;i++)
        {
            Debug.Log("按下a");
            i += 0;
        }
        Profiler.EndSample();
    }

在这里插入图片描述
因为我是在函数里面,for循环的外面开始,循环结束之后,停止,也就是说,这个my profiler sample代表的就是这个for循环执行所消耗的资源,如果在函数外开始,函数执行完毕结束的话,代表的就是整个函数执行所消耗的资源
2. 自定义定时和日志记录的方法
使用StopWatch类进行计时,网上有很多关于这个类的使用方法,这里不再赘述

博客仅为总结个人学习,欢迎留言

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 13:11:29  更:2021-12-13 13:12:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:29:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码