- 什么是协同程序?
在主程序运行的同时开启另一段逻辑处理,来协助当前程序的执行。开启协程是开启一个可以与程序并行的逻辑。可以控制运动、序列以及对象的行为。
- Unity中的碰撞器和触发器的区别是?
碰撞器是触发器的载体(包含关系),触发器是碰撞器身上的一个属性。
当Is Trigger=false,碰撞器根据物理引擎进行碰撞,从而产生碰撞的效果,一般用的是OnCollisionEnter/Stay/Exit函数进行触发。
当Is Trigger=true时,碰撞器被物理引擎忽略,没有碰撞效果,就可以调用OnTriggerEnter/Stay/Exit函数。
当如果又想要进行检测,而不想让物体的接触影响到物体移动或要检测一个物体是否会经过某一个空间区域,这时就可以用到触发器。
- 物体发生碰撞的必要条件
两个物体都必须带有碰撞器Collider,其中一个还必须带有Rigidbody刚体。
- 简述ArrayList和List主要区别
ArrayList存在不安全类型,会把所有插入其中的数据当作Object处理(ArrayList是非线程安全实现,不同步)
装箱与拆箱的操作
List是接口,ArrayList是一个实现该接口的类,可以被实例化
- 请简述GC(垃圾回收)产生的原因,并描述如何避免?
原因是:GC回收堆上的内存(当内存占满一定的空间,就需要进行数据释放,就是GC)
避免:
- 减少new产生对象的次数
- 尽量使用公用的对象(静态成员)
- 将String换为StringBuilder
- 反射的实现原理?
审查元数据并收集关于它的类型信息的能力。
实验步骤:
Using System.Reflection;
Assembly.Load(“程序集”);//加载它的程序集,并且返回类型是Assembly
得到程序集中所有的类的名称
Foreach(Type type in assembly.GetTypes())
{
String t=type.Name;
}
Type type=assembly.GetType(“程序集,类名”);//获取当前类的类型
Activator.CreateInstance(type);//创建此类型实例
MethodInfo mInfo=type.GetMethod(“方法名”);//获取当前方法
mInfo.Invoke(null,方法参数);
- 简述四元数Quaternion的作用,四元数对欧拉角的优点?
作用:四元数用于表示旋转
优点:能进行增量旋转,避免万向锁
给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
- 如何安全的在不同工程间安全地迁移asset数据?三种方法
- 将Assets和Library一起迁移
- 导出包package
- 用unity自带的assets Server功能
- OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
Awake->OnEnable->Start
OnEnable在同一周期中可以反复地发生
- MeshRender中material和sharedmaterial的区别?
如果修改sharedMaterial将改变所有使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改shareMaterial返回的材质。想要修改渲染器的材质,使用material代替。
- TCP/IP协议栈各个层次及分别的功能
网络接口层:这是协议栈的最低层,对应OSI的物理层和数据链路层,主要完成数据帧的实际发送和接收。
网络层:处理分组在网络中的活动,例如路由器选择和转发等,这一层主要时包括IP协议,ARP,ICMP协议等。
传输层:主要功能是提供应用程序之间的通信,这一层主要是TCP/UDP协议。
应用层:用来处理特定的应用,针对不同的应用提供不同的协议,例如进行文件传输时用到的FTP协议,发送email用到的SMTP等。
- Unity提供了几种光源,分别是什么
四种
平行光:Directional Light
点光源:Point Light
聚光灯:Spot Light
区域光源:Area Light
- 简述一下对象池,FPS里哪些东西适合使用对象池?
对象池就存放需要被反复调用资源的一个空间,比如游戏中要长被大量赋值的对象,子弹,敌人,以及任何重复出现的对象。
- CharacterController和Rigidbody的区别?
Rigidbody具有完全真实物理的特性,而CharacterController可以说时受限的Rigidbody,具有一定的物理效果但不是完全真实的。
- 移动相机动作在哪个函数里,为什么在这个函数里?
LateUpdate,是所有的Update结束后才进行调用,比较适合用于命令脚本的执行。要等到Update中的操作都进行完成后才进行摄像机的跟随效果,不然可能会出现视角中未有角色空帧出现。
- 简述prefab的用处
在游戏运行时实例化,prefab相当于一个模板,对已有的素材,脚本,参数可以进行一个默认的配置,便于以后的修改,同时prefab打包内容简化了导出的操作,用于分享。
- 简述sealed关键字用在类声明时与函数声明时的作用
类声明时可防止其他类继承此类,在方法中声明则防止派生类重写此方法
- 简述private,public,protected,internal的区别
Public-对任何类和成员都公开,无限制访问
Private-仅对该类进行公开
Protected-对该类和其他派生类进行公开
Internal-只能在包含该类的程序集中访问该类
Protected internal:protected+internal
- GPU的工作原理
顶点处理:GPU读取顶点数据根据顶点数据确定形状的形状和位置关系,建立起3D图形的骨架。硬件实现:Vertex Shader(定点着色器)
光栅化计算:生成图形上的点和线进行算法得到像素点。把矢量图转化成像素点的过程就是光栅化。例:数字表示斜线段变成阶梯式连续像素点
纹理贴图:营造真实,TMU,贴图
像素处理:像素进行光栅化期间像素着色器初期,GPU完成对像素的计算和处理,从而得到每一个像素的最终输写。像素着色器完成
最终输出:ROP(光栅化引擎