6.7Unity简答题

1.写出四种匿名委托的格式 

答:委托的格式:(每点 1 分)

(1)delegate(参数列表) {方法体};

(2)(参数列表) => {方法体};

(3)Func<参数类型 1, 参数类型 2, 返回值类型> 委托名

(4)Action<参数类型 1, 参数类型 2> 委托名

2.拖拽事件的三种接口?答:拖拽事件的三种接口:(每条 1 分)

(1)IBeginDragHandler

(2)IDragHandler

(3)IEndDragHandler

3.简述事件的使用步骤(5分)答:事件的使用步骤:(每条 1 分)

(1)声明委托

(2)声明事件

(3)绑定事件

(4)调用事件

(5)触发调用时机

4. u3d中碰撞器和触发器的区别?

答:(1)collider碰撞器会有碰撞的效果(受力的作用);

IsTrigger = false;

可以调用OnCollisionEnter/Stay/Exit函数;

参数类型为Collision

(2)trigger触发器没有碰撞效果 (不受力的左右);

isTrigger = true;

可以调用OnTriggerEnter/stay/exit函数;

参数类型为Collider

5.GameObject.Find 和 transform.Find的区别(4分)

答:(每点2分, 未答全得1分)

(1) GameObject.Find :返回 Gameobject,全局查找transform.Find:返回 transform,找当前游戏物体的孩子(子物体)(2) GameObject.Find 找不到当前未激活的对象

transform.Find 找到未激活的对象

6. 四元数(Quaternion)和欧拉角的优缺点 (8 分)

(1)欧拉旋转

优点:(2 分)

1)很容易理解,形象直观;

2)表示更方便,只需要 3 个值(分别对应 x、y、z 轴的旋转角度);缺点:(2 分)

会造成万向节锁(Gimbal Lock)的现象。由于万向节锁的存在,欧

拉旋转无法实现球面平滑插值;

(2)四元数旋转

优点:(2 分)

1)可以避免万向节锁现象;

2)只需要一个 4 维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高;3)可以提供平滑插值;

缺点:(2 分)1)比欧拉旋转稍微复杂了一点点,因为多了一个维度;

2)理解更困难,不直观;

7. 按执行顺序写出在脚本生命周期内,一定不会重复执行的方法。(3分)

(方法对但未按顺序得2分,方法未写全但按顺序得2分, 有错误方法得1分)

答: Awake () / Start () / OnDestroy ()

8. TCP和UDP 的区别?(6分)

答:(每点1分)

1、TCP 面向连接(如打电话要先拨号建立连接)(三次握手);UDP 是

无连接的,即发送数据之前不需要建立连接,每一条 TCP 连接只能是

点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信

2、TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无

差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保

证可靠交付

3、TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节

流;UDP 是面向报文的(数据报)

4、UDP 没有拥塞控制(或叫流量控制),因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)

5、TCP 首部开销 20 字节;UDP 的首部开销小,只有 8 个字节

6、TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道

9. [SyncVar]、[Command]、Spawn 的作用分别是? (6 分)

答:

(1)[SyncVar]:服务器的值能自动同步到客户端,保持客户端的值

与服务器一样。(2 分)客户端值改变并不会影响服务器的值

(2)[Command]:客户端调用,服务器执行。(2 分)需要注意,在

客户端需要有权限的 NetworkIdentity 组件才能调用 Command 命令。

(3)Spawn:把服务器上的 GameObject,卵生到与服务器连接的各

个客服端。(2 分)根据 NetworkIdentity 组件找到对应监视连接,

在监视连接里生成相应的 GameObject.10、对SqliteConnection、SqliteCommand、SqliteDataReader说明作用 (6分)

答:(每条 2 分)(1)SqliteConnection:数据库连接对象,用于连接数据库、创建

SqliteCommand、以及打开和关闭数据库;

(2)SqliteCommand:数据库命令对象,用于执行 SQL 语句;

(3)SqliteDataReader:数据库读取对象,用于高效读取数据库里

面的记录

11、使用 AssetBundle 实现资源热更的流程? (5 分)

(每条1分)

(1). 打包 AssetBundle。

(2). 上传到服务器 server。

(3). 运行游戏时候自动判断版本号,如果不同就从服务器上下载新的 AssetBundle 包替换本地 AB 包。

(4). 解析加载 AssetBundle.完成资源热更。

12、写单例类 Student 的实现(4 分)

答:代码如下:

public class Student {

private Student {};(1 分)

private static Student instance;(1 分)public static Student GetInstance()

{

}

if  (instance  ==  null){

instance  =  new  Student ();

}

return instance;

}(2分)

13、什么是预制体,使用预制体的目的是?(2 分)

答:(每点 1 分)

(1)预设体是一个游戏对象及其组件的集合

(2)目的是使游戏对象及资源能够被重复使用,相同的游戏对象可

以通过一个预设体来创建

14、物体发生碰撞的必要条件 (3 分)

答:(每点 1 分)

碰撞发生的条件:

1)发生碰撞的两个物体都必须带有 Collider

2)发生碰撞的两个物体至少有一个带有刚体

3)发生碰撞的两个物体必须有相对运动

15、实现点击选中场景中的游戏物体或 UI 控件的方法有哪些? (6 分)

答:(每点 1.5 分)

游戏物体

(1)给物体添加碰撞器,并通过脚本添加鼠标事件(OnMouseDown、

OnMouseUpAsButton 等)

(2)给物体添加碰撞器,从摄像机发射一条经过鼠标当前点击位置

的射线选中

UGUI UI 控件

(1)添加事件系统,编写脚本实现相应接口方法

(IPointerClickHandler)

(2)添加按钮(button)组件, 绑定点击方法

16、Canvas 有哪三种渲染模式, 分别的使用场合是什么? (6 分)

答:

(1)ScreenSpace - Overlayer:默认渲染模式,在这个渲染模式下,

UI 会覆盖整个场景,所有的 UI 元素会在场景最上层渲染输出。(1 分)使用场合:适合做玩家的 HP、MP 等 UI;(1 分)

(2) ScreenSpace - Camera:是由场景中指定的摄像机渲染输出(1

分)

使用场合:最常用的使用场景是使用透视摄像机随 UI 进行渲染

输出,得到景深效果,可以用来实现比较炫酷的游戏开始界面,

适合做带粒子特效的绚丽 UI;(1 分)

(3)WorldSpace:在世界坐标系下渲染 UI(1 分)

使用场合:例如对话框、标签等在场景中跟随游戏对象运动。

用来实现一些 HUD 的效果,把 UI 作为 3D 物体对待;(1 分)

17.如何实现动画遮罩? (3分)

答:(每点 1 分)

1)需要添加 AvatarMask2)在新建层中设置一个空的状态机(用来代替旧层中的某些节点)3)新层的权重值设为 1

18、简述实现小地图功能的步骤?(3 分)

答:步骤:(每条 1 分)

(1)添加 RawImage 控件,调整好位置

(2)创建单独的摄像机,并调整角度,用于照射主角或场景

(3)创建 RenderTexture,并分别拖拽到摄像机的 Target Texture

属性、RawImage 的 Texture 属性

19、Unity3D 是否支持写成多线程程序?如果支持的话需要注意什么?(4 分)

答:

(1)Unity3D 支持多线程。(2 分)能够创建额外的线程和主线程同

时运行。

(2)注意:

1)仅能从主线程中访问Unity3D的组件,对象和Unity3D系统

调用,如果同时你要处理很多事情或者与 Unity 的对象互动小

可以用 thread,否则使用 coroutine。(1 分)

2)保证线程安全,C#中有 lock 这个关键字,以确保只有一个线

程可以在特定时间内访问特定的对象(1分)

20、移动相机动作在哪个函数里,为什么在这个函数里。(4 分)

答:

(1)LateUpdate(1 分)

(2)在所有 update 操作完才跟进摄像机,不然就有可能出现摄像机

已经推进了,但是视角里还未有角色的空帧出现。(3 分)

21. 怎么判断两个平面是否相交?不能用碰撞体,说出计算方法 (10 分)

答:(2 种方法任意写一种,只写出原理或者只写出计算方法得 5 分)假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个

矩形

rect1{(minx1, miny1)(maxx1, maxy1)}

rect2{(minx2, miny2)(maxx2, maxy2)}

相交的结果一定是个矩形,构成这个相交矩形 rect{(minx, miny)

(maxx, maxy)}的点对坐标是:

minx  =max(minx1,minx2)

miny  =max(miny1,miny2)

maxx  =min(maxx1,maxx2)

maxy  =min(maxy1,maxy2)

如果两个矩形不相交,那么计算得到的点对坐标必然满足:

(minx > maxx)或者

( miny > maxy )

判定是否相交,以及相交矩形是什么都可以用这个方法一体计算完成。

从这个算法的结果上,我们还可以简单的生成出下面的两个内容:(一) 相交矩形: (minx, miny) (maxx, maxy)

(二) 面积: 面积的计算可以和判定一起进行

if ( minx>maxx ) return 0;

if ( miny>maxy ) return 0;

return (maxx-minx)*(maxy-miny)

第二种方法

两个矩形相交的条件:两个矩形的重心距离在 X 和 Y 轴上都小于两个

矩形长或宽的一半之和.这样,分两次判断一下就行了.

bool CrossLine(Rect r1,RECT r2)

{if(abs((r1.x1+r1.x2)/2-(r2.x1+r2.x2)/2)<((r1.x2+r2.x2-r1.x1-r2.x1)/2) &&abs((r1.y1+r1.y2)/2-(r2.y1+r2.y2)/2)<((r1.y2+r2.y2-r1.y1-r2.y1)/2)) {

return true;

}

return false;

}

机试题 (100分)

//C#, 在命令行输出

22、写出您想到的一种方法实现: 1-2+3-4+......+m,输入任何数字,得到

结果; (10分)

思路:使用循环语句,及求余运算进行奇偶数判断

23、 给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等

于X,要求速度越快越好;(15分)

思路:因为是有序数组,可借用二分查找思想实现

//Unity 新建场景完成以下任务

24、 实现磁铁效果

(1) 随机产生磁铁道具, 及金币(磁铁道具产生时间间隔长,金币产

生时间间隔短,都会自动消失)(5分)

(2) 控制玩家移动,玩家获得磁铁道具后 ,自动吸附附近金币的效果

(10分)

思路:使用触发器,当获得磁铁道具后触发器范围增大

25、(1)新建场景,完成场景搭建,及UI界面搭建(血条、玩家等级、玩家头

像)。(5分)

(2)生成玩家,玩家头像由网络请求得到 (5分)

(3)用户使用键盘控制玩家运动及转向,使用动画状态机 (10分)

(4)随机生成敌人,敌人产生后向玩家运动,当接近玩家时发动攻击 (10

分)

(5)玩家受到攻击后血量减少,播放受伤动画,死亡后玩家失活(10 分)(6)打包玩家资源,通过AssetBundle加载 (20分)(注意文件管理,和代码规范)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容