美文网首页
6.7Unity简答题

6.7Unity简答题

作者: 胤醚貔貅 | 来源:发表于2017-06-07 19:19 被阅读268次

    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分)(注意文件管理,和代码规范)

    相关文章

      网友评论

          本文标题:6.7Unity简答题

          本文链接:https://www.haomeiwen.com/subject/zayafxtx.html