Unity之Unity面试题(六)

news2024/11/25 5:02:37

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

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

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

助力快速掌握 面试题

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

请添加图片描述

文章目录

  • 一、内存优化
    • 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.coloradmin.cn/o/1588179.html

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

相关文章

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

情形:Spring配置类注解方式整合MyBatis 异常: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决: 检查mapper的全类名和mapper.xml的namespace是否一致检查mapper下的方法名和mapper.xml的sql的id是否…

电脑离线调用微信 ocr.exe 使用 python 调用 WeChatOCR.exe 附python代码

微信的OCR识别能力还是可以的,并且可以得到位置,速度也快,我想要把微信的这个exe 单独提取出来,可以供其他项目使用,目前已有的应该都是需要依赖微信运行状态的,我这个独一份 相当于把微信运行它的OCR的环境完全剥离出来,只需要几个代码文件加上几个模型文件就可以离线…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

如何申请做快团团购帮卖团长?免费试用教程一学就会!

新手小白想要自己做快团团,有两种方法。 1、自己提供货源,自己开团做团长。 这种方法流程非常简单,从微信小程序中找到快团团,点击右上角“一键开团”,然后“创建普通团购”,按照操作设置就可以开团了。 …

Java高频面试之JVM篇

说一下 Jvm 的主要组成部分?及其作用? 类加载器执行器运行时数据区域本地接口 谈谈对运行时数据区的理解? 堆和栈的区别是什么? 堆中存什么?栈中存什么? 堆总存对象,栈中存局部变量,引用 为什么要把堆…

静音检测电路芯片D3703F——工 作 电 压 范 围 宽 : 3.2V ~ 16.0V,可以用于汽 车 音 响 系 统

概 述 : D3703F 是 一 块 汽 车 音 响 静 音 检 测 电 路 。 用 于 音 响 系 统 检 测 在 放 音 或 快 进 / 退 时 进 行 静 音 检 测 。 D3703F 的 的 电 压 范 围 : 3.2V ~ 16V , 信 号 检 测 和 静 音 时 间 可 通 过 外 围…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准,吉林省文化和旅游厅主管,吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术,是自觉、独立而又面向整个社会的艺术,是文化中极具强烈感染力的重要组成部分&…

Java List基础篇

目录 前言一、常用List1.1 List1.1.1 特点1.1.2 常用API 1.2 ArrayList1.2.1 特点1.2.2 使用 1.3 LinkedList1.3.1 特点1.3.2 使用 1.4 CopyOnWriteArrayList1.4.1 特点1.4.2 使用 1.5 Arrays.asList()1.5.1 特点1.5.2 使用 二、对比总结 前言 一、常用List 1.1 List List是…

C++STL--谓词

谓词 ① 可调用的表达式称为谓词,包括仿函数,自定义函数,lambda表达式。 ② 接受一个参数的谓词,称为一元谓词。 ③ 接受两个参数的谓词,称为二元谓词。 可调用的表达式:对于一个对象或者表达式,如果可以使用调用运算符(),就称它为可以调用的。 一元谓…

2024年【T电梯修理】考试总结及T电梯修理考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理考试总结考前必练!安全生产模拟考试一点通每个月更新T电梯修理考试技巧题目及答案!多做几遍,其实通过T电梯修理试题及解析很简单。 1、【多选题】修理工陶、陈&#xff0c…

李沐27_含并行连结的网络GoogLeNet_Inception——自学笔记

Inception块 1.四个路径从不同层面抽取信息,然后在输出通道维合并。 2.有更少的参数个数和计算复杂度(相比于3X3和5X5卷积层) GoogLeNet 1.五个stages,九个inception块 Inception各种后续变种 1.Inception-BN(V2)——使用ba…

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程…

STL--pair 数对

pair 数对&#x1f357; pair是一个模板类,使用时需要引用文件 #include <utility>//通用工具pair可将两个value处理为一个元素。C标准库内多处用到了这个结构。尤其容器 map、unordered_map和unordered_multimap就是使用pair来管理其内部元素(key_value),任何函数如果…

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…

个人博客项目笔记_05

1. ThreadLocal内存泄漏 ThreadLocal 内存泄漏是指由于没有及时清理 ThreadLocal 实例所存储的数据&#xff0c;导致这些数据在线程池或长时间运行的应用中累积过多&#xff0c;最终导致内存占用过高的情况。 内存泄漏通常发生在以下情况下&#xff1a; 线程池场景下的 ThreadL…

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…

个人博客项目笔记_07

写文章 写文章需要 三个接口&#xff1a; 获取所有文章类别 获取所有标签 发布文章 1. 所有文章分类 1.1 接口说明 接口url&#xff1a;/categorys 请求方式&#xff1a;GET 请求参数&#xff1a; 参数名称参数类型说明 返回数据&#xff1a; {"success":…

PyTorch-Lightning:trining_step的自动优化

文章目录 PyTorch-Lightning&#xff1a;trining_step的自动优化总结&#xff1a; class _ AutomaticOptimization()def rundef _make_closuredef _training_stepclass ClosureResult():def from_training_step_output class Closure PyTorch-Lightning&#xff1a;trining_ste…

算法 分割字符串为实体类

题目 String userData "10000:张三:男:1998-01-01#10001:张三:男:1998-01-01#10002:李四:女:1999-02-02#10003:王五:男:2000-03-03#10004:赵六:女:2001-04-04"; String[] usersArray userData.split("#"); // 使用Stream API将字符串数组转换为SysUser对…

ALV合并单元格

1、文章说明 在开发一些报表时&#xff0c;需要显示双层的标题&#xff0c;或者合并单元格的数据&#xff0c;归根结底就是要实现类似EXCEL合并单元格的需求。如图所示 网上的资料&#xff0c;很多根据国外某大神的方法实现&#xff1a;https://tricktresor.de/blog/zellen-ver…