[分享] unreal engine 4 跨平台建置

楼主: damody (天亮damody)   2014-05-21 14:43:12
我要分享的是 unreal engine 4 的建置方式:
这是unreal团队抓 include 跟 import 的 regex
以下这两段是c#
static Regex CPPHeaderRegex = new Regex (
"(([ \t]*#[ \t]*include[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n*)|
([^\n]*\n*))*" , RegexOptions .Compiled | RegexOptions .Singleline |
RegexOptions . ExplicitCapture );
static Regex MMHeaderRegex = new Regex(
"(([ \t]*#[ \t]*import[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n*)|
([^\n]*\n*))*" , RegexOptions .Compiled | RegexOptions .Singleline |
RegexOptions . ExplicitCapture );
unreal engine 4 使用 UnrealBuildTool(UBT)
这一个他们自己用c#写的工具
来建置所有专案,一开始我觉得很怪,那他们要怎么编译
以前的跨平台工具像cmake,都需要自己写一个build rules
那他们呢?
写了大量的 cs 档来描述如何编译
module(obj) 用 xxx.Build.cs
exe dll lib a 用 xxx.Target.cs
使用自定义的 DynamicCompilation 包装内建的函数
使用dotnet v4 来编译
把指定或默认的source path里面所有的cs档抓出来编译
编译完后再读进来看有没有要编译的模组
unreal 团队把编译规则写在cs档中
而 linux, mac 则用 mono 的 dotnet 来编译执行
还自己写解 include 档相依性的程式
自己合成编译指令呼叫 cl.exe 编译
mac上当然会转换成对应的参数
unreal 团队为了开发一个游戏引擎
写了一个类似 cmake, bjam 的 c#版 make 工具
写了一个跨平台的UI Framework
写了错误回报程式
SymbolDebugger
自制pak工具
建立了跨平台的c#动态呼叫机制
......
真的获益良多。
就算没有要往游戏界发展,
光是看他的code就有在吸收高手功力的感觉。
由于他们自定了自己的make工具,
所以可以自定义的选择自己需要的cpp,
再编译连结,可以从他们的介绍影片了解这个流程。
游戏引擎=>开新专案=>游戏引擎产生c++ class程式码(.h .cpp)
=>游戏引擎呼叫cl.exe link.exe生成dll=>dynamic link 进编辑器执行
在 gamedesign 看到的 Why C++ for Unreal 4?
http://ppt.cc/LqAH
在这个project中,感受到了他们的精神,
不过他们的成员都很喜欢使用新东西,
程式码在windows下要 VS 2013 才编的过。
作者: Killercat (杀人猫™)   2014-05-23 02:58:00
这不奇怪啊 Qt也是这样搞的 :D只是Qt相对单纯的多 单纯把code做一次pre-pre-compile
楼主: damody (天亮damody)   2014-05-23 12:13:00
回楼上,我用qt有太多惨痛的经验 一直不是很喜欢qt
作者: Killercat (杀人猫™)   2014-05-23 13:02:00
qt5.5用用看 我很推荐喔 :D
楼主: damody (天亮damody)   2014-05-24 04:23:00
QT 哪来的5.5?
作者: Killercat (杀人猫™)   2014-05-24 05:02:00
er...现在才看到 -_-; 纯粹的手误打错字 是5.3
作者: asoedarren (天真岁月阳仲寿)   2014-05-24 18:32:00
推 感谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com