Unity3D专访——真正的面试

本来想写一系列的,一半的攻击,现在面试的水。人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的。还有一半是对出出学校的或者是自废武功转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不让你搞。。

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

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

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

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

时间: 2025-01-01 11:11:56

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

unity3d 我的面试经历

昨天在上海的一家公司面试成功了 这是我第一次面试,也是我的第一份工作 先上我的简历给大家参考下吧 个人简历 个人信息: 姓 名: 廖旭升         学 历: 无 民 族: 汉               专 业: 无 性 别: 男               所在地:江苏张家港 年 龄: 21岁            电 话: 1515********* E - mail:[email protected]              QQ:6087537 求职意向: Unity3D手游客户

Unity3D面试高频知识点

数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的Demo. 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作. 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化. 2.如何优化内存? 有很多种方式,例如 1.压缩自带类库: 2.将暂时不用的以后还需要使用的物体隐藏起来

Unity3D面试问题

注意,是问题,不是笔试题哦.这些是我最近面试北京各公司总结的一些被问到的还算典型的问题.跟大家分享一下.答案是我自己的,不保证标准和完整. 哎,公司年底开人,又校招一群便宜的小鬼……桑死心了……好在找到工作了. 言归正传: NGUI在不同屏幕分辨率下如何适配? NGUI本身是按照高度进行适配.NGUI按照目标设备的高度(targetHeight)与设置好的高度(manualHeight)的比值来进行适配.如果宽高比是一样的,则总可以完美适配.但如果不一致,则可能会出现左右两边有黑边(比设备宽高比

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

本来想写一个系列的,一半是抨击现在面试之水,要人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的.另一半是对出出学校的或者是自废武功转3d的朋友们提供一个比较有价值的参考.不过我时间实在仓促.没有保证,写一点算一点吧.先识别一下,你到了公司会让你干什么:1.UI(面试题会偏向NGUI等ui操作,会考到一些简单的排序算法,数据结构,问题处理思路等)2.数据逻辑层(会考到数据结构的搭配,配置表的构造等)3.游戏控制流程(会考到状态机的设计,与服务器协议的设计,以及少量lua或python脚本编写内容

论unity3d简历的重要性

大家好,我是灰太狼,看到好多unity3d学员说学unity3d,毕业找不到工作,我很是不解,但是当我看到一个泰课学员的简历(对不起石峰弟弟,我又卖你了),我才明白,原来是简历写的不好,不会包装自己,今天写这篇文章就是告诉大家找工作其实很简单,就是你们简历写的太差,所以我写了这篇文章希望对你找工作有帮助. 第一.简历的格式:(A4纸,1.5倍行距,小四号字) 1.填“现居住地”,不要填“户籍所在地”.(现居住地不是你现在住的地方,而且你要找工作的地方,比如你想去上海找工作,但是你现在在合肥,那你

[原]unity3d之http多线程异步资源下载

郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来填补一下自己的空白,同时分享给大家.说明:本人只在pc和Android下测试好使,其他平台未知! 直接贴代码,都是C# http的API,不懂得自己百科. using UnityEngine; using System.Collections; using System; using System.

unity3d最新面试题与参考答案汇总

1.在类的构造函数前加上static会报什么错?为什么? 构造函数格式为 public+类名,如果加上static会报错(静态构造函数不能有访问修饰符)原因:静态构造函数不允许访问修饰符,也不接受任何参数: 无论创建多少类型的对象,静态构造函数只执行一次: 运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数: 静态构造函数执行先于任何实例级别的构造函数: 显然也就无法使用this和base来调用构造函数. 2.C# String类型比stringBuilder类型的优势是什么? 如

长期寻求Unity3d工作

最近在学Unity,也在试着做一些demo 寻求Unity3d客户端工作一份. 坐标:福州.由于家庭原因没有离开的打算,接受短期的出差,有木有的福州的朋友~~ 爱游戏,爱生活,技术宅, 目前职业情况:就职于创业型公司,福州地小,不报名字了哈. 工作主要内容:lua客户端.我主要负责UI部分全部功能. 项目规模:重度手游(无限加班中%>_<%) 工作经验:工作经验都是过去的,转换手游大半年,简历就不多写了,简历可以造假,面试可以临场发挥,现在把博客当做简历,虽然现在工作非常的忙碌(每天10小时以

《Unity3D/2D游戏开发从0到1》正式出版发行啦

书籍信息:   书籍的名称: <Unity3D/2D 游戏开发从0到1>   书号(ISBN): 978-7-121-26239-5    出版社: 电子工业出版社   发行时间:2015年7月1日 写作背景:    2015年6月30日我收到电子工业出版社张迪老师寄来,正式发行的<Unity3D/2D游戏开发从0到1>书籍.这本凝结着大半年心血的作品让我感慨万千.   本人从事游戏.软件与教学十多年,一直梦想可以进一步服务于全国广大的游戏与软件从业开发人员.14年下半年电子工业出