知识记录:Unity3D 实用技巧 - 基础知识汇总【小白篇】

#关注公众知享奇,获取更多资源
在这里插入图片描述

我的博客

博客地址

1、Unity中的碰撞器和触发器的区别?

  • 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。

2、物体发生碰撞的必要条件?

  • 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。

3、什么是协同程序?

  • 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。

4、OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生

  • Awake –>OnEnable->Start,OnEnable在同一周期中可以反复地发生。

5、MeshRender中material和Sharedmaterial的区别?

  • 修改SharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。不推荐修改由SharedMaterial返回的材质。如果你想修改渲染器的材质,使用Material替代。

6、Unity提供了几种光源,分别是什么

  • 区域光源:Area Light聚光灯:Spot Light点光源:Point Light平行光:Directional Light四种。

7、CharacterController和Rigidbody的区别

  • Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件。

8、简述prefab的用处

  • 在游戏运行时实例化,Prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。

9、Unity3d的物理引擎中,有几种施加力的方式,分别描述出来

  • rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。大家可以自己去查看一下rigidbody的API:https://docs.unity3d.com/Manual/class-Rigidbody.html

10、什么叫做链条关节?

  • Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

11、物体自身旋转使用的函数?

  • Transform.Rotate() ;

12、Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数

  • PlayerPrefs.SetInt() PlayerPrefs.GetInt()

13、Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

  • Awake——>OnEnable–>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy

14、物理更新一般放在哪个系统函数里?

  • FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。

15、在场景中放置多个Camera并同时处于活动状态会发生什么?

  • 游戏界面可以看到很多摄像机的混合。

16、 如何销毁一个UnityEngine.Object及其子类?

  • 使用Destroy()方法;

17、请描述为什么Unity3d中会发生在组件上出现数据丢失的情况

  • 一般是组件上绑定的物体对象被删除了.

18、LOD是什么,优缺点是什么?

  • LOD(Level of detail)多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。缺点是增加了内存。

19、MipMap是什么,作用?

  • MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。

20、 .Net与Mono的关系?

  • mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。.net只能在windows下运行,mono可以实现跨平台跑,可以运行于linux,Unix,Mac OS等。

21、简述支持的作为脚本的语言的名称。

  • Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。Unity里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。JavaScript、 C#、Boo。

22、U3D中用于记录节点空间几何信息的组件名称,及其父类名称。

  • Transform 父类是 Component

23、向量的点乘、叉乘以及归一化的意义?

  • ①点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影。
  • ②叉乘得到的向量垂直于原来的两个向量。
  • ③标准化向量:用在只关系方向,不关心大小的时候。

24、为何大家都在移动设备上寻求U3D原生GUI的替代方案

  • 因为不美观,OnGUI很耗费时间,效率不高,使用不方便

25、请简述如何在不同分辨率下保持UI的一致性。

  • NGUI很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。UGUI通过锚点和中心点和分辨率也解决这个问题。

26、什么是LightMap?

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

27、Unity和Cocos2d的区别

  • ①Unity3D支持C#、javascript等,cocos2d-x 支持c++、Html5、Lua等。
  • ②cocos2d 开源 ,并且免费。
  • ③Unity3D支持iOS、、Flash、Windows、Mac、Wii等平台的游戏开发,cocos2d-x支持iOS、Android、WP等。

28、射线检测碰撞物的原理是?

  • 射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

29、Unity中,照相机的Clipping Planes的作用是什么?调整Near、Fare两个值时,应该注意什么?

  • 剪裁平面 。从相机到开始渲染和停止渲染之间的距离。

30、如何让已经存在的GameObject在LoadLevel后不被卸载掉?

  • void Awake() { DontDestroyOnLoad(transform.gameObject); }

31、请简述GC(垃圾回收)产生的原因,并描述如何避免?

  • GC回收堆上的内存
  • 避免:①减少new产生对象的次数
  • ②使用公用的对象(静态成员)
  • ③将String换为StringBuilder

32、简述四元数的作用,四元数对欧拉角的优点?

四元数用于表示旋转相对欧拉角的优点:

  • ①能进行增量旋转
  • ②避免万向锁
  • ③给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

33、移动相机动作在哪个函数里,为什么在这个函数里?

  • LateUpdate,是在所有的update结束后才调用,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是所有的update操作完才进行摄像机的跟进,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

34、GPU的工作原理

  • 简而言之,GPU的图形(处理)流水线完成如下的工作:(并不一定是按照如下顺序) 顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex Shader(定点着色器)完成。 光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。 纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping unit)即是用来完成此项工作。 像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel Shader(像素着色器)完成。 最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。

  • 总结:GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。

35、什么是渲染管道?

  • 是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。主要步骤有:
  • 本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化

36、如何优化内存?

有很多种方式,例如

  • ①压缩自带类库;
  • ②将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
  • ③释放AssetBundle占用的资源;
  • ④降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
  • ⑤使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
  • ⑥代码中少产生临时变量

37、动态加载资源的方式?他们之间的区别

  • ①Resources.Load();
  • ②AssetBundle

38、请描述游戏动画有哪几种,以及其原理?

  • 主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。
  • 关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;
  • 骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;
  • 单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。

39、Alpha Blend工作原理

  • Alpha Blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。

40、写出光照计算中的diffuse的计算公式

  • diffuse = Kd x colorLight x max(N*L,0);Kd 漫反射系数、colorLight 光的颜色、N 单位法线向量、L 由点指向光源的单位向量、其中N与L点乘,如果结果小于等于0,则漫反射为0。

转载

Unity3D 实用技巧 - 基础知识汇总【小白篇】,网络不能及时联系作者,本着学习原则,有侵权联系,第一时间删除。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值