目录
4.序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
1.transform.forward和Vector3.forword的区别
3.游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?为什么?
一、C#
1.泛型的约束有哪几种?
答案:
1.值类型约束 T:struct
2.引用类型约束 T:class
3.公共无参构造约束 T:new()
4.类约束 T:类名
5.接口约束 T:接口名
6.另一个泛型约束 T:U
2.什么是闭包?
答案:
闭包是指有权访问另一个函数作用域中的变量的函数
所以闭包一般都是指的一个函数
创建这种特殊闭包函数的方式往往是在一个函数中创建另一个函数
3.内存泄漏指什么?常见的内存泄漏有哪些?
答案:
内存泄漏指的就是对象超过生命周期后而不能被GC回收,一般指不会再使用的引用对象由于某些操作而不能被GC垃圾回收,而一直占用着内存更风趣通俗一点的说就是:没用的家伙没有被当成垃圾回收
常见的内存泄漏有:
1.静态引用
2.不使用的引用对象没有置null,一直被引用
3.文件操作时,没有使用using或者没有进行Dispose()
4.委托或事件注册后没有解除注册(有加就有减)
等等
4.序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
答案:
序列化是将程序中数据对象转换为可以存储或传输的形式 的过程。
举例:
比如我们常见的序列化方式 xml、Json、2进制等。就是将内存中的数据按照我们自己定义的规则进行序列化,序列化之后就可以用于存储和传输,当读取和接受数据时,只需要按照对应规则进行反序列化便可得到原始数据所谓的存储读取和传输接受,其实一般指的就是数据持久化和网络通讯
所以我们经常会在这两块知识点看到序列化反序列化这两个关键词
二、Unity
1.transform.forward和Vector3.forword的区别
答案:
Vector3.forword始终时(0,0,1)
可以认为是世界坐标系的Z轴朝向transform.forword是当前物体的局部坐标系的Z轴在世界坐标系下的朝向
可以认为是物体自己的Z轴朝向
2.Unity中如何解决过多创建和删除对象带来的卡顿问题?
答案:
可以通过协同程序,分时分步创建或删除
原理是避免一帧中处理太多对象
3.游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?
为什么?答案:
观察者模式
Unity基础小框架中讲解的 事件中心 就是基于观察者模式的
是一种订阅通知机制
4.请简述热更新的流程
答案:
本地存在资源对比文件和已有资源
1.下载资源服务器中的对比文件
2.将下载下来的远端对比文件和本地的做对比
记录需要更新的资源和要移除的资源
3.根据第二步中记录的信息,进行资源下载和移除
4.更新本地对比文件,其内容和刚才下载的远端对比文件一致
5.我们应该如何优化UI(基于UGUI)
答案:
性能上
1.打图集,将同一画面的图片放入一个图集中,目的是减少DrawCall
2.面板中的图片和文字尽量不要交叉,因为这样会产生多余的DrawCall
3.取消勾选不必要的射线检测,UI组件上的
4.减少透明图片的重叠使用
等等内存上
1.大图尽量使用9宫格缩放,让美术设计UI面板底图时不要过于复杂
尽量是有规律的纹理和颜色变化
2.图片的RGBA通道分离
等等