一、值类型和引用类型的区别
- 传值调用是将实参的值传递给被调用函数的形参。因此实参既可以是表达式,也可以是变量(或数组元素)。
- 传地址调用是将实参的地址传给被调用函数的形参。所以,实参必须有地址。因此实参必须是变量(数组),不能是表达式或常量(因为他们不存在地址)。
- 如果采用值调用,相当于复制出一个相同值进行使用,值变化不影响本体
- 如果采用引用调用,相当于通过引用地址来使用被调用的本体,修改引用会影响本体
二、字符串切割与拼接
- 切割:Split(’’);
- 拼接:StringBuilder、+、string.Format、List
三、计算A点(0,0,1)到B点(1,1,1)的方向向量
答:(01,01,1*1)=(0,0,1)
四、点乘与叉乘的区别
首先最明显的区别是点乘的结果是一个标量,叉乘的结果是一个Vector向量,点乘用于求投影和角度,而叉乘用于求方向向量
假设A(a1,b1,c1) B(a2,b2,c2)
点乘:a1a2+b1b2+c1c2
叉乘:(a1a2,b1b2,c1c2)
五、UGUI中的网格重构,动静分明
UGUI需要进行动静分离。也就是说同一个界面下的UI,可活动的元素放在一个Canvas下,不可活动或较少活动的元素放在另一个Canvas下。虽然两个Canvas打断了合批,但是却减少了网格的重建时间,总体上是有优化的。
究其原因,是因为在同一个Canvas下的某个元素发生变化时,同一Canvas下的所有元素都会进行网格重建(ReBatch)。而静态的元素在逻辑上是不需要重建的,因为他们都没变过,所以需要分开。最常见体现在战斗摇杆UI和角色头像UI动静分离。
UGUI的网格重建分为2部分,一个是ReBatch,一个是ReBuild。
当你的Canvas下的一个元素发生变化了,就会重新绘制当前Canvas下的所有的可绘制元素,不管其是否变化过。重新计算其图片、位置、缩放、文本等等元素。这一部分就是ReBatch。
而Rebuild在ReBatch之后,是每个UI元素自己的操作。比如A元素变了,而B元素没有变,那么A元素就自己改一下自己就好了。至于哪些元素需要Rebuild,则在 Canvas.BuildBatch 里面就计算好了。
六、什么是AssetBundle?作用是什么?
AssetBundle 简称AB包,是一个unity自带的一种资源整合包,处理后的里面包含可以存放游戏资源,AB包可减少每次更新游戏时所需要下载的资源包,不需要重新卸载安装,玩家可以在游戏运行需要这些资源的时候被加载,制作AssetBundle的过程相当于把这些资源打成一个包的过程,这个包可以存放在服务器中通过网络下载进行实时资源替换更新。
AssetBundle自身保存着互相的依赖关系:比如说一个包是保存模型的,另一个包是保存贴图的,因为模型可能依赖于贴图则导致模型的包依赖于贴图的包。AssetBundle自身会保存这个依赖关系。
压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输。
注意:使用压缩包是为了方便校验文件的完整性。AB包可以配合Lua实现资源和游戏 逻辑代码的更新