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

课时 1 : No.1 模拟面试题

C#

1.装箱和拆箱是什么?

​ 对于应用类型。将基类的子类转化成基类称为装箱。将基类转换成子类,成为拆箱。装箱通常使用隐式转换,拆箱可以使用 as 或者 强制转换。同样对于值类型也可以进行装箱和拆箱。

答案:
装箱——把栈中内容迁移到堆中去(值转引用)
拆箱——把堆中内容迁移到栈中去(引用转值)

在这里插入图片描述

2.值类型和引用类型的变量赋值时的区别?

值类型作为方法中的局部变量时,在栈中分配,而作为类的成员变量时,在堆中分配;引用类型变量在栈中分配,引用类型的实例在堆中分配!!!

​ 值类型,直接将堆或栈中的数据复制一份。将其赋值给另一个变量。引用类型赋值值时,将其地址赋另一个变量。这里可以涉及到深拷贝与浅拷贝的问题。

答案:
举例说明

3. 委托和事件在使用上的区别是什么

答案:
事件相对委托来说,事件在外部使用时只能 +=-=

4.有两个接口,IA和IB当中都有同一方法test(),一个类继承这两个接口,应该如何处理他们的通用方法?

答案:
显示实现接口
IA.Test()
IB.Test()

5. 请说明C#中的List是如何扩容的

​ C#中的list是一种安全的容器。当它检测到容量需要扩大时,会将其容量扩大为但需要容量的的两倍。

答案:
List的本质是数组

Unity

1. Unity中点乘和叉乘对于我们来说的作用是什么?

​ 对于向量而言。点乘多用于取向量的夹角。叉乘用于取得垂直于他们的平面的法线。

答案:
点乘作用
1.判断对象的方位
2.计算两向量之间的夹角
叉乘作用
1.获取一个平面的法向量
2.得到两向量之间的左右位置关系

2. Unity中多线程执行下面哪些代码会报错?

A. Application.persistentDataPath
B. File.Exists(“文件名”)
C. transform.Translate
D. Object.Destroy(对象)

​ 在Unity中开启多线程,不能在子线程中执行有关对象相关的操作。

答案:
A、C、D
UnityEngine命名空间中相关类基本都不能被Unity中多线程使用

3. Application.streamingAssetsPath 和 Application.persistentDataPath两个路径有何区别?对于我们的意义是什么?

streamingAssetsPath 是只读文件夹对于我们而言是只读文件夹。用于存放只读的文件。 persistentDataPath可读可写文件夹。可用于存放存档文件。
答案:
Application.streamingAssetsPath 只读
Application.persistentDataPath 可读可写

Application.streamingAssetsPath 适合放置一些默认2进制配置文件
Application.persistentDataPath  用于处理数据持久化,或作为热更新下载内容的存放目录,因为它可读可写

4.请简述Unity中协程的原理。

​ 用迭代器来完成协程。迭代器通过不同时间段对程序的执行,来得到异步的效果。

答案:
Unity中的协同程序分为两部分
1.协程函数本体(迭代器函数)
2.协程调度器(协程管理器)
协程利用迭代器函数的分步执行的特点
加上
协程调度器对迭代器函数们进行统一管理
根据迭代器函数的返回值来决定下一次执行函数逻辑的时间点
从而实现逻辑分时分步执行的目的

5.Unity底层如何处理C#代码?

​ 通过IL2CPP将C#代码转化为C++代码

答案:
两种方案
Mono和IL2CPP

你可能感兴趣的:(unity,游戏引擎)