1、C#中的排序方式有哪些?
选择排序、冒泡排序、快速排序、插入排序、希尔排序,归并排序。
2、C#和Lua的交互怎么实现?
3、Lua的数据类型
4、射线检测碰撞的原理是?
射线是3D世界中的一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射。
5、Lua有几种循环?Ipair和pair的区别。
6、Unitya中,照相机的Clipping Plane的作用是什么?调整Near\Fare两个值时,应该注意什么?
剪裁平面。从相机到开始渲染和停止渲染之间的距离。
7、Unity的ui怎么优化?
8、请简述GC(垃圾回收)产生的原因,并描述如何避免?
GC回收堆上的内存
避免:1、减少new产生对象的次数
2、使用公用的对象(对象)
3、将String换为StringBuilder
9、你塔防项目中遇到的最大问题是什么,怎么解决?
10、移动相机动作在哪个函数里,为什么在这个函数里?
LateUpdate,是所有的Update结束后才调用,比较适合用于命令脚本的执行。官网上的例子是摄像机的跟随,都是所有Update的操作完才进行摄像机的跟进,不然就有可能出现摄像机已经推进了,但是视角里还未有角色,所谓的空帧出现。
11、分数的四则运算(编程题)
例如:输入 1/8+3/8 每个数字为1-9的整型,运算符左右为空格 输出 1/2 (要化简)(实现+-*/)
12、什么是渲染管道?
是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标系变换到另一个坐标系中去。主要步骤有:
本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。
13、编程题
一个M*N的矩阵,随机取K行,每一列中最多只有一个1(没时间记不清了)
14、如何优化内存?
有很多种方式,例如:
1、压缩自带类库;
2、将暂时不用的以后还需要是使用的物体隐藏起来而不是直接Destry掉;
3、释放AssetBundle占用的资源;
4、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5、使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab);
6、代码中少产生临时变量。
15、不定项选择会出现的名词
树的聚族索引,内存页,TCP报文,ACK,SYN,FIN......
16、应用题(C#)
一个角色有静止,攻击,跳跃,俯冲,闪避等几个动作,当不做任何操作时,角色播放静止动作。
1、设计一个抽象类表现角色的状态。
2、角色在静止时可以攻击,松开攻击键则攻击停止。
角色按键可闪避,跳跃当处于跳跃状态时可进行俯冲,
3、攻击开始时生成一个攻击开始特效,攻击结束生成攻击结束特效,跳跃开始生成跳跃特效,俯冲结束生成俯冲结束音效。
(具体按键已经给了枚举变量,特效与音效的函数已给出)
4、如果在跳跃,俯冲,下蹲过程中可以攻击,并当攻击结束要回到之前的状态,请设计一个具体思路和数据结构。
17、动态加载资源的方式?它们之间的区别
1、Resource.Load();
2、AssetBundle
区别:resource的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)所以unity推荐的方式是不用它,都用bundle的方式替代,把资源达成几个小的bundle,用哪个就load哪个,这样还能分包发布和patch,但是在开发过程中,不可能没更新一个资源就打一次bundle,所以editor环境下可以使用assetdatabase来模拟,这通常需要我们封装一个dynamic resource的loader模块,在不同的环境下做不同实现。
18、给定一串数组,找到数组中的三个数使的它们的积为最大的积。(编程)
19、一组学生排成一排,按照成绩给他们分配苹果,最少得一个,相邻的成绩高的多得一个。给定一个成绩数组,计算一共要多少苹果?
20、请描述游戏动画有哪几种,以及其原理?
主要有关节动画、骨骼动画、单一网络模型动画(关键帧动画)。
关节动画:把角色分成若干独立部分,一个部分对应一个网络模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;
骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网络蒙在骨骼之外,决定角色的外观;
单一网络模型动画由一个完整的网络模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
21、alpha blend工作原理
Alpha Blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。
22、投一个骰子4次得到1次(包括1次)以上6点的几率和投两个骰子24次得到1次(包括1次)以上两个6点的几率是否相同,说出计算思路。
23、下列代码在运行中会产生几个临时对象?
sring a=new string("abc");
a=(a.ToUpper()+"123").Substring(0,2);
在C#中第一行是会报错的(Java中倒是可行)。
应该这样初始化:
string b=new string(new char[]{'a','b','c'});
5个临时对象。
24、tcp和udp的区别
1、基于连接与无连接
2、对系统资源的要求(TCP较多,UDP较少);
3、UDP程序结构较简单;
4、流模式与数据报(报文)模式;
5、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 少量数据 传输大量数据
速度 慢 快
25、下列代码在运行中会发生什么问题?如何避免?
List <int> Is=new List<int>(new int[]{1,2,3,4,5});
foreach(int item in Is)
{
Console.WriteLine(item *item);
Is.Remove(item);
}
产生运行时错误,在Is.Remove(item)这行,因为foreach是只读的。不能一边遍历一边修改。