1. 什么是协同程序?
在主线程运行的同时开启另一段逻辑处理,来协助处理当前程序的执行。
协程很像多线程。Unity的协程是在每帧结束之后去检测yeild的条件时候满足。
2.Unity3D中碰撞器和触发器的区别
碰撞器和触发器的根本为同一个组件,Collider。表现区别为触发器不会产生物理效果而碰撞器可以。
组件属性角度为,当组件Trigger为false时为碰撞器,反之为触发器。
代码方面,碰撞器使用Unity内置接口OnCollisionEnter/OnCollisionStay/OnCollisionExit。
触发器使用,OnTriggerEnter/OnTriggerStay/OnTriggerExit。
3.物体发生碰撞的必要条件
两个物体都必须带有碰撞器,其中需要检测碰撞的物体必须带有Rigidbody组件才可以进行检测。前提是物理层级Layers具有交互效果。
4.ArrayList和list的区别
ArrayList存在不安全类型(Arraylist中的所有数据都会被当作Object来处理)
,所有会进行装箱拆箱的操作。而List是一个接口,ArrayList是一个实现了该类接口的类,可以被实例化。
5.如何安全的在不同工程间迁移Asset
将Assets目录和library一起迁移;导出Package;使用unity自带的Assets Server功能
6.OnEnable,Awake,Start的生命周期
Awake->OnEnable->Start,OnEnable可以在同一周期中反复发生。
7.MeshRender中material和ShaderMaterial区别
修改ShaderMaterial改变工程里的材质设置和所有物体使用这个材质的外观。如果修改渲染器材质,使用material.
8.光源有哪些
点光源 Point Light
聚光灯 Spot Light
区域灯 Area Light
平行光 Direction Light
9.对象池
存放需要被反复调用资源的一个空间。当一个对象会大量产生的时候,如果每次都是销毁创建,会浪费很多的空间以及时间,通过对象池我们可以把暂时不用的对象放在池子中,当需要使用的时候去进行调用,不需要的时候进行隐藏,长时间不用在销毁。
大概的逻辑就是,调用对象,对象池中查找,如果存在,直接使用,然后再进行信息的初始化。如果不存在则创建,并且存入池子。最常见的就是,子弹,敌人,粒子特效。
对象池也是优化的基本手段。
10.CharacterController和Rigdbady的区别
Rigdbady具有完全真实的物理特性,是Unity中物理系统最基本的一个组件,包含了常用的物理特性。而CharacterController受限于Rigdbady,具有一定的物理效果,但是不完全真实,为了FPS封装的一个第一人称视角的角色控制器。
11.Prefab的用处
在游戏运行实例化,Prefab相当于一个模板,便于修改。对已有的素材数据,脚本做一个默认的配置,便于修改以及复用。可以打包导出
12.sealed
密封类关键,声明类不可被继承,声明方法不可以被重写
13.访问修饰符
Public:公开的,无限制访问
Protected:受保护的,只对该类和派生类公开
Private:私密,只对该类公开
internal:只能在包含该类的程序集中访问该类
14.Unity 实现2D游戏方法
使用UGUI
使用NGUI,2DToolKit等插件
将相机的Projection改为正交投影,不考虑深度
15.物体发生碰撞生命周期分为什么
OnCollisonEntert -> OnCollisionStay -> OnCollisionExit
16.Unity中物理施加力的方式
Rigdbady.AddFarce
Rigdbady.AddFarceAtPosition
17.链条关节
Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。
18.旋转函数
Transform.Rotate
19.保存,读取数据的类PLayerPrefs
PlayerPrefs.SetInt();保存
PlayerPrefs.GetInt();读取
20.Unity中脚本的生命周期
Awake->OnEnable->Start->Update->FixedUpdate->LateUpdate->OnGUI->OnDisable->OnDestory
21.在场景中放多个相机并同时处于活动状态会发生什么?
游戏场景中可以看到相机的混合画面(当然相机的depth不在同一场景),如果处在同一个层级,则会覆盖。
22.如何销毁一个UnityEngine.Object及子类
使用Destory()方法
23.物理更新一般放在什么函数中?
FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedeUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降,FixedUpate比较适合用于物理引擎计算,因为是跟每帧渲染有关,Update就比较适合做控制。
24.LOD是什么?优缺点是什么?
LOD,多层次细节,是常用的游戏优化技术。他按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染计算,缺点是增加了内存。
25.MipMap有什么作用?
MipMap是计算机图形的贴图渲染中常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件
26.什么是LightMap?
Light就是指在三维软件里实现打灯光,然后通过渲染把场景各表面的光照输出到贴图上,最后又通过unity贴到场景中,这样就使物体有了光照的感觉。
27. 接口和抽象类之间的不同
抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公共只能定义各个方法的界面,不能具体的实现代码。类是子类用来继承的。当父类已经有实际功能的方法时,子类可以不必实现,直接引用父类的方法,子类也可以重新该父类的方法。
28. .Net和Mono的关系
mono是.net的开源跨平台工具。就类似java虚拟机,java本身不是跨平台语音,但运行在虚拟机上就能够实现跨平台。.net只能在windows下运行,mono可以实现跨平台运行。
29.Unity中用于记录节点空间几何信息的组件是什么?其父类是什么?
Transform,父类是Compoent
30.点乘,叉乘,归一化
点乘:表述了两个向量间的相似度,结果越大两向量越相似,还可以表示投影
叉乘:叉乘得到的值垂直于原先的两个向量。
归一化:标准化的向量,只有方向,没有大小。