【unity资源加载与优化章】Profiler优化工具详解

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity性能章

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==1==)基础知识
    • 🎶(==2==)使用操作——观察
      • 示例
      • ⭕CPU Usage CPU分析器
        • Hierarchy层级结构
        • Timeline时间线性图
      • ⭕GPU Usage GPU分析器
        • 辨别游戏的问题是CPU密集还是GPU密集


前言

Profiler是Unity中的一种性能分析工具,用于帮助开发者识别和解决应用程序中的性能问题。它可以提供详细的统计信息,如帧率、CPU和GPU使用率、内存占用等。Profiler可以帮助开发者找出应用程序中的性能瓶颈,并提供一些优化建议,以提高应用程序的性能和响应能力。使用Profiler,开发者可以监视应用程序在不同时间段的性能表现,并进行性能比较,以了解哪部分代码或功能对性能有影响,从而进行优化和改进。

  • Profiler工具可以查看每一帧游戏的渲染,加载和内存,可精确到耗时资源本身——故此我们了解它的目的是为了跟踪导致性能问题产生的源头
    在这里插入图片描述

🎶(1基础知识


  • 什么是FPS

FPS(英文全称:frames per second)是指每秒帧数,也被称为帧率。在Unity中,FPS帧率是指游戏画面每秒被更新的次数。常见的FPS帧率是30、60或120。较高的FPS帧率可以提供更流畅的游戏画面,但也需要更强的硬件性能来支持。

从60到50FPS呈现出的是额外3.3毫秒的运行时间,但是从30到20FPS呈现出的是额外的16.6毫秒的运行时间。故此帧率越高运行速度越快

  • 什么是ms

在Unity中,"ms"是指毫秒(milliseconds)。它是一种时间单位,用于测量一段代码的执行时间或者游戏中的帧率。在游戏开发中,通常会使用ms来衡量游戏的性能和优化。 例如,帧时间表示每帧所需的毫秒数,较低的帧时间意味着游戏运行更流畅。

  • 什么是帧时间

在Unity中,帧时间(Frame Time)是指每一帧的渲染时间,即游戏引擎需要花费多少时间来完成一帧的渲染工作。帧时间通常用毫秒(ms)来表示。
帧时间与游戏的帧率(FPS)有密切的关联。帧率是指每秒渲染的帧数,而帧时间则表示完成一帧渲染所花费的时间。 两者之间有一个简单的关系:帧时间 = 1000 / 帧率。例如,如果游戏的帧率是60FPS,则帧时间应该是16.67ms。
较低的帧时间意味着游戏的性能更好,因为引擎可以更快地渲染每一帧。常见的目标是保持帧时间在16.67ms以下,以确保游戏的流畅性。如果帧时间超过这个值,可能会出现卡顿、掉帧等性能问题,需要进行优化和调整。
🅰️


🎶(2使用操作——观察


使用Profiler窗口是为了观察游戏的性能问题,而这篇文章的目的是为了帮助大家了解Profiler窗口

  • 在开发过程中,我们可以通过编辑模式的状态下按住ctrl+7 打开Profiler性能分析窗口但是,此时的分析结果会有误差
    要获得更好的性能分析结果,应该始终在目标设备上对应用程序进行性能分析(打包测试)操作如下:

在这里插入图片描述


图片来源于官方文档:入口


在这里插入图片描述

  • Building setting -> 勾选Development - Autoconnect Profiler - Deep Profiling Support

在这里插入图片描述

  • 移动设备性能测试请见:入口

示例

示例如下:(随意打包出一个杂乱未进行优化的项目)

在这里插入图片描述

  • 以上黄色的是 VSync(垂直同步)区域,一般在CPU视图中选择隐藏,在Hierarchy视图中选择忽视对应的层级为

垂直同步(Vertical Sync)也被称为VSync,是一种在图形渲染中同步帧速率的技术。它工作原理是将显示器的刷新率与游戏或应用程序的帧速率进行同步,以避免画面撕裂(screen tearing)的现象。
在没有垂直同步的情况下,当显示器的刷新率高于游戏或应用程序的帧速率时,画面可能会出现撕裂的效果。这是因为显示器在渲染画面时,可能会在两个或多个帧之间切换,导致画面的不连贯。
通过启用垂直同步,游戏或应用程序的帧速率将被限制为与显示器刷新率相匹配。这样一来,每个新帧将在显示器开始下一次刷新之前被渲染完毕,从而产生更平滑、连贯的画面效果。
然而,垂直同步可能会导致一些问题。当帧速率无法达到显示器的刷新率时,可能会出现画面卡顿的情况。此外,对于竞技游戏等需要更高帧速率的应用场景,可能会关闭垂直同步以追求更低的延迟

⭕CPU Usage CPU分析器


  • CPU完成每帧所花费的时间

在这里插入图片描述

  • 据上图分析,此时帧时间已超过流畅性值(16.67ms)
  • 帧率FPS也在15,这说明画面极其卡顿

Hierarchy层级结构

  • 打开层级我们可以看到
    各个部分对于CPU的内存占用率
    在这里插入图片描述
TotalSelfCallsGC AllocTime msSelf ms
占用时间自身代码运行的时间调用次数GC内存此模块运行的时间自身代码占用的时间

注: GC分配的内存Struct和Class一次性分配的内存别超过2KB

GC的内存分配:一次性不得超过2KB,每帧都具有20B以上的内存分配

在这里插入图片描述


Timeline时间线性图

CPU 任务执行的顺序和对应线程负责任务

可在其中查看线程情况
在这里插入图片描述


⭕GPU Usage GPU分析器


辨别游戏的问题是CPU密集还是GPU密集

一般情况下,GUP分析器是默认未激活状态的,需要手动开启(但是开启后会额外增加开销)
如下图所示,点击勾选 GPU Usage的选项。开启GPU

在这里插入图片描述

  • 此时可以通过比对CPU 和 GPU 的数据 来判断 游戏是CPU密集还是GPU密集
    在这里插入图片描述

⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/454811.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今日AI:GPT-4.5意外曝光可能6月发布、UP主借AI识别情绪播放量186万、全球首个AI程序员诞生

欢迎来到【今日AI】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 📢一分钟速…

简述类与对象

一、两者关系 类是Java语言中最重要的数据类型,用于创建具体实例(对象) 抽象出一类事物共有的属性和行为,即数据以及数据上的操作 类是对现实事物的模拟,包含属性(成员变量)和行为&#xff0…

《如何使用C语言去下三子棋?》

目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋 3.1玩家行棋 3.2电脑行棋 4、判断是否和棋 5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件,分别是两个源文件test.c game.c 和…

排序算法之快速排序算法介绍

目录 快速排序介绍 时间复杂度和稳定性 代码实现 C语言实现 c实现 java实现 快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据…

动态规划——传球问题

题目链接:1.传球游戏 - 蓝桥云课 (lanqiao.cn) 本题关键在于动态规划的数组设计,以及围坐一圈时索引的变化。 首先是动态规划,由于是求球传递m次回到第一位同学,那么就可以设计成一个二维数组,每个位置代表的是&#x…

【LeetCode热题100】240. 搜索二维矩阵 II

一.题目要求 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 ‘每列的元素从上到下升序排列。 二.题目难度 中等 三.输入样例 示例 1: 输入:matrix [[1,4,7…

蓝桥杯 填空 卡片

蓝桥杯 填空题 卡片 解题思路&#xff1a; 我们只需要消耗完卡片的个数即可。 代码示例&#xff1a; #include<bits/stdc.h> using namespace std; int a[10]; bool isEnd(){for(int i0;i<10;i){if(a[i]-1)return false;}return true; } bool getN(int x){while(x){i…

ARM 汇编指令:(五)CMP指令

目录 1.CMP比较指令 2.指令条件码 cond 1.CMP比较指令 CMP指令是计算机指令集中的一种比较指令&#xff0c;用于比较两个操作数的大小关系或相等性&#xff0c;并根据比较结果设置或更新条件码寄存器&#xff08;或程序状态字&#xff09;的标志位。 指令格式&#xff1a;C…

jenkins + gitea 自动化部署Docker项目(vue + .NET Core)

废话不多说&#xff0c;服务先安装好Jenkins 和 gitea 理论上 gitlab 一样的实现流程 Jenkins 配置&#xff1a; 第一步装插件 安装 Generic Event 安装 gitea 相关插件 创建一个任务 设置 git 根据自己git 的认证填写对应的认证方式 构建环境记得勾选这个&#xff0c;会清…

【关注】国内外经典大模型(ChatGPT、LLaMA、Gemini、DALL·E、Midjourney、文心一言、千问等

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Python XML数据处理库之xmltodict使用详解

概要 在 Python 的开发中,处理 XML 数据是一项常见的任务。然而,Python 标准库中的 XML 解析器使用起来可能较为繁琐,需要编写大量的代码来处理 XML 数据。幸运的是,有一个名为 xmltodict 的第三方库可以帮助我们简化这个过程。本文将深入探讨 xmltodict 库的各个方面,包…

16、设计模式之观察者模式(Observer)

一、什么是观察者模式 观察者模式属于行为型模式。在程序设计中&#xff0c;观察者模式通常由两个对象组成&#xff1a;观察者和被观察者。当被观察者状态发生改变时&#xff0c;它会通知所有的观察者对象&#xff0c;使他们能够及时做出响应&#xff0c;所以也被称作“发布-订…

【git】GitHub仓库没有 Contribution activity

解决方案 检查并更改本地的 git 绑定的邮箱和名字 git config --global user.name "Your New Name" git config --global user.email "yournewemailexample.com"查询方式 git config --global user.name git config --global user.email成功显示

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

Spring Cloud Alibaba微服务从入门到进阶(三)

Spring Cloud Alibaba是spring Cloud的子项目 Spring Cloud Alibaba的主要组件&#xff08;红框内是开源的&#xff09; Spring Cloud是快速构建分布式系统的工具集&#xff0c; Spring Cloud提供了很多分布式功能 Spring Cloud常用子项目 项目整合 Spring Cloud Alibaba …

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来&#xff0c;在面试的过程中&#xff0c;发现这个需求&#xff08;导出html表格&#xff09;比较常见&#xff0c;同时也引起我的兴趣&#xff0c;所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

Linux 配置ssh、scp、sftp免密登录

SSH&#xff08;Secure Shell&#xff09;是一种安全的远程登录协议&#xff0c;它使用客户端-服务器架构促进2个系统之间的安全通信&#xff0c;并允许用户远程登录服务器。在某些高可用环境下&#xff0c;服务器之间可能还需要配置免密互信&#xff0c;即基于密钥验证登录。 …

vue3 + antd二次封装a-table组件

前置条件 vue版本 v3.3.11 ant-design-vue版本 v4.1.1 内容梗概 二次封装a-table组件&#xff0c;大大提高工作效率和降低项目维护成本&#xff1b; 先看效果图 代码区域 utils.js文件 // 用于模拟接口请求 export const getRemoteTableData (data [], time 1000) >…

STM32第八节:位带操作——GPIO输出和输入

前言 我们讲了GPIO的输出&#xff0c;虽然我们使用的是固件库编程&#xff0c;但是最底层的操作是什么呢&#xff1f;对&#xff0c;我们学习过51单片机的同学肯定学习过 sbit 修改某一位的高低电平&#xff0c;从而实现对于硬件的控制。那么我们现在在STM32中有没有相似的操作…

【数据结构】Set的使用

文章目录 一、Set的使用1.Set的常用方法&#xff1a;1.boolean add(E e)2.void clear()3.boolean contains(Object o)4.boolean remove(Object o)5.int size()6.boolean isEmpty()7.Object[] toArray()8.boolean containsAll(Collection<?> c)9.boolean addAll(Collecti…
最新文章