欢迎来到天天文库
浏览记录
ID:35295060
大小:17.47 KB
页数:4页
时间:2019-03-23
《unity3d技术之使用经验总结篇》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Unity3D技术之使用经验总结篇 09年还在和其它小伙伴开发引擎的时候,Unity3D就初露头角。当时就对这种基于组件式的设计结构很不理解。觉得拆分过于细致,同时影响效率。 而时至今日,UNITY3D已经成为了众多团队的首选3D引擎。并且,随着Unity3D4.3的发布,原生的2D支持也让人大开眼界。虽然Unity3d的原生2D功能还有很长的路要走,但也阻挡不了它称霸当下。 2011年中,公司的引擎项目停止之后,我的目光便转到了U3D的身上,经过几番挣扎后,终于对基于组件式的对象模型有了新的认识。而如今,这种模式,成为了我最推崇的模
2、式。因为它能解决我在设计引擎对象时的纠结。而这些纠结,是我在先前的引擎开发中,一直不能优雅地解决的。 首先,我们来说说U3D的好处。可能总结得不够完善,如果有不足的地方,就表示我自己没有体验到。一、可定制的IDE环境 U3D这种ALLINONE的设计思路,我在一个叫神咒的代码中见到过。集所有编辑器于一身。虽然神咒的编辑器不能自由扩展,但由于是公司内部的引擎,所以,它的使用,也很方便。比如,在场景中突然想要对一个模型的材质进行编辑,则选中此模型,右键,弹出材质编辑器即可。组件式思路,将这种关系变得更加紧密。你都感觉不到自己在使用一个材质
3、编辑器。你会觉得,你是在操作这个模型本身。它的材质,它的碰撞器,它的对象结构等等。 回想一开始进入游戏行业的时候,天天啃着代码。当时觉得代码就是一切,各种认为很牛X的代码,都忍不住读上一番。而随着时间的推移,特别是经过项目的洗礼后。突然发现编辑器是多么的重要。就我做的第一个页游来说,起手前两个星期,我们就做了动画编辑器,场景编辑器。而最终证明,因为这两个简陋的编辑器,使我们后面的工作变得更加容易。 因此,一个好的引擎,必定得先有一个功能完备的编辑器。二、基于Mono的开发脚本 C/C++无疑是图形界的宠儿,也没有人想过用另一种语言
4、来替代它。即使是U3D,亦是如此。但是,早期使用C/C++编写的引擎,都理所当然地使用C/C++来作为上层逻辑的开发。又有一些,采用了纯脚本的模式。比如Python,LUA。脚本的好处在于更低的编码成本(经过仔细研究,我发现,这是由于写脚本语言的心态和写C++的心态导致的。写C++的时候,总是想着代码的复用度,而在脚本的时候,很多时间会认为,这个脚本,就是为这个对象服务的,那我就按照策划需求来写就可以了。我想,这也是许多时候,脚本语言存在的意义。特别是早期引擎中,使用脚本来处理一些关键的事件响应)。 而大家熟知的虚幻引擎以及有一个名不见经转的T
5、orque,则自己整了一套开发语言。我想,它们的目的,就是为了使大家能够以一种更安全的方式来编程,C++一不小心,则会带来内存和效率问题。它的使用成本,人员成本其实是高于其它语言的。MonoC#JS,BOO的出现,再一次让大家的眼睛一亮,原来,引擎可以这样整。 Mono的桥接,使得高效的C++图形引擎与带GC的内存安全语言进行结合。不仅减少了安全隐患,也使得大家编写跨平台代码时更佳容易。同时,这类语言的反射机制,更适合做编辑器。而比起先前的一些DIY语言和像LUA这样的小巧型语言,Mono使脚本编程可以进行DEBUG,而不单纯的靠PRINT
6、输出。文章出处【狗刨学习网】 这里就顺带说一下三个语言的区别 C#这是我见过的大型项目中使用得最多的语言,也是我比较喜欢的语言。因为它和C++很像,同时严格的类型和语法检查。 JS在帮一些朋友做小东西的时候,使用过这个语言,由于mono自带的提示功能,写起来还是挺顺手。但总给我一种摸不着头脑的感觉。并且U3D给的JS,不是严格的JS,有些语法不支持,而有些语法又很特别。 BOO完全没有使用过,貌似也很少有人使用。三、基于组件的对象系统 这是一个我最喜欢的系统,我也使用irrlicht引擎山寨过,山寨的过程中,几乎看完了它
7、的组件参考手册,使我对U3D引擎的组件系统又有了新的认识。同时,目前公司自主研发的引擎,也是这样的思想。不管我是在工作中,还是业余捣鼓都受组件系统的影响。慢慢的,喜欢上了这种对象模式。 之前在做一个RTS游戏项目的时候,参考了著名开源项目0.A.D的代码。当时只是为了去寻找LOS和多单位协同寻路的方案。但在参考其代码的时候,发现了它整个系统,都是基于组件式的。又一次,对组件式有了好感。而经过仔细思索后。回到了我一直坚持的子系统划分法的游戏框架。当我不禁感叹,原来,自己也一直是在组件式。只不过,我的组件式,是MANAGER方式,MANANG
8、ER内部进行对应的实体管理、。比如,背包系统,则只负责玩家背包数据,背包使用,背包相关的功能。不管是数据存储,还是与前端通信,都是背包系统自己在负责,
此文档下载收益归作者所有