Unity 课时 3 : No.3 模拟面试题

C#

1. 泛型的约束有哪几种?

​ where T : class ,new(), 其他类

答案:
1.值类型约束 T:struct
2.引用类型约束 T:class
3.公共无参构造约束 T:new()
4.类约束 T:类名
5.接口约束 T:接口名
6.另一个泛型约束 T:U

2. 什么是闭包?可以举例说明

​ 将变量局限在一个作用域中

whiel(true) {
    int i = 0;
    debug.log(i);
    i++;
}
答案:
闭包是指有权访问另一个函数作用域中的变量的函数
所以闭包一般都是指的一个函数
创建这种特殊闭包函数的方式往往是在一个函数中创建另一个函数

3. 内存泄漏指什么?常见的内存泄漏有哪些?

​ 储存内容超出,容器范围

答案:
内存泄漏指的就是对象超过生命周期后而不能被GC回收,一般指不会再使用的引用对象由于某些操作而不能被GC垃圾回收,而一直占用着内存

更风趣通俗一点的说就是:没用的家伙没有被当成垃圾回收

常见的内存泄漏有:
1.静态引用
2.不使用的引用对象没有置null,一直被引用
3.文件操作时,没有使用using或者没有进行Dispose()
4.委托或事件注册后没有解除注册(有加就有减)
等等

4. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?

​ 1.将对象转换成可以储存的文件;

​ 2.json,二进制,xml

​ 3.当我们需要保存数据时,将一个对象要序列化,如保存游戏存档

注意: unity的Vector3和Dictionary不能直接用自带的bianry序列化

答案:
序列化是将程序中数据对象转换为可以存储或传输的形式 的过程。
举例:
比如我们常见的序列化方式 xml、Json、2进制等。就是将内存中的数据按照我们自己定义的规则进行序列化,序列化之后就可以用于存储和传输,当读取和接受数据时,只需要按照对应规则进行反序列化便可得到原始数据

所谓的存储读取和传输接受,其实一般指的就是数据持久化和网络通讯
所以我们经常会在这两块知识点看到序列化反序列化这两个关键词

5. 请问A、B、C 三处打印结果分别为多少?为什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 10 没有改变原来的变量,只是对形参进行改变

    1. 100 转递了变量的引用,通过地址改变了变量的值
    2. 100 使用ref关键字改变了真实的值
答案:
A是10,B和C为100

Test1处参数传递进去后,函数内部的形参value是在栈上重新开辟的空间,将传入参数的值拷贝到了该空间中,和传入参数没有关系

Test2处参数是指针类型,指针是用于存储内存地址的变量,我们传入的是值得地址&test2Value,在函数内部改变的是地址中存储的值,所以外部的test2Value会随之改变

Test3处ref关键字,底层逻辑中是将value作为test3Value的一个别名,他们指向的空间一致,所以value改变后,外部的test3Value也会改变

Unity

1. transform.forward和Vector3.forword的区别

​ transform.forward 是物体本地坐标系的z的正方向指向方向,

​ vector3.forword 是世界坐标的z的正方向的指向方向

答案:
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通道分离
等等
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值