格格她爹讲程序---用传统程序员的方式玩UE4(一)

来源:互联网 发布:nginx 密码认证 编辑:程序博客网 时间:2024/06/10 04:58

格格她爹讲程序---用传统程序员的方式玩UE4(一)

 

“如果回到十年前,你会做啥?”这是我的领导在年会上问的问题,我在心里偷偷的回答:“买房!”哈哈!当然,这是玩笑,因为,我们还没办法回到十年前。但是,如果我们能预估一下十年后呢。

UE4开源了,这件事,别说放到十年前,不可思议,即使现在,刚知道这件事的时候,我也同样觉得不可思议。但是,仔细想一下,这件事,也在发展的规律之中。大公司都在建立自己的生态圈,即大公司在潜移默化的改变人们的思维方式。这是经济发展到一定规律的必然结果。前两天googleEarth的开源,更是进一步说明了这一点。

改革开放的初期,物质还是很缺乏,所以,第一批党允许的“先富起来”(声明一下,我很佩服邓小平爷爷的)的人是基础生产资料的生产者,比方老家的水泥厂等。后来,人们都开始想通了,大力生产,果树种植,泡沫厂,炼油厂,养鸡厂都开办起来了,每个小村都有几十家小的工厂。但是,购买力和物流的限制,导致了这些人没有成为第二批“先富起来”的人。第二批富起来的人是做类似超市的人,记得那会我刚大学毕业,那会有个跑业务的哥们经常定购福布斯杂志,我简单看过几期,那会除了微软的盖茨大叔,排名前几名的,大多数是做超市等相关的,比方沃尔马、比方国美。这时,我记得我们村里好像一年之间多了四五家小卖部,一个不到一千户的小村,卖家用电器的就有三五家。同样,这些人没有成为第三批“先富起来”的人,这几年,电商开始渐渐的占领了整个市场,免费等概念也渐渐的形成了人们的主流。所有有识的人都在搞信息扩大化,上次和老家人一个连高中都没上过的哥哥聊天,他甚至出口就能说出来“亚马逊的老板说过,‘给每个人推荐一本书,就是他要马上购买的那本’。”

既然形势都很明显了,那么真的不难理解UE4的开源了。大公司下一步要做的事,就是把自己的圈子搞大,然后,在这个圈子里引导大家朝着“共同富裕”的方向前进。

但是,UE4开源,也只是引起了一个话题,并没有改变我们大家,连我自己都还是继续玩着OSG等平台。UE4开源的前几天,我就拿到了源码,并且编译了,并没有真正的研究,甚至没有研究的欲望。其实,这也正常,大公司例如搜狐畅游、完美等游戏公司,都有自己的显示平台,不需要花大力气去研究别人的平台,小公司没有足够的实力去研究这些东西,用原来现成的就足够了,个人方面,我就是典型的代表,大多比较懒,没有看到利益的时候,不可能去做太多的事。所以,现在虽然UE4开源一年了,市场上连本学习的本都没有。

当然,肯定有人说,UE4的书一堆一堆的,连视频教程都已经降到5块钱一份了。对此,我只能呵呵。

现在用UE4的人,90%的是美工转过来的,利用UE4的编辑器,像做U3D程序一样,编辑好,直接形成EXE,我希望是像用OSG或者OGRE等平台一样,用C++代码来完成项目。当然,我的思想,不一定适合所有人。但是,适合我这种,所处的行业,希望把OSG、OSGEARTH、UE4连接在一起的行业。即,大场景态势+小场景效果。因为这才是我觉得UE4下一步要发展的关键。

好了,废话说完了,我们来开始看代码吧。(下载和编译不说了!满网都是资料)


UE4的目录结构还算是比较清楚的,和OSG、OGRE都有类似的名字,甚至内部还有一堆类,和起名,用的技术都有相似的,如果大家了解过OSG等平台的,读起来还是很容易的。比方,Plugins直接反映就是插件,Core一看就是内核。

所以,我们很容易找到Source这个源码目录,用VS打开,也很容易知道源码分四大块:ThirdParty比较容易理解,百分之八十的平台类的都有这个目录,连名字都不会改变,第三方库。Editor虽然比较新鲜,但是打开UE4一看就知道了,这个是编辑器相关的,这里补充一句,这里是编辑器UI相关的。Runtime很容易理解,如果不理解,打开看看,看到Core也就明白了,这就是核心,当然,没有研究过平台源码的人,也可能不知道。至于Developer,开发者?其实是开发者的福利:工具类。

然后,我们来说说UE4的一些“普通先进”的编程思想:

首先就是组合模式,这一点,你跟一下Editor就可以知道了,别想在这里面找到“普通程序员”做的各种窗体,因为,没有,所有窗体都是组合起来的。这里说一个概念,大家注意一下,就是Actor,好多UI折腾到最后都是Actor或者类似Actor的东西,然后,不断的OnTick。想跟踪代码的话,如果你想找到一个模式的对话框,然后,上面一堆添加角色,添加圆球添加矩形的控件,然后,你再找到那些函数,按一个按钮,执行一个操作……我只能说,醒醒吧,那对于UE4的程序员来说,是上世纪的技术,现在是2017年。

其次是脚本,这个不解释太多了,人家是有自己的“蓝图”系统的,所有能拆的全拆了,然后,中间通过消息传递,很少有直接的函数调用。解耦合解成这个样子,对代码阅读来说,很是费劲。同样不能用传统的方式来跟踪调试。有兴趣的到内部看看,好多解析字符串的地方,不要担心,这些地方费不了太多的CPU周期,而且,你要做成“专用”而不是通过软件,这块你就可以和你的老板提优化了。(要是你老板有一定水平的话,千万别把它当成主要和老板说,他会让你自己找人事谈降工资的事)。

第三是新C++语法,这个其实带来啥好处,我也说不清楚,只是在其中会遇到一些中国大学科班出身的程序员无法读懂的地方。不服的,先告诉我下面这个是函数还是类?

把这些思想大概了解了,我们再说几个我的经验,不要算是技巧。

首先,英文不好的,技术术语了解不多的,在目录中找到Content,打开“Content\Localization\Category\zh-CN”,然后,你用记事本把Category.archive打开,好的,大部分界面上能看到的东西,你都能找到,然后,找到相应的单词,再到代码里去查找。这样,你就可以很轻松的找到地方跟踪进去

其次,如果你水平不高,单位领导又非让你研究,你就只研究Editor吧,这样,你随便改几个界面,他都会觉得你比较厉害。甚至不用改代码。Content里有许多图片,你把图片改了,就行了,比如“Content\Splash”是启动时调用的,当然,老板问起,别和他说是我告诉你的。

第三,一定先把渲染流程和场景跟一遍,可以看不懂,有点印象就行了,这样,以后我们再继续看代码的时候,至少有些概念。渲染流程可以从FPrimitiveSceneInfoCompact入手,场景从SProjectBrowser::OpenProject入手。再有兴趣,还可以从WinMain跟一下,这个是真正的启动函数。

第四,如果直接按F5启动的话,加入启动命令行。否则,程序先进入打开工程的界面,你选了工程,它就退出了。


0 0
原创粉丝点击