本来想写一系列的,一半的攻击,现在面试的水。人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的。还有一半是对出出学校的或者是自废武功转3d的朋友们提供一个比較有价值的參考。

只是我时间实在仓促。没有保证。写一点算一点吧。

先识别一下,你到了公司会让你干什么:

1.UI(面试题会偏向NGUI等ui操作,会考到一些简单的排序算法,数据结构。问题处理思路等)

2.数据逻辑层(会考到数据结构的搭配。配置表的构造等)

3.游戏控制流程(会考到状态机的设计,与server协议的设计。以及少量lua或python脚本编写内容)

4.项目架构(主程内容。。

你懂得。

反正我还不够格面这个。。)



UI的没什么好说的。去了之后天天layout,毫无乐趣。可是吧,新手都得虐过一次,才干够。

数据逻辑层,也就是统筹整个游戏的后台运算数据,按照网络模块给予的数据,维护整个数据基的稳定和swift。

这个工作与unity基本无关。可是是不可缺少的。一般简历上写过什么acm之类的。会让你搞这个吧。

游戏控制流程,至此開始进入高级程序猿的行列。你会接触非常多unity相关的内容,比方技能释放。角色换装,角色状态控制等等有趣的内容。通常假设你不是自废武功转3d或者再原来公司本来就干这个,仅仅是干腻了跳槽而已。是不会让新手干这个的。项目架构这个略掉,我没资格谈这个。



说道这里本来应该结束废话的,可是可能引导大家对UI有了新的看法)——它不值得去做。事实上不是的,UI这东西尽管无聊,可是是新手接触引擎,熟悉代码的最佳通道,同一时候也是全部公司愿意开放给各位新手的一个免费培训通道吧。由于UI代码非常不值钱,你走了谁都能接上,所以他们愿意用新手。

以下来谈谈。假设我时面试出卷子的那个【sb】,我会问什么。

这些问题都是项目中坑过我,害过我。让我哭让我痛得问题。

UI方面:

1.你认为为什么UI摄像机和场景摄像机能协同工作,并且工作的这么尽如人意呢?

答案:UI摄像机和场景摄像机分别属于两个渲染层(Layer),所以它们之间的渲染互不干扰。

它们工作得尽如人意(没有发生先后错乱,UI永远位于场景之上层)的原因就是由于摄像机深度(depth)控制的好。



2.你认为怎么防止UI控件被点穿(怎样过滤掉点击事件)。

答案:使用一个可渲染的物体或者pannel,绑定boxcollider组件就可以。

假设你单用一个不可渲染的物体(这里点cao一下UIwiget),即使设定了大小和boxcollider。也是无法屏蔽的。

(坑在这里)。

3.关于UIGrid问题

答案:我基本不会使用UIGrid。我会直接在代码里设置localpos等等。(这个控件是非常坑的)。



4.你对UI功能模块之间相互通信有什么好看法。(或者问成Broadcast和sendMes的看法)

(这道题目是我被面的一道题目,相当精髓。后来问我这道题目的人成为了我得同事,多谢他不计较我当时回答的非常操蛋,并且如今他仍旧如老师一般帮助我。)

答案:UI模块之间尽量解耦合,使用BroadCast机智或者delegate机智。因为Unity自身的BroadCast和SendMsg效率是非常低的,(务必百度一下这俩的差别,都有,我懒得复制粘贴了。

)所以推荐使用NGUI自带的那个消息机智。详细的用法,下载不论什么一款NGUI3.5左右的版本号,都能清楚的看到。更或者自己实现一个msgerpool也能够,思路是使用泛型写法+字典+delegate。效率也非常高。



5.众里寻他千百度,你怎么样能迅速找到某一个UI控件。

答案:分情况处理。这是一个优化策略的题目。首先假设这个控件我在awake的时候能知道,那么我会把它存成一个private变量,代码中使用的时候直接使用就可以。

假设不行,这个子物体是动态生成的(他可能有或者没有),那尽量使用FindChild,得到之后加以推断。

假设不得不全局找一个东西(比方找到角色物体)。才会用Find。



6.你对遮挡关系有什么好的策略。

答案:这样的问题的诞生是因为Ngui2採用了一种zorder+depth方式处理遮挡关系造成的。已经在ngui3里全然屏蔽掉了。

仅仅要维护depth就可以。



7.你对屏幕适配有什么好主意。

答案:屏幕适配根本没有完美的解决方式,假设是全屏模块。那么锁定目标机型,将目标机型做成满屏,其它机型充满宽或高后留白(也叫留黑边)处理就可以。假设是屏幕模块(比方战斗界面。主城界面等等,你会看到下边的场景那种),须要採用Anchor来解决。NGUI2 Anchor有独立的控件,NGUI3Anchor已经被搞到Wighet和Pannel中,这个自己下去好好研究研究吧。

UI的就这么多,假设问了。你回答的不错,想感谢我,请多来蛮牛看看~



数据逻辑层方面

1.请简述一下你对数据结构的选取有什么看法

答案:批量取,常常遍历的数据,会採取List来存储,常常查找的会採取字典存储。同一时候假设多个字段比較重要(比方一份配置表常常会id索引以及name索引),我会开辟多个字典进行存储。牺牲空间换取逆向查找效率。

2.请把这份配置文件解析成你想要的数据结构,给我看看

答案:这份配置文件假设是xml或者json,那么它肯定会被先转换成HashTable,然后你依据配置表的可能拥有的字段(比方有一个物体,它有“使用后添加体力”这个字段,有的没有。你要用ContainsKey来检測是否有字段),挨个拆出而且存入你想要的数据结构中,假设你想要的数据结构是字典,须要注意的是在加入key的时候,应该询问是否包括了这个key,假设包括,则改动。假设不包括。则加入,,大家智力都没有问题。

试一试就会非常清楚。

假设这个配置文件为excell。那么它将会被转化成一个string数组。数组的每个元素,都是一个字段数据,依照配置表的顺序挨个取出来存入你得数据结构中就可以。



3.请简述一下C#中。结构体和class的使用方法

(再次鸣谢面试我得那位同事,容忍了我回答的非常烂)

答案:假设你是自废武功。从C++转到C#,这俩东西会让你大跌眼镜。C++中结构体和类差点儿没有差别。C#中。结构体属于对象,而类属于引用。结构体不须要new出来。类必须new出来。这是个巨大的坑。比方你搞了一个结构体链表:

List<structA> structtestlist = new List<structA>();

然后给这个链表中注入数据,注入数据之后,你想更改当中的一个链节。你是这么做得

structA structlink = structtestlist[2];

structlink.data = 3;

这样做,根本没有改动到structtestlist中得值!

由于声明structlink那一句话,是个对象。并非指向那个(链节)的“指针”!

可是假设是class,你这么做毫无烦恼。

这个东西建议大家试试。非常坑比。



4.接受到网络发来的数据,你会怎么办

答案:着手做项目之前,会搞一个txt。client内部消息协议罗列到上边,这个消息协议是网络协议的处理映射。比方网络协议告诉我,“由于你刚才吃了一个药,吃成功了,如今你得给我刷新,让用户大大可以看到”,我就必须通知所牵连的模块:“你得数据被刷新了。再老地方又一次取一次,刷新界面给用户大大看”。牵连到得模块,比方就是战斗UI,它要把血条给加上去,还有character信息的数据基,更改当前血量数据等等。这些模块收到协议之后,改变自己的值:比方UI就会从数据基里取。而数据基会从网络包或者配置表里取等等。

游戏控制流程:

1.你对资源载入有什么看法。

答案:首先资源载入这个东西。就是老大难,用户一遍遍的吐槽载入的慢,可是谁也不愿意让载入的少导致后边必须载入而变得卡顿。

对于比較耗费的载入。属于IO操作,在游戏刚登陆的时候,进行初始化载入。

强制载入一些重要模块,比方登陆窗体(用户输入usernamepassword的地方)等等。选择性载入一些必要的模块:假设这人须要新手引导,则载入新手引导模块。否则不载入,反之亦然。这些用户一定会用(或者一定不用)的模块。在登陆时候处理好。对于应用模块:比方我打开一个非常庞大的UI,这个怎么载入,假设这个模块非常吸金,用户用得概率非常大,那么必须在登陆时载入。否则那仅仅能用户打开的时候载入了。载入的时候要转圈提示用户。。关于场景载入更加的莫衷一是。既然大家被面到这一步了,相信也不须要我废话了。一个程序有一个程序的活法不是吗?



2.请给我设计一个状态机。完毕一个简单的xxxx情景。

答:状态机并非单纯的switch结构,假设你是新手,你说switch我能够容忍。假设你干了好些年2Dx。然后想自废武功搞U3d了,再说switch就直接pass了。能够去搜一下相关资料,水不是非常深。但篇幅有限。大概意思就是,每一个对象都维护自己的状态机,状态机的状态改变,靠状态触发器。全部的状态(不是状态机。。状态机是一个主管它负责调度各种状态,状态是各种。

。。状态。

哎不可言传啊。

。)。都会重写begin,excute。end这三个函数,本来敲了一大堆。。

发现说也说不清楚,大家自己去看看吧还是。毕竟这仅仅提供一种面试方式而已。。

3.角色换装。技能释放你会怎么做。

角色换装这个。各有各的活法。尸块换装,纸娃娃贴图等,这个莫衷一是。能够自己百度去,找一个自己喜欢的实现一下试试吧。

技能释放水是非常深的,这个能答就答。答不上来也不丢人。预计被面这些的,肯定都比我强,也就不须要我比比什么的了。。

4.动态更新有什么看法。

答:这个题牵扯到assetbundle问题。当中assetbundle面对资源的处理方法是截然不同的。

比方对于prefab。能够非常好的搞上去,对于二进制文件,也能搞得不错,可是对于代码这个东西。往往是大家争论的焦点——毕竟代码这个东西。iosAppStore是肯定不让你搞得,由于unity本身也不受苹果待见,所以它怕被秒杀,也不给用户提供更新脚本的功能。这就导致比方你更新了一个prefab,没法使用它上边挂的脚本!那更新有个jb用。。。提供一下解决代码更新的一点看法,如今我再尝试搞这一块。一孔之见,轻喷

安卓上能够使用unityreflaction机制进行编译后代码的动态更新,这个广大google开发人员肯定是知道的。

可是问题就是。这样的机制会导致非常庞大的开发成本——从代码层面全然跟ios搞了个大分支,假设是想跨平台的。这恐怕是不可取的吧。



第二就是能够採用lua脚本无缝编写方法。由于unity脚本并非真正的脚本,真正脚本的威力是它能够动态编译到宿主上。这点太牛逼了。lua就是这样的牛逼脚本。

所以你能够无缝换lua。

。这个没问题。

所以立项就应该想好是lua还是什么的。。别回来做了一半,想改lua了,那就sb了。



这两种机制在App Store上肯定是不让你搞的,第一种,越狱平台也不让搞,由于unity不让你搞。。

事实上还有神奇的第三种做法。这第三种做法。就不分享了。毕竟还没有实验。说出来怕坑杀大家。。



不定期会更新这个帖子,时而一个月,时而半年的。。

对不起,希望对大家有帮助

版权声明:本文博主原创文章,博客,未经同意不得转载。

Unity3D专访——真正的面试的更多相关文章

  1. Unity3D 记第二次面试

    2014-03-10 忍不住投递了几份简历大概有20个,总共收到面试电话2个,十分之一.一个是11号下午4点面试另一个是12号下午3点面试(后来没去至于原因下面有)12号没去,为什么?因为招聘要求“精 ...

  2. unity3d 我的面试经历

    昨天在上海的一家公司面试成功了 这是我第一次面试,也是我的第一份工作 先上我的简历给大家参考下吧 个人简历 个人信息: 姓 名: 廖旭升         学 历: 无 民 族: 汉           ...

  3. 去蓝港在线面试Unity3D的笔试题。难吗?知道答案的在评论里写出来分享

    前一阵子去蓝港面试unity3d程序,在前台登记以后被领到一个吧台前面填2张个人信息表,之后有人送来笔试题,做了1个小时,感觉挺难的.之后被带到下面面试,面试的是一个年龄稍大的(可能是项目经理或者技术 ...

  4. Unity3D 记第一次面试

    事情是发生在2014-03-05 周三下午 在群里面看到上海艺游急聘Unity3D开发工程师,就整理了下简历投了去!直到接到电话通知我去面试才知道 我之前是有投了简历!太忙了 以至于真的忘了,不过那个 ...

  5. Unity3D 面试三 ABCDE

    说说AB两次面试: “金三银四” 三月份末又面试过两家:共和新路2989弄1号1001这家找了我半天,哇好漂亮的办公大楼!问了保安才知道,这个地址是小区地址.另一家也是创业公司面试我的自称是在腾讯做过 ...

  6. Unity3D 面试ABC

    最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearD ...

  7. Unity3D面试——真实的面试,unity3d面试

    本来想写一个系列的,一半是抨击现在面试之水,要人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的.另一半是对出出学校的或者是自废武功转3d的朋友们提供一个比较有价值的参考.不过我时间实在仓促.没有保证 ...

  8. Unity3D面试问题

    注意,是问题,不是笔试题哦.这些是我最近面试北京各公司总结的一些被问到的还算典型的问题.跟大家分享一下.答案是我自己的,不保证标准和完整. 哎,公司年底开人,又校招一群便宜的小鬼……桑死心了……好在找 ...

  9. 续上文,Unity3D面试ABC

    http://www.unitymanual.com/blog-3573-685.html 最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdat ...

随机推荐

  1. hdu 4920 Matrix multiplication(矩阵乘法)2014多培训学校5现场

    Matrix multiplication                                                                           Time ...

  2. MVC5

    MVC5 不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的 ...

  3. 解决IIS7中出现An error occurred on the server when processing the URL错误提示的方法

    在IIS7上配置一个asp程序,出现了一个错如提示: An error occurred on the server when processing the URL. Please contact t ...

  4. 获取Winform窗体、工作区 宽度、高度、命名空间、菜单栏高度等收集

    MessageBox.Show("当前窗体标题栏高"+(this.Height - this.ClientRectangle.Height).ToString());//当前窗体标 ...

  5. JTextAreaDemo

    问题:java swing 图形界面程序,拖了一个JTextArea出来,程序中有很多地方调用JTextArea中的append这个方法不断往文本域结尾处追加数据,但是程序每次运行,总是在程序运行完成 ...

  6. SQL Server错误代码及解释(留着备用)

    原文:SQL Server错误代码及解释(留着备用) 转自:http://www.ajia.me/Article/193.html Code Error Message 0 操作成功完成.  1 功能 ...

  7. WPF学习(12)动画

    本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...

  8. 【POJ3612】【USACO 2007 Nov Gold】 1.Telephone Wire 动态调节

    意甲冠军: 一些树高给出.行一种操作:把某棵树增高h,花费为h*h. 操作完毕后连线,两棵树间花费为高度差*定值c. 求两种花费加和最小值. 题解: 跟NOIP2014 D1T3非常像. 暴力动规是O ...

  9. Think in Java(一):Java基础

    一. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每一个对象都有自己的由其它对象所构成的存储; (4) 每一个对象都拥有它的类型; ( ...

  10. 【 D3.js 入门系列 --- 10.2 】 你可以拖动地图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处.谢谢. 本节是结合9.2节 和10节 的内容制作的一个可力学导向的中国地图,用 ...