Unity面试题——Unity性能优化

简介: Unity面试题——Unity性能优化

168. lod 是什么,优缺点是什么

LOD 技术即 Levels of Detail 的简称,意为多细节层次。LOD 技术指根据物体模型的节点在显示环境中所 处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

优点:可根据距离动态地选择渲染不同细节的模型

缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。

169. MipMap 是什么?作用?

在三维计算机图形的贴图渲染中有一个常用的技术被称为 Mipmapping。为了加快渲染速度和减少图像 锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。

170. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。

做一个 pool,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回

171. 如何优化内存?

有很多种方式,例如

1.压缩自带类库;

2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接 Destroy 掉;

3.释放 AssetBundle 占用的资源;

4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;

5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

172. 动态加载资源的方式?和区别

1.通过 Resources 模块,调用它的 load 函数:可以直接 load 并返回某个类型的 Object,前提是要把这 个资源放在 Resource 命名的文件夹下,Unity 不关有没有场景引用,都会将其全部打入到安装包中。 Resources.Load();

2.通过 bundle 的形式: 即将资源打成 asset bundle 放在服务器或本地磁盘, 然后使用 WWW 模块 get 下来, 然后从这个 bundle 中 load 某个 object。

3.通过 AssetDatabase.loadasset :这种方式只在 editor 范围内有效,游戏运行时没有这个函数, 它通常 是在开发中调试用的 【AssetDatabase 资源数据库】

区别:Resources 的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)是不利的,所以 unity 推荐的方式是不用它, 都用 bundle 的方式替代, 把资源达成几个小 的 bundle, 用哪个就 load 哪个,这样还能分包发布和 patch,但是在开发过程中,不可能没更新一个 资源就打一次 bundle, 所以 editor 环境下可以使用 AssetDatabase 来模拟,这通常需要我们封装一个 dynamic resource 的 loader 模块,在不同的环境下做不同实现。

动态资源的存放

有时我需要存放一些自己的文件在磁盘上,例如我想把几个 bundle 放在初始的安装里, unity 有一个 streaming asset 的概念,用于提供存储接口的访问。我们需要在编辑器建立一个 StreamingAssets 名字 的文件夹,把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过 Application.streamingAssetsPath 来得到。

173. 请简述一下对象池原理,什么情况下使用?

对象池背后的理念其实是非常简单的。我们将对象存储在一个池子中,当需要时在再次使用,而不是 每次都实例化一个新的对象。池的最重要的特性,也就是对象池设计模式的本质是允许我们获取一个“新的”对象而不管它真的是一个新的对象还是循环使用的对象。 对象池通常用于在那些需要经常创建又销毁的对象比如我们场景中的小怪,经常需要创建和销毁,我 们就可以在小怪销毁的时候,不真正的销毁而是,而是把它放入对象池中等到下一次我们需要创建小怪的时候,再从对象池中取出来。

174. 使用 mipmap 有什么好处?什么情况下使用?

Mipmap 纹理技术是目前解决纹理分辨率与视点距离关系的最有效途径,它会先将图片压缩成很多逐渐 缩小的图片,例如一张 6464 的图片,会产生 6464,3232,1616,88,44,22,11 的 7 张图片,当屏幕上需 要绘制像素点为 2020 时,程序只是利用 3232 和 1616 这两张图片来计算出即将显示为 2020 大小 的一个图片,这比单独利用 32*32 的那张原始片计算出来的图片效果要好得多,速度也更快。

175. Unity 内存优化?

GC 垃圾回收

176. 你认为 unity 在开发过程中哪些地方比较容易造成内存泄漏和内存泄漏 问题?如何避免?

脚本做载入不删除处理时,往往脚本中还有一些不用的变量,容易导致内容泄漏

177. 使用 NGUI 开发滚动视图,当滚动列表达到几百条的时候,如何才能保 证界面的滚动流畅运行

  1. 每个滚动条目都是同一个预设体的实例

2.做缓存,只要实例化视野范围内滚动条目,往上超出视野部分,自动填补到视野的下面

178. 如何解决过多创建和删除对象带来的卡顿问题

对象池,把不用对象缓存到一个对象列表中

179. Unity 资源加载的有几种方式,简述 asset bundie

  1. 直接在脚本中 public 一个对象,然后在监视器面板进行赋值
  2. 直接在程序中进行 find 查找
  3. Resource.load
  4. 把资源打成 Assetbudle,然后用的时候 load 进来 assetbundle 就是对资源的打包处理,同时这种资源格式便于从互联网上下载

180. 背包系统中只有 20 个格子,现在有总共有 100 个物体,除了显示在 视野中的 20 个外,对其他的处理方法?(注:将其他隐藏起来不可行,对象池得有具体的说明)

  1. 每个滚动条目都是同一个预设体的实例
  2. 做缓存,只要实例化视野范围内滚动条目,往上超出视野部分,自动填补到视野的下面
目录
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
Java 最常见的面试题:如何做 mysql 的性能优化?
Java 最常见的面试题:如何做 mysql 的性能优化?
|
2月前
|
SQL 关系型数据库 MySQL
MYSQL-SQL语句性能优化策略以及面试题
MYSQL-SQL语句性能优化策略以及面试题
60 1
|
2月前
|
Web App开发 缓存 前端开发
当面试官问我前端可以做的性能优化有哪些
当面试官问我前端可以做的性能优化有哪些
|
2月前
|
测试技术 Android开发
Android开发规范,性能优化,Android面试2024
Android开发规范,性能优化,Android面试2024
|
1天前
|
算法 Java API
Android性能优化面试题经典之ANR的分析和优化
Android ANR发生于应用无法在限定时间内响应用户输入或完成操作。主要条件包括:输入超时(5秒)、广播超时(前台10秒/后台60秒)、服务超时及ContentProvider超时。常见原因有网络、数据库、文件操作、计算任务、UI渲染、锁等待、ContentProvider和BroadcastReceiver的不当使用。分析ANR可借助logcat和traces.txt。主线程执行生命周期回调、Service、BroadcastReceiver等,避免主线程耗时操作
17 3
|
13天前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
35 9
|
7天前
|
SQL 关系型数据库 MySQL
【面试高频 time:】关于MYsql性能优化的理解
【面试高频 time:】关于MYsql性能优化的理解
13 0
|
12天前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
16 0
|
2月前
|
算法 网络安全 Python
sqlmap性能优化_sqlmap 优化 不接受请求体,阿里巴巴网络安全面试题答案
sqlmap性能优化_sqlmap 优化 不接受请求体,阿里巴巴网络安全面试题答案
|
2月前
|
缓存 监控 算法
Python性能优化面试:代码级、架构级与系统级优化
【4月更文挑战第19天】本文探讨了Python性能优化面试的重点,包括代码级、架构级和系统级优化。代码级优化涉及时间复杂度、空间复杂度分析,使用内置数据结构和性能分析工具。易错点包括过度优化和滥用全局变量。架构级优化关注异步编程、缓存策略和分布式系统,强调合理利用异步和缓存。系统级优化则涵盖操作系统原理、Python虚拟机优化和服务器调优,需注意监控系统资源和使用编译器加速。面试者应全面理解这些层面,以提高程序性能和面试竞争力。
32 1
Python性能优化面试:代码级、架构级与系统级优化