1、unity3d知识点unity3d 知识点 【篇一: unity3d 知识点】数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的 demo 。1.什么是渲染管道?是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。主要步骤有:本地坐标 - 视图坐标 - 背面裁剪 - 光照- 裁剪- 投影- 视图变换 - 光栅化。2.如何优化内存?有很多种方式,例如1.压缩自带类库;2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接 destroy掉;3.释放 assetbundl
2、e 占用的资源;4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;5.使用光照贴图,使用多层次细节 (lod) ,使用着色器 (shader) ,使用预设(prefab) 。3.动态加载资源的方式? 1.resources.load();2.assetbundle1.通过 resources 模块,调用它的 load 函数:可以直接 load 并返回某个类型的 object ,前提是要把这个资源放在 resource 命名的文件夹下, unity 不关有没有场景引用,都会将其全部打入到安装包中。resources.load();3.通过 assetdatabase.loadasset
3、:这种方式只在 editor 范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的【assetdatabase 资源数据库】区别:resources 的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级( patch )是不利的,所以 unity推荐的方式是不用它,都用 bundle 的方式替代,把资源达成几个小的 bundle ,用哪个就 load 哪个,这样还能分包发布和 patch ,但是在开发过程中,不可能没更新一个资源就打一次 bundle ,所以editor 环境下可以使用 assetdatabase 来模拟,这通常需要我们封装一个 dynamic re
4、source 的 loader 模块,在不同的环境下做不同 实现。 动态资源的存放有时我需要存放一些自己的文件在磁盘上,例如我 想把几个 bundle 放在初始的安装里, unity 有一个 streamingasset 的概念,用于提供存储接口的访问。我们需要在编辑器建立一个 streamingassets 名字的文件夹,把需要我们放在客户磁盘上的 动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过application.streamingassetspath 来得到。4.什么是协同程序?在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句
5、话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。5.你用过哪些插件?一 界面制作 推荐: ngui二 2d 游戏制作 推荐: 2d toolkit / 工具包,工具箱三 可视化编程 推荐: playmaker四 插值插件 推荐: itween,hotween五 路径搜寻 推荐: simple path六 美术及动画制作 推荐: ragespline,smooth moves七 画面增强 推荐: bitmap2material,strumpy shader editor八 摄像机管理 推荐: security camera九 资源包 推荐: nature pack十、造路插
6、件 easyroads3d6.使用 unity3d 实现 2d 游戏,有几种方式?1.使用本身的 gui ;2.把摄像机的 projection( 投影)值调为 orthographic( 正交投影 ),不考虑 z 轴;3.使用 2d 插件,如: 2dtoolkit ;7.unity3d 中的碰撞器和触发器的区别?触发器只是碰撞器身上的一个属性,碰撞器是触发器的载体。碰撞器有碰撞的效果, istrigger=false ,可以调用oncollisionenter/stay/exit 函数;触发器没有碰撞效果, istrigger=true ,可以调用ontriggerenter/stay/ex
7、it 函数。a.如果不想让碰撞检测影响物体移动但是又想检测到碰撞这时用到触发器(trigger )b.触发器用来检测一个物件是否经过空间中的某个区域8.物体发生碰撞的必要条件两个物体都必须带有碰撞器 (collider) ,其中一个物体还必须带有rigidbody 刚体。8.1 charactercontroller 和 rigidbody 的区别?charactercontroller 自带胶囊碰撞器,里面包含有刚体的属性;rigidbody 就是刚体,使物体带有刚体的特征。charactercontroller: 角色控制器 rigidbody 具有完全真实物理的特性,而 characte
8、rcontroller 可以说是受限的 rigidbody ,具有一定 的物理效果但不是完全真实的9.在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数三个阶段1.oncollisionenter( 进入碰撞 )2.oncollisionstay ( 逗留碰撞 )3.oncollisionexit( 当退出碰撞 )10.unity3d 的物理引擎中,有几种施加力的方式,分别描述出来rigidbody.addforce/addforceatposition ,都在 rigidbody 系列函数中。11.什么叫做链条关节?hinge joint ,可以模拟两个物体间用一根链条连接在一起的情
9、况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。12.物体自身旋转使用的函数? transform.rotate()13.物体围绕某点旋转使用的函数? transform.rotatearound()14.unity3d 提供了一个用于保存和读取数据的类 (playerprefs) ,请列出保存和读取整形数据的函数playerprefs.setint() playerprefs.getint()15.unity3d 提供了几种光源类型,分别是哪几种?四种。平行光: directional light点光源: point light聚光灯: spot
10、light 区域光源: area light16.unity3d 脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。awake start update fixedupdate lateupdate ongui reset ondisable ondestroy17.物理更新一般放在哪个系统函数里?fixedupdate ,每固定帧绘制时执行一次,和 update 不同的是fixedupdate 是渲染帧执行,如果你的渲染效率低下的时候fixedupdate 调用次数就会跟着下降。 fixedupdate 比较适用于物理引擎的计算,因为是跟每帧渲染有关。 update
11、 就比较适合做控制。18.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?lateupdate ,在每帧执行完毕调用,它是在所有 update 结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有 update 操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。19.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?使用预制物体对象 prefab ,然后复制创建。20.在场景中放置多个 camera 并同时处于活动状态会发生什么?游戏界面可以看到很多摄像机的混合。21.请描述 prefab 的作用,并描述如何在移动
12、设备的环境下恰当的使用它?prefab 在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。22.请简述 unity3d 下如何安全的在不同工程间迁移 asset 数据,请列举出三种方法?1.可以把 assets 目录和 library 目录一起迁移2.导出包3.用 unity 带的 assets server 功能23.请描述游戏动画有哪几种,以及其原理? 主要有关节动画、骨骼动画、单一网格模型动画 (关键帧动画 )。a.关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一 个整体的动画,角色比较灵活, quake2 中使用 这种动画;b.骨骼动画,广泛应用
13、的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;c.单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。24.请描述为什么 unity3d 中会发生在组件上出现数据丢失的情况一般是组件上绑定的物体对象被删除了25.alpha blend 工作原理alpha blend 实现透明效果,不过只能针对某块区域进行 alpha 操作,透明度可设。26.写出光照计算中的 diffuse 的计算公式计算公式为: idiffuse
14、 = dintensity*dcolor*n.l ; (dintensity 表示漫反射强度,dcolor 表示漫反射光颜色,n 为该点的法向量,l 为光源向量 其中 n 与 l 点乘,如果结果小于等于 0,则漫反射为 0。27.lod 是什么,优缺点是什么?lod(level of detail) 多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。28.两种阴影判断的方法、工作原理。a.阴影由两部分组成:本影与半影a.本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)b.半影:景物表
15、面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)求阴影区域的方法:做两次消隐过程 一次对每个光源进行消隐,求出对于光源而言不可见的区域 l;一次对视点的位置进行消隐,求出对于视点而言可见的面 s;shadow area= l sb.阴影分为两种:自身阴影和投射阴影自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面
16、与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)若是动态光源此方法就无效了。29.vertex shader 是什么,怎么计算?顶点着色器顶点着色器是一段执行在 gpu 上的程序,用来取代 fixed pipeline中的 transformation 和 lighting ,vertex shader 主要操作顶点。vertex shader 对输入顶点完成了从 local space 到 homogeneousspace (齐次空间)的变换过程,
17、homogeneous space 即projection space 的下一个 space 。在这其间共有 worldtransformation, view transformation 和 projectiontransformation 及 lighting 几个过程。30.mipmap 是什么,作用?mipmapping :在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 mipmap 。31.机试:二选一1.用代码实现第三角色控制器2.实现吊机吊物体的功能【吊机吊物体需要节点挂接和坐标系
18、转换】32.反向旋转动画的方法是什么?【反转动画,讲动画的速度调到 -1,碰撞时,被碰撞物体与碰撞物体有 collider 组件,碰撞物体有刚体组件,或角色碰撞得包含角色组件 or 改变 animation.speed 】33.碰撞检测需要物体具备什么属性?能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器【physics.overlapsphere 相交球检测碰撞,碰撞检测需要包围盒】34.获取、增加、删除组件的命令分别是什么?获取:getcomponent 增加:addcomponent 删除:destroy35.animation.crossfade 命令作用是: (c)
19、a.动画放大 b. 动画转换 c. 动画的淡入为其他动画36.application.loadlevel 命令为: (a)a 加载关卡 b. 异步加载关卡 c. 加载动作37.调试记录到控制台的命令是什么?debug.log();39.编辑器类存放路径是什么? 工程目录下的 assets/editor 文件夹下。40.使用原生 gui 创建一个可以拖动的窗口命令是什么?gui.dragwindow();41.localposition 与 position 的使用区别? localposition :自身位置,相对于父级的变换的位置。、position :在世界坐标 transform 的位置
20、42.写一个计时器工具,从整点开始计时,格式为: 00:00:0043.写出 animation 的五个方法addclip 添加剪辑、blend 混合、play 播放、stop 停止、sample 采样44.怎么拿到一个对象上脚本的方法 gameobject.getcomponent ();45.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;46.unity3d 是否支持写成多线程?如果支持的话要注意什么?支持:如果同时你要处理很多事情或者与 unity 的对象
21、互动小可以用thread, 否则使用 coroutine.注意:c# 中有 lock 这个关键字 ,以确保只有一个线程可以在特定时间内访问特定的对象47.unity3d 中的协程 (coroutine) 和 c# 线程之间的区别是什么?unity3d 没有多线程的概念,不过 unity 也给我们提供了startcoroutine (协同程序)和 loadlevelasync (异步加载关卡)后台加载场景的方法。startcoroutine 为什么叫协同程序呢,所谓协同,就是当你在startcoroutine 的函数体里处理一段代码时,利用 yield 语句等待执行结果,这期间不影响主程序的继续
22、执行,可以协同工作。而loadlevelasync 则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用 loading 条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜asynchronouse?s?kr?n?s.synchronous 同步48.请简述四元数的作用以及四元数相对于欧拉角的优点a.四元数一般定义如下: q=w+xi+yj+zk 其中 w,x,y,z 是实数。同时,有: i*i=-1 j*j=-1 k*k=-1b.四元数也可以表示为: q=w,v有多种方式可表示旋转,如 axis/angle 、欧拉角 (euler angles) 、矩阵(matrix) 、四元
23、组等。相对于其它方法,四元组有其本身的优点:a.四元数不会有欧拉角存在的 gimbal lock 问题万向节死锁 b.四元数由 4 个数组成,旋转矩阵需要 9 个数c.两个四元数之间更容易插值d.四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize) 和正交化 (orthogonalize) ,对四元数规范化更容易 e.与旋转矩阵类似,两个四元组相乘可表示两次旋转49.请简述 onbecamevisible 及 onbecameinvisible 的发生时机,以及他们执行的意义?当 renderer( 渲染器 )在任何相机上都不可见时调用:onbecameinvisib
24、le当 renderer( 渲染器 )在任何相机上可见时调用: onbecamevisible50.动画层 (animation layers) 的作用是什么?动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画51.请说出 4 种面向对象的设计原则,并分别简述它们的含义。1) 单一职责原则 (the single responsiblity principle ,简称srp ):一个类,最好只做一件事,只有一个引起它的变化 .2) 开放封闭原则 (the open close principle ,简称 ocp ):对于扩展是开放的,对于更改是封闭的3) liskov
25、替换原则( the liskov substitution principle, 简称 lsp ):子类必须能够替换其基类4) 依赖倒置原则( the dependency inversion pricinple ,简称dip ):依赖于抽象5) 接口隔离原则 (the interface segregation principle ,简称isp ):使用多个小的专门的接口,而不要使用一个大的总接口。52.material 和 physic material 区别?physicmaterial 物理材质:物理材质描述,如何处理物体碰撞(摩擦,弹性)。material 材质(材质类)为了获得一个
26、对象使用的材质,可以使用renderer.materia 属性:53.法线贴图 、cg 动画a.法线贴图:是在原物体的凹凸表面的每个点上均作法线,通过 rgb颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。b.cg 动画:原为 computer graphics 的英文缩写。随着以计算机为主要工具进行视觉设计和生产的一系列相关产业的形成 ,国际上习惯 将利用计算机技术进行视觉设计和生产的领域通称为 cg 。它既包括 技术也包括艺术,几乎囊括了当今电脑时代中所有的视觉艺术创作 活动,如平面印刷品的设计、网页设计、三维动画、影视特效、多
27、媒体技术、以计算机辅助设计为主的建筑设计及工业造型设计等。ngui (nugui1 、ngui2 )54. 如何销毁一个 unityengine.object 及其子类?使用 destroy() 方法;55、请描述游戏动画有哪几种,以及其原理。主要有关节动画、单一网格模型动画 (关键帧动画 )、骨骼动画。a、关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活 quake2(kwe?kvi. 发抖,颤抖;)中使用了这种动画 ;b、 单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画
28、效果,角色动画较真实。c、骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画56、下面哪种做法可以打开 unity 的 asset storewindows - asset store57、mecanim 系统中, body mask 的作用是?指定身体的某一部分是否参与渲染58、以下哪种操作步骤可以打开 unity 编辑器的 lightmapping 视图? windows - lightmapping59、关于光照贴图a:使
29、用光照贴图比使用实时光源渲染要快b:可以降低游戏内存消耗c、多个物体可以使用同一张光照贴图60、关于 vector3 的 api ,以下说法正确的是?vector3.forward 与 vector3 (0,0,1 )是一样的意思;61、 什么是导航网格( navmesh )?一种用于实现自动寻路的网格62、什么是局部坐标,什么是世界坐标? 世界坐标是不会变的,一直以世界坐标轴的 xyz 为标准。局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。63、itween 插件的作用是什么, itween 作用于世界坐标还是局部坐标,请列举出 3 个其常用方法?itween 是一个动画库,作者创建
30、它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等 “方法:a、moveto 物体移动 ;b、colorto :随着时间改变对象的颜色组;c、lookto :随时间旋转物体让其脸部朝向所提供的 vector3 或transform 位置64、请简述 ngui 中 panel 和 anchor 的作用anchor 包含 uianchor 脚本。 uianchor 的功能是把对象锚定在屏幕的边缘(左上,左中,左下,上,中,下,右上,右中,右下),或缩放物体使其匹配屏幕的尺寸 panel 对象有 uipanel 脚本,uipa
31、nel 是一个容器,它将包含所有 ui 小部件,并负责将所包含的部件组合优化、承载,以减少绘制命令的调用。65、unity 摄像机有几种工作方式,分别是什么?perspective 透视摄像机和 orthographic 正交摄像机66、layermask.nametolayer() 这个方法有什么作用?layermask 的使用是按位操作的, layermask.nametolayer(players)返回该 layer 的编号。67、请描述 meshrender 中 material 和 shader 的区别?shader (着色器)实际上就是一小段程序,它负责将输入的 mesh(网格)以
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1