Unity之Unity面试题(六)

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity之Unity面试题(六)
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 面试题

为面试者节省宝贵的学习时间,避免困惑!

![请添加图片描述](https://img-blog.csdnimg.cn/direct/b1a7447201d740049458302fb61f865a.jpeg)

文章目录

  • 一、内存优化
    • 1、资源内存占用
      • 1.1、纹理
      • 1.2、网格
    • 2、引擎模块自身内存占用
    • 3、托管堆内存占用
  • 二、GPU渲染管线
  • 三、u3d提供了一个用于保存读取数据的类是什么?
  • 四、Coroutine的原理?
  • 五、Image和RawImage的区别?
  • 六、Material和Physic Material区别?
  • 七、如何检测物体是否被其他对象遮挡?
  • 八、获取、增加、删除组件的命令分别是什么?
  • 九、什么是LightMap?
  • 十、MeshCollider和其他Collider的不同?


一、内存优化


内存开销无外乎分为以下三大部分:1、资源内存占用;2、引擎模块自身内存占用;3、托管堆内存占用

1、资源内存占用

在一个较为复杂的大中型项目中,资源的内存占用往往占据总体的70%以上,一般来说,项目的资源主要可分为纹理、网格、动画、音频、材质、着色器、字体等等,其中纹理、网格、动画、音频是最容易造成大内存开销的资源。

1.1、纹理

纹理资源可以说是几乎所有游戏项目中占据最大内存开销的资源,一个2048x2048的纹理可能占用内存16M,因此项目中纹理资源的使用是否得当会极大的影响项目内存的占用。

  • 纹理格式
    纹理格式是研发团队最需要关注的纹理属性,因为它不仅影响纹理的内存占用,同时还决定了纹理的加载效率,一般来说建议开发团队尽可能根据硬件的种类选择硬件支持的纹理格式。

  • 纹理尺寸
    一般来说,纹理尺寸越大,则内存占用越大,所以尽可能降低纹理尺寸,如果512x512的纹理对于显示效果已经够用,那么就不要用1024x1024的纹理,因为后者的内存占用是前者的四倍。

  • MipMap
    MipMap旨在有效降低渲染带宽的压力,提升游戏的渲染效率,但是,开启MipMap会将纹理内存提升1.33倍,对于具有较大纵深感的游戏来说,3D场景模型和角色建议开启MipMap,但是不要对UI也开启MipMap功能,开启MipMap并不会提升渲染效率,反倒会增加无谓的内存占用。

  • Read&Write
    一般情况下,纹理资源的“Read&Write”功能在Unity引擎是默认关闭的,但是有的纹理资源仍会开启该选项,开启该选项会将纹理内存增加一倍。

1.2、网格

网格资源在较为复杂的游戏中,往往占据较高的内存

Mesh资源的数据中常常会包含大量的Color数据、Normal数据和Tangent数据,这些数据的存在将大幅度增加Mesh资源的文件体积和内存占用,其中Color数据和Normal数据主要为MAX和Maya模型导出时设置所生成,而Tangent一般为导入引擎时生成,一般这些数据主要为shader所用,来生成酷炫的效果。

2、引擎模块自身内存占用

3、托管堆内存占用

对于绝大数项目来说,其托管堆内存是由Mono分配和管理,托管的本意是Mono可以自动的改变堆的大小来适应你所需要的内存,并且适时的调用垃圾回收操作来释放已经不需要的内存,从而降低开发人员在代码内存管理方面的门槛。

但并不意味着可以肆无忌惮的开辟托管堆内存,因为目前Unity存在一个很严重的问题:Mono的堆内存一旦分配,就不会返还给系统,这意味着Mono的堆内存只升不降。

  • 不要在Update、FixUpdate等较高调用频率的函数中开辟堆内存,会对项目内存和性能造成非常大的危害。
  • Log输出,不要在项目中存在大量Log输出的情况,以避免不必要的内存分配
  • 使用对象池,可以避免大量对象的创建。
  • 使用StringBuilder替代string,String为不可变字符串,对于执行大量字符串操作的过程,会分配大量空间,显著降低性能,而StringBuilder是一个可变字符串,可以通过追加、移除、替换或插入字符来修改。
  • 减少装箱操作,装箱和拆箱过程需要进行大量的计算,装箱时需要创建一个全新的对象,需要进行内存的分配。


二、GPU渲染管线


渲染管线是将三维场景模型转换到屏幕像素空间输出的过程,图形渲染管线主要包括两个功能:

  • 一是将物体3D坐标转换为屏幕空间2D坐标
  • 二是为屏幕每个像素点进行着色
  1. 应用阶段:
    由CPU主要负责的阶段,且完全由开发人员掌控,CPU将决定递给GPU什么样的数据,有时候还会对这些数据进行处理,并告诉GPU这些数据的渲染状态,这一阶段最重要的输出是渲染所需的几何信息,即渲染元。
    • 准备好场景数据。如摄像机位置,视锥体,场景中包含的模型
    • 粗粒度剔除。为了提高渲染性能
    • 设置好每个模型的渲染状态
  2. 几何阶段:
    负责大部分多边形操作和顶点操作,将三维空间的数据转换为二维空间的数据。
    • 顶点着色器:计算顶点光照
    • 曲面细分着色器:需要根据现有的顶点来生产更多的顶点
    • 几何着色器:通过现有图元来做一些几何方面的操作,生成更多的顶点和图元
    • 顶点裁剪:裁剪掉屏幕外的顶点
    • 屏幕映射:把顶点从3D坐标空间转换到2D坐标空间
  3. 光栅化阶段:
    决定每个渲染图元中哪些像素应该被绘制在屏幕上,它需要对上一阶段得到的逐顶点数据进行插值
  4. 像素处理阶段:
    给每一个像素正确配色,最后绘制出整幅图像


三、u3d提供了一个用于保存读取数据的类是什么?


PlayerPrefs类是一个本地持久化保存与读取数据的类,支持3种数据类型的保存和读取,整型、浮点型、字符串型。

  • 整型 SetInt() GetInt()
  • 浮点型 SetFloat() GetFloat()
  • 字符串 SetString() GetString()


四、Coroutine的原理?


协程分为两部分,协程与协程调度器:协程仅仅是一个能够中间暂停返回的函数,而协程调度是在MonoBehaviour的生命周期中实现的。准确的说,Unity只实现了协程调度部分,而协程本身其实就是用了C#原生的迭代器方法。

  1. 协程本体:C#的迭代器函数
    C#的迭代器方法其实就是一个协程,你可以使用yield来暂停,使用MoveNext()方法来继续执行,当一个方法的返回值协程了IEnumerator类型,他就会自动被解析成迭代器方法,你调用此方法的时候不会真的运行,而是会返回一个迭代器,需要用MoveNext()来真正的运行

  2. 协程调度:MonoBehaviour生命周期中实现
    在MonoBehaviour生命周期的Update和LateUpdate之间,会检查这个MonoBehaviour下挂载的所有协程,并唤醒其中满足唤醒条件的协程


五、Image和RawImage的区别?


  • RawImage不支持交互,可用于显示任何图片。一般用在背景和图标上。
  • Image只能使用Sprite属性的图片,通常用于用户界面元素。适用于交互性强的元素。
  • Image比RawImage更消耗性能。


六、Material和Physic Material区别?


  • Material为普通的贴图材质
  • Physic Material为物理材质,用于处理物理效果,比如滑动摩檫力,静态摩檫力,反弹等属性


七、如何检测物体是否被其他对象遮挡?


射线检测 EventSystem.IsPointerOverGameObject



八、获取、增加、删除组件的命令分别是什么?


  • 获取组件 GetComponent()
  • 增加组件:AddComponent()
  • 删除组件:Destroy()


九、什么是LightMap?


就是指在三维软件里实时打光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。

以下是关于Lightmap的一些关键信息:

  • 用途: Lightmap用于渲染静态阴影,适用于不需要频繁变化的场景元素。
  • 生成过程: Lightmap的生成通常是通过烘焙(baking)的方式进行的。在烘焙过程中,光照数据被预先计算并存储在纹理中。
  • 性能优势: 使用Lightmap可以在几乎没有性能损耗的情况下提供高质量的阴影效果。
  • 纹理尺寸: Lightmap通常存储在较低分辨率的纹理上,例如64x64或32x32,以节省内存和加速渲染。


十、MeshCollider和其他Collider的不同?


  • MeshCollider是基于顶点数据,片面组成,消耗性能
  • BoxCollider基于算法的,性能好




TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网摸鱼日报(2024-04-09)

互联网摸鱼日报(2024-04-09) 36氪新闻 Hulu登陆Disney,迪士尼的流媒体战略完成整合 大火的“新中式”,给消费行业带来了什么? 特斯拉“今天的坑”,三年前最风光时就埋下了 美国的2024,不是软着陆而是不着陆&#x…

登陆qq,经常收到qq游戏中心的推送信息,关闭推送信息

手动关闭推送信息的步骤: 1.点开左侧游戏中心 2、在打开界面,点击左下角自己的头像 3、打开设置中心,关闭所有的推送 4、完成关闭,不会推送了

头歌-机器学习 第13次实验 特征工程——共享单车之租赁需求预估

第1关:数据探索与可视化 任务描述 本关任务:编写python代码,完成一天中不同时间段的平均租赁数量的可视化功能。 相关知识 为了完成本关任务,你需要掌握: 读取数据数据探索与可视化 读取数据 数据保存在./step1/…

vmware esxi6.0安装配置操作

系统安装及配置 在服务器上安装ESXI 6.0 提示是否继续安装 如果不想安装,按ESC后再按F11即可,稍后电脑会重启. 继续安装,则按回车键 按F11同意声明继续 选择将EXSI 安装到哪个硬盘上,我这里使用的是虚拟机,所以只有这一个选项 选择默认键盘布局,默认的美国键盘即可 设置root…

华为ensp中PPP(点对点协议)中的CHAP认证 原理和配置命令

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月11日6点00分 PPP协议(Point-to-Point Protocol)是点到点协议,是一种常用的串行链路层协议,用于在两个节点之间建立点…

Facial Micro-Expression Recognition Based on DeepLocal-Holistic Network 阅读笔记

中科院王老师团队的工作,用于做微表情识别。 摘要: Toimprove the efficiency of micro-expression feature extraction,inspired by the psychological studyof attentional resource allocation for micro-expression cognition,we propose a deep loc…

前端自动化测试的方法和工具

前端自动化测试是通过自动化工具来模拟用户操作,验证前端应用的功能、性能和用户体验是否符合预期的过程。以下是几种常见的前端自动化测试方法: 单元测试(Unit Testing): 单元测试是针对代码中最小的可测试单元进行的…

递归的基本思想

递归解决问题的思路是将大问题拆解成更小的同类问题,并通过解决这些更小的问题来解决原始问题。这种方法适用于问题可以被分解成相似的子问题的情况。 递归的基本要素: 基础情况(Base Case):递归函数中需要有一个或多…

Docker - MySQL

博文目录 文章目录 说明前置命令 说明 Docker Hub MySQL 数据卷印射容器内的路径mysql/var/lib/mysqlmysql.conf/etc/mysql/conf.d 容器内的路径说明/var/lib/mysql数据目录/etc/mysql/conf.d/my.cnf配置文件 部分环境变量是否必要说明MYSQL_ROOT_PASSWORD必需设置超级用户 …

【网站项目】校园失物招领小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

chromium 协议栈 cronet ios 踩坑案例

1、请求未携带 Accept-Language http header 出现图片加载失败 现象: 访问 https://www.huawei.com/cn/?ic_mediumdirect&ic_sourcesurlent 时出现图片加载失败的问题 预期结果: 原因: 网络库删除了添加 Accept-Language header 的逻…

搭建NFS服务器,部署k8s集群,并在k8s中使用NFS作为持久化储存

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s概述 2、NFS简介 二、NFS服务器…

分享 WebStorm 2024 激活的方案,支持JetBrains全家桶

大家好,欢迎来到金榜探云手! WebStorm公司简介 JetBrains 是一家专注于开发工具的软件公司,总部位于捷克。他们以提供强大的集成开发环境(IDE)而闻名,如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工具…

SOCKS代理是如何增强网络隐私?

在数字化时代🌐,网络隐私的重要性日益凸显。个人和组织都在寻找有效的方法来保护自己的网络活动不受侵犯。SOCKS代理作为一种流行的网络协议,提供了一种有效的手段来增强网络隐私。本文将详细介绍SOCKS代理是如何工作的,以及它是如…

C++模板编程

模板是泛型编程的基础,先给出泛型编程的概念。 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 应用场景:比如要实现一个通用的,进行两个变量互相交换的函数,此时可以通过函数重载的方式&…

【从浅学到熟知Linux】进程状态与进程优先级(含进程R/S/T/t/D/X/Z状态介绍、僵尸进程、孤儿进程、使用top及renice调整进程优先级)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程状态进程状态查看R运行状态(running)S睡眠状态(sleeping&a…

蓝桥杯嵌入式速成

蓝桥杯嵌入式速成 cubmx创建工程利用官方提供的LCD代码创建工程(15届不能用)利用官方提供的LCD代码创建工程(15届能用)Keil配置头文件注意其他注意 LED闪烁 按键短按长按双击 LCD高亮行高亮字符 RTCADCI2Cuart接收发送 PWMDAC定时…

Vue.js------vue基础

1. 能够了解更新监测, key作用, 虚拟DOM, diff算法2. 能够掌握设置动态样式3. 能够掌握过滤器, 计算属性, 侦听器4. 能够完成品牌管理案例 一.Vue基础_更新监测和key 1.v-for更新监测 目标:目标结构变化, 触发v-for的更新 情况1: 数组翻转情况2: 数组截取情况3…

VIT论文阅读

论文地址:https://arxiv.org/pdf/2010.11929.pdf VIT论文阅读 摘要INTRODUCTION结论RELATEDWORKMETHOD1.VISIONTRANSFORMER(VIT)整体流程消融实验HEAD TYPE AND CLASSTOKENpoisitional embedding 整体过程公式Inductive biasHybrid Architecture 2.FINE-TUNINGANDH…

Substance 3D2024版 下载地址及安装教程

Substance 3D是Adobe公司推出的一套全面的3D设计和创作工具集合,用于创建高质量的3D资产、纹理和材质。 Substance 3D包括多个功能强大的软件和服务,如Substance 3D Painter、Substance 3D Designer和Substance 3D Sampler等。这些工具提供了广泛的功能…