unreal engine 54 做普通的3d游戏好不好

在digital-tutors看到的一篇文章,很多初学者都有这样的疑问,因此翻译到这里。原文:如果你想要开发并向全世界发布你自己的游戏,那么在开始之前有一些很重要的问题你需要考虑。当下有一些免费的游戏引擎,它们为你的游戏开发提供了很多遍历,但问题是,你应该选择哪一个?为了帮助你进行选择,我们将给出最牛X的游戏引擎中的3个,来让你进行比较,然后决定哪一个最适合你。在过去的几年里,涌现出很多非常厉害的游戏引擎,这些引擎让那些独立游戏开发者得以将他们脑中的想法付诸实践。其中最有名的游戏引擎有,,,以及。它们每一个都非常棒而且都有它们擅长的领域。为了帮助你决定哪一个最适合你的项目,你需要首先问下自己:你需要开发什么类型的游戏?是第一人称视角的射击游戏(FPS)?还是一个移动游戏?它是2D还是3D的?如果你正在计划发布这个游戏并以此赚点钱,那么你还需要比较每个引擎的许可费用哪个更适合你的预算。虽然这些引擎相对来说都比较便宜,但是一旦你需要贩卖你的游戏,你就需要支付许可费,版税等等。Unity引擎提供了非常庞大的游戏特性,而且它的界面很容易使用。它最出色的地方就是它的跨平台特性,这意味着你的游戏可以迅速而且方便地被发布到Android,iOS,Windows Phone8,BlackBerry等等,这使得它是一个非常棒的移动游戏开发引擎。除此之外它支持的平台还有Playstation 3,Xbox360,Wii U,Web浏览器等。Unity支持很多3D建模软件的资源格式,例如3ds Max,Maya,Softimage,CINEMA 4D,Blender等等,这使得它基本没有模型格式的限制。随着Unity4.3的发布(Unity 5马上也发布了),Unity还有2D图集和物理检测等原生2D支持,使得它也是一个很好的2D游戏开发引擎。虽然它对很多3D建模软件具有很好的支持,但是它自己在模型编辑上有很大的限制。除了一些基本的图元形状,Unity没有真正的建模功能,因此基本所有的模型你都需要从第三方3D软件里创建。但是,它有一个,里面包含了很多可以下载或支付购买的资源(资源的价钱由资源开发者决定,你也可以自己上传自己的资源)。PS:根据原文读者留言,Unity插件,例如ProBuilder和MXD,也已经可以支持在Unity里编辑图形了。Unity有几个不同的许可费用,它的版本在本文发布时是$1,500或者$75/每月。pro版本提供了很多免费版不包含的功能,包括全局光照,渲染到纹理,Mecanim IK Rigs ,自定义的splash界面等等。免费版则有一个无法消除的水印。更多细节可以访问页面。Unity的开发人员正在紧张地准备发布Unity 5。这表明Unity正在加入下一代游戏引擎的大战中,和UE4和CryENGINE一绝高下。如果你购买了Unity 4,那么在Unity 5发布的时候你会自动升级到5。Unreal Engine 4Unreal Engine 4(UE4)是一个Epic Games公司在几个月前刚刚发布的新游戏引擎,它是UDK的后续版本。UE4具有一些非常棒的图形处理能力,包括高级动态光照,新的粒子系统(可以同时处理数以百万的粒子)等。如果你是一个3D或者游戏美术人员,那么这一点一定非常吸引你。尽管UE4是UDk的后续版本,但你要知道这两个引擎之间还是有一些非常大的变化。如果你有过任何UDK的使用经验,在使用UE4时你还是需要一定的适应时间。但是这些变化并不是坏的,UE4灵活的使用方法使得它越来越对新的游戏开发者有吸引力。UE4的一个非常重要的变化就是它的编程语言。你可能之前已经知道,Unreal Engine一直以来都是使用UnrealScript。而在UE4中,UnrealScript完全被C++代替了,而Kismet被更直观的Blueprint系统所代替。有一点你需要记住,如果你想要开发一个适合于上一地啊游戏平台的游戏,那么你不会在UE4找到相应的功能。到现在为止,UE4支持的平台有PC,Mac,iOS,Android,Xbox One以及PlayStation 4。你可以制作出令人激动的游戏画面或者简单的横版游戏,并把它发布到移动平台或者下一代的平台上。你可能在疑问,既然Unreal Engine 4已经发布了,那UDK和Unreal Engine 3不就完全没用了吗?事实上,这并不准确。开发者们仍旧使用Unreal Engine 3来制作在上一代游戏平台上运行的游戏,例如PlayStation 3和Xbox 360仍然具有一定比例的市场份额。Unreal Engine 4的价格结构是$19/每月,以及一个5%的版税,如果你的游戏开始赚钱了。这样的价格结构是那些有抱负有追求的游戏开发者的福音!更多信息请访问他们的。想要了解更多关于Unreal Engine 4的信息,可以参见。或者开始学习我们的。UDK(简称UDK)是Unreal Engine 3的一个免费版本,它由公司开发,他们使用UDK开发了许多3A级游戏,例如等。它具有强大的图像处理能力,并且还可以用于移动游戏中。和Unity不同,在它的游戏引擎中就有强大的关卡设计工具。Unreal Engine一开始是针对FPS开发的,Epic公司开发它是为了第一部的(一个游戏),而在这之后,它也被用于其他许多类型的游戏如RPGs。Unreal Engine使用一个名为UnrealScript的脚本语言(一种和Java以及C++类似的面向对象编程的语言)。和Unity类型,UDK可以被发布在许多不同的平台上,包括iOS,Android,Windows Phone8,Xbox360,Playstation 3,Playstation Vita和Wii U。但是,你需要记住UDK,即Unreal Engine 3的“免费版本”仅可以发布在PC和Mac上。否则,你需要一个UDK的完全许可,也就是Unreal Engine 3。UDK完全是免费的,除非你想要发布你的游戏。当你准备好发布你的游戏时,你必须支付一个$99的许可费用,以及在你的游戏盈利超过$50,000后一个25%的版权费。你可以访问得到更多信息。CryENGINE是一个非常强大的引擎,由开发公司设计实现,在第一代游戏中首次出现。它被设计用于PC平台和游戏机,包括Playstation 4以及Xbox One。CryENGINE的图像处理能力优于Unity和UDK,但是Unreal Engine 4基本持平,拥有极度先进的光照,逼真的物理模拟,先进的动画系统等等。最近利用CryENGINE开发的游戏是。和UDK以及UE4类似,CryENGINE拥有直观而且强大的关卡设计功能。尽管CryENGINE是一个非常强大的游戏引擎,想要学号是有一点难度的,特别是如果你没有任何游戏引擎使用经验会觉得更难。如果你不需要你的游戏具有像那样牛X的图像,那么你最好不要选它,而选择一个更容易的哦。随着UE4的发布以及它非常吸引人的价格模式,CryENGINE也不甘示弱地发布了更便宜的价格模型,即$10/每月,并且没有版权税哦。你可以访问他们的来了解更多关于CryENGINE的As-A-Service编程。那么,哪个最适合我?所以这些游戏引擎都是一个不错的选择。但是相对而言,Unity更适合移动,2D和3D游戏,UDK具有强大的FPS特性并且直到你发布游戏之前都是免费的。Unreal Engine 4具有逼真的图像处理能力以及适合制作简单的横版游戏,而且它的价格模式很合理。CryENGINE同样具有引人入胜的图像能力,它还具有下一代平台特性以及比UE4更吸引人的价格模式。最后,还是由你来决定哪个最适合你的项目。但有一点是肯定的:对于你的游戏,这些引擎都是足够应付的。如果你还是不确定(选择恐惧症。。。),那,那我也只能帮你到这里了,自己再看看吧。下面的课程可以帮你学习这些引擎。,,以及。
本文已收录于以下专栏:
相关文章推荐
原文链接: /showthread.php?2574-Why-C-for-Unreal-4&p=16252&viewfull=1#post...
VR的火热,让每个人都想参与一下,
公司在展会上面搞了一个VR的Demo,关注度超出预期,使得公司高层决定来个VR项目
百度百科地址:http://baike.baidu...
本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以...
本页面的内容:
概述模式URL参数
一般选项服务器选项
开发者渲染网络用户服务器开关游戏状态/数据库INI/设置文...
自古以来所有的游戏引擎都分为三个大阶段:Init,Loop,Exit。UE4也不例外。
首先找到带有入口函数的文件:Runtime/Launch/Private/XXXX/LaunchXXXX.cp...
Runtime最关键的实现是UObject,它是所有引擎层面、游戏层面对象的基类。
UObject实现了动态创建、持久化、脚本化、内存管理、生存期控制。
---------------------...
/linqing/p/5015549.html
Posted on  11:20 林清 阅读(668) 评论(0) 编...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unity3D引擎定位在“游戏开发大众化”,在近年的手机游戏开发热潮中着实火了一把,拥有广大的用户基础。EPIC官方还专门写了一篇文档:& & & & & & & & & & & & & Unreal Engine 4 For Unity Developers:下面本人就自己个人的一些学习这两款引擎的一些体会,做一些经验总结。如果你已经熟悉了Unity引擎,现在想要掌握UE4,可以从两个不同的角度来看待你在Unity开发上积累的知识:作为两个国际水平的现代3D游戏引擎,他们两个的设计思路有一定的相似之处。这种相似,只是大方向上的,具体的细节,甚至是设计的出发点都有很多差异。两套引擎背后的设计哲学是不同的,应用思路其实差别也很大。你可以通过本文描述的两个引擎的相通的地方,对UE4有一个快速的认识。然后,还是需要把瓶子里的水倒空,当作是一个全新的学习历程来看待UE4。编辑器对照Unreal Editor和Unity乍看上去区别很大,仔细看一下,发现他们还是有一些相似之处的,从官方文档中的图可以作为一个很好的比照。“Viewport视图”,相当于Unity的Scene视图,显示当前所编辑的关卡的3D渲染场景。在Unreal Editor中没有Game视图,但是它也支持PIE(Play In Editor)。当你点击工具栏中的“?播放”按钮时,Viewport就会显示当前的游戏运行状态了,变成Unity的Game视图了。“内容浏览器”(Content Browser),与Unity的Project视图基本相当,内容浏览器管理你项目中的所有资源(asset)和游戏逻辑代码(包括Blueprint和C++)。在Unity的Project视图,你可以选中一个资源,通过Inspector视图来调节其属性,而有些资源可以通过特定的编辑器来编辑,例如Animation。而在UE4,所有的资源都有自己的编辑器,你可以双击任何一个资源,打开特定的独立编辑器,包括静态模型编辑器,Persona骨骼动画编辑器,UMG UI编辑器(Unreal Motion Graphics UI Designer),Cascade粒子编辑器等等。“世界大纲视图”(World Outliner),相当于Unity中的Hierarchy视图。它们都是显示当前关卡中的所有对象,并可以在此列表中选中、编辑;同样支持PIE模式中(即在游戏运行状态下),动态生成的对象也会显示在这里,非常直观。就像它的名字一样,Unity的Hierarchy视图,可以呈现、组织GameObject的层次结构;在Unity中我们经常使用空的GameObject来当作文件夹使用,在UE4,你可以通过创建文件夹来组织关卡编辑的层次结构。两个引擎的组件模型、对象组织方式有一些差异,后面还会单独说一下。“细节”视图(Details),它起到一部分Unity的Inspector视图的作用。为什么说是一部分呢?在Unity中,Inspector视图可以显示关卡中的对象(Hierarchy视图中的)的组件及其数据,并能够显示项目资源(Project视图中的)的属性;而Unreal Editor的“细节”视图,只能显示关卡中的对象(世界大纲视图中的)的组件及其数据,而不能显示项目资源(内容浏览器中的)的属性。资源的属性、编辑,通过双击资源文件,在独立的编辑器窗口中进行。项目与资源管理UE4的项目(Project)和Unity一样,管理一个项目中所有的资源和代码。UE4中的项目内容通过“内容浏览器”查看,相当于Unity的Project视图。内容浏览器中的目录结构,对应磁盘上的目录结构,这点和Unity一致。导入UE4项目的所有资源,都会被转换成.uasset格式(本质上是特定类型UObject的序列化),不像是在Unity中会保存文件的原格式(.fbx、.tga、.png等等)。所以在处理UE4资源时,要把原格式的文件保存好,在资源更新时,可以使用“重新导入”的功能来更新。在项目打包发布时,UE4和Unity一样,都是从关卡列表开始,查找所有资源引用,形成最终的发布版本。在Unity中,通过Build Settings来添加需要发布的关卡;而程序运行时动态调用的,非关卡引用的资源,可以放入固定命名的“Resources”、“StreamingAssets”目录中。在UE4中,你也可以通过“项目”的“打包”设置,来管理发布的关卡列表,以及固定包含的资源目录。点击菜单“编辑”?“项目设置”,打开项目设置页面,具体的选项是:项目-&打包:List of maps to include in a package build项目-&打包:Additional Directories to cook如果你在“项目设置”页面中没有找到这两个选项,请注意,右侧页面中,底部中间位置有一个向下的小三角指示,点它即可打开高级选项列表。对象组件模型Unity和UE4都是基于组件结构的引擎,也就是说游戏对象是由一系列可重用的组件搭配组合而成的。两个引擎的这个思路的起点是一致的:在Unity中关卡是GameObject的集合,编辑器保存为Scene文件;在UE4中,关卡是Actor的集合,存盘成Map文件。接下来,两者的思路却大不相同。在Unity中所有的对象都是GameObject类型,class GameObject没有派生类,你也不能够从它派生,所有游戏对象的功能都必须由Component提供,包括我们的游戏脚本:MonoBehavior派生类,也是Component。而在UE4中,并不禁止你从Actor派生,你也可以使用ActorComponent及其派生类对象来组建Actor,但是引擎允许你扩展Actor来实现对象的特定功能。事实上,在UE4中还提供了一系列Actor的派生类,包括Pawn,Controller等等。你可以使用这些类,而且往往你还需要通过继承他们来实现额外的功能或者对底层行为进行调节。这些继承类组成了UE4的Gameplay Framework。对象层次结构组织在Unity中所有的GameObject都必定包含一个Transform组件,而Transform组件可以定义父子关系,也就组成了GameObject的父子关系:子对象的Transform是在父对象的空间中定义的;父对象Destroy时,子对象也会被自动Destroy。在UE4,Actor是一个空壳,没有什么具体的功能(除了实现网络功能外),它甚至没有Transform。Actor支持父子结构关系,ActorComponent也支持父子对象结构。Actor有一个RootComponent,它可以是SceneComponent及其派生类的实例。SceneComponent包含了Transform(即位置、旋转、缩放);RootComponent的Transform即决定了Actor的Transform。SceneComponent可以有子组件,子组件的Transform是定义在父组件的空间中的。这么说SceneComponent就相当于Unity的Transform了?如果你这么想,那就错了。Unity的Transform很单纯,它本质上就是一个4x4的矩阵,加上父子关系管理,它没有派生类。而SceneComponent代表着一类组件,它是各种可见的组件的基类(这样说有点不准确,它的子类PrimitiveComponent是这个角色),它有一个很深的类派生体系。关于Prefab在Unity的工作流程中,Prefab是一个非常核心的功能,在UE3时代,有一个Archetype,实现类似功能。在UE4中,你可以通过Blueprint来实现类似的功能:你可以编辑好一个Actor,然后把它转换成Blueprint class,就相当于一个Prefab。在后续的关卡编辑中你可以把这个Blueprint class拖放到关卡中,创建新的实例;如果你修改这个Blueprint class,关卡中所有的实例对象都会跟着改变。再具体点说,上述过程是用到了Blueprint的Construction Script功能。我们在关卡中编辑好一个Actor,然后点击“细节”视图中的“蓝图/添加脚本”按钮,你将创建一个新的Blueprint class。在“世界大纲视图”中,这个对象的类型显示变成了“编辑XX Blueprint”。然而Blueprint并不是Prefab,它功能远比Prefab强大,它的目标是使非编程人员可以在内容制作上进行更大力度的把控,几乎可以达到程序员的力度。这次就先总结到这里,后续还会根据进展陆续分享一些UE4的经验。
本文已收录于以下专栏:
相关文章推荐
入门VR游戏开发者在Unreal Engine 4上开始VR设计所需要知道的
游戏开发者
VR2048(vr2048)
首先,不...
这篇博客讲述了我为UE4构建Ghost Mesh Plugin的开发过程。
这篇博客介绍了我的个人项目 —— HairStrandPlugin的立项和大体思路。
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: /unreal-engine-game/2164...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unreal Engine 4 基于什么考虑把 UnrealScript 替换掉而改用 C++ 开发游戏逻辑? - 知乎158被浏览18910分享邀请回答232 条评论分享收藏感谢收起4添加评论分享收藏感谢收起查看更多回答http://blog.csdn.net/noahzuo/article/details/
这篇博客讲解了在UE4中涉及到版本之间识别、切换的工作原理以及一些可优化项的介绍。
本博客翻译自Robert Throughton的UE4: Package Versioning… How It Works… And An Optimization,。
这篇博客的翻译已征得原作者同意。
This post is translated from English. You can find the original English language version here:&
UE4的版本迭代
Unreal Engine 在确保Editor以及cooked内容可以在多个不同的引擎版本之间通用这一块有很不错的表现。而且为了让程序员能够在这些不同的版本之间很方便的更改,Unreal
Engine也提供了一些机制。这篇博客将通过GetLinkerUE4Version()及其相关的函数来分析版本之间相关的内容。
首先,我们需要了解引擎有哪些不同种类的版本:
UE4Version: 每当Epic在原来的代码之上做了一些修改后,这个数字便会增加。&
这个版本号只能由Epic来进行改动。
UE4LicenseeVersion: 当代码改动后,这个数字同样会增加。但是这是一个“安全的”版本号,这意味着你(开发者)可以在这个基础之上进行代码的更改。&
这个数字可以通过开发者(Licensees)进行更改。
CustomVersion: 这个版本号可以用于在不同的工程师之间进行迭代而不引起冲突。
如何使用UE4的版本迭代
通常来说,我们通常使用GetLinkerUE4Version()函数和GetLinkerLicenseeUE4Version()来处理不同版本之间的问题。
接下来我将给出一个Epic使用GetLinkerUE4Version()函数来修正一些内容的例子:
在这段时间内,某个人增加了一个用于设定Visibility的Blueprint变量。但是很蛋疼的是,他们犯了一个错误,丢失了一个visibility中的第三个’i’。
后来,某个人发现了这个问题,因此他们在UWidgetBlueprint::PostLoad()函数中加入如下的函数,用于修正这个错误:
if ( GetLinkerUE4Version() & VER_UE4_RENAME_WIDGET_VISIBILITY )
static const FName Visiblity(TEXT(&Visiblity&));
static const FName Visibility(TEXT(&Visibility&));
for ( FDelegateEditorBinding& Binding : Bindings )
if ( Binding.PropertyName == Visiblity )
Binding.PropertyName = V
}1234567891011121312345678910111213
然后他们在ObjectVersion.h头文件中增加了一个针对于这个修改的宏:
VER_UE4_RENAME_WIDGET_VISIBILITY,1212
因此,整个的工作流程如下:
当一个比较老版本的有拼写错误的包被载入时,这个包的版本号会比VER_UE4_RENAME_WIDGET_VISIBILITY更小。此时,上面的代码会被激活,用于修正拼写错误。如果这个包被保存了,它会使用正确的拼写,并且把版本号设定为最新的版本号。
这种做法在很多地方都有使用,例如:
在类里面增加/废除一些新的变量。增加一些我们想要改变的Patch.
版本号对应宏
在头文件ObjectVersion.h中,记录了Epic是如何处理版本迭代的,首先是EUnrealEngineObjectUE4Version:
enum EUnrealEngineObjectUE4Version
VER_UE4_OLDEST_LOADABLE_PACKAGE = 214,
VER_UE4_BLUEPRINT_VARS_NOT_READ_ONLY,
VER_UE4_STATIC_MESH_STORE_NAV_COLLISION,
VER_UE4_ATMOSPHERIC_FOG_DECAY_NAME_CHANGE,
VER_UE4_AUTOMATIC_VERSION_PLUS_ONE,
VER_UE4_AUTOMATIC_VERSION = VER_UE4_AUTOMATIC_VERSION_PLUS_ONE - 1
};123456789101112131415161718123456789101112131415161718
同样的,还有EUnrealEngineObjectLicenseeUE4Version,也在同一个头文件中:
enum EUnrealEngineObjectLicenseeUE4Version
VER_LIC_NONE = 0,
VER_LIC_AUTOMATIC_VERSION_PLUS_ONE,
VER_LIC_AUTOMATIC_VERSION = VER_LIC_AUTOMATIC_VERSION_PLUS_ONE - 1
};12345671234567
EUnrealEngineObjectLicenseeUE4Version有如下的注意事项:
就如同上面提到的,licensees**只能**在EUnrealEngineObjectLicenseeUE4Version列表中进行迭代只能在该列表的最下面进行添加当使用例如Perforce之类的代码管理工具时,务必注意针对于包被保存后进行处理,否则这个包容易被玩坏。针对于这种情况,最简单的解决方案就是当版本号改变的时候,不允许check in
我们为何只能用UE4LicenseeVersion呢?考虑如下的状况:
一个项目使用UE4.11开始我们对于UE4Version进行了迭代,加了一些我们觉得很酷的功能我们merge了UE4.12,然后发现我们出现了一个冲突 —— Epic也在4.12迭代了这一块的功能…在此情况下,我们只能:&
把Epic的新版本号插入到列表里面的最后而将我们自己的迭代版本号设为不变 - 这样就意味着我们可以使用我们自己的内容,但是Epic提供的一些新的功能应该都用不了了。把我们的版本号移到最后 - 但是这样先前所做的功能便会出很大问题。
以上所出现的问题很可能是致命的,我们当初在UE3里面也犯过这种错误,我们花了好一阵时间进行re-patch。所以我再次提醒 —— 只使用UE4LicenseeVersion.
当版本号出现问题
在这么久的开发生涯中,我经历了不少的由于版本号冲突而导致的崩溃,我希望这些问题能够带给读者一些启发。
要弄懂这些问题到底从何二来,我们首先要了解版本号是如何运作的。现在假如说我们有一个包使用了很久以前的版本号256来进行储存,而现在的版本号是259.当这个包被载入的时候,它需要经过257、258和259三个版本的迭代处理。
以下是我总结出的最可能导致版本号出现问题的状况:
Merge了其他的迭代逻辑,但是还没有提交版本控制的逻辑。而团队的其他程序员还没有merge其他的迭代逻辑。&
在本地测试,没有任何问题。对于其他的开发者,就开始抱怨崩溃了。&
其他开发者已经更新了迭代的逻辑。在其他开发者的版本中,这个迭代就有了一个不同的版本号。但是你已经将自己的迭代放到了list的末尾,系统现在出现混乱。当这个包被载入的时候,引擎认为你自己的迭代已经载入(但是实际上没有)。
你从Epic那里integrate了一个新的版本迭代,并且在版本列表中加入了一个新的宏定义。&
然而,在Epic的ObjectVersion.h头文件中,在你integrate的地方之前之后,Epic做了一些新的改动。你之后进行了一个full integration,把Epic添加的额外宏定义进行了添加。&
Crashes/bugs开始出现,因为有一些patch现在的顺序已经乱了。
看来似乎唯一“正确”的方法只有添加那些你integrate之后的东西了。&
但是这依然会出事,只要Epic提供的官方内容在其他的地方被保存了,那么这个包依然可能出现问题。
我们发现的一些可优化项
当项目的内容被cook完后,Saved文件夹下的内容中,所有的包的版本号都会被设为最大。因此我才有了这个优化的想法。
即使游戏是在载入已被cooked的内容,引擎也不会默认它是最新的。这样可以使得当你改变一些包的版本号时,不需要重新cook所有的东西。但是,频繁的检查内容是否需要更新的操作是很昂贵的。尤其对于Shipping的包,这也并非必要。所以我们进行一些假设:
Shipping包只在被cooked的内容下工作。Shipping包中只会有完全被cooked到最新版本的内容。
如果这些假设成立,那么我们便可以进行优化,告诉编译器我们不需要去运行patching代码。
也就是说,我们需要告诉编译器让它的每一次检查例如:if ( GetLinkerUE4Version() & VER_…之类的代码都会失败,而且每一次检查例如:if
( GetLinkerUE4Version() &= VER_…之类的代码都会成功。因此最简单的方法就是让每个Get—Version()类型的函数都返回当前最新的版本号。
因此我们在头文件中进行处理,来确保编译器可以将其设为内联。
所以……我们是这样进行操作的:
我们在UObjectBaseUtility.h头文件的最开头:&
#define ASSUME_UE4VERSIONS_ARE_LATEST (UE_BUILD_SHIPPING && !WITH_EDITORONLY_DATA)
需要注意的是,我们在项目中的设定是Shipping包只能在运行cooked builds里面运行,针对于不同的项目你需要进行调整。
在GetLinkerUE4Version()前,你应该加入如下代码:
#if ASSUME_UE4VERSIONS_ARE_LATEST
FORCEINLINE int32 GetLinkerUE4Version() const { return VER_LATEST_ENGINE_UE4; }
FORCEINLINE int32 GetLinkerLicenseeUE4Version() const { return VER_LATEST_ENGINE_LICENSEEUE4; }
FORCEINLINE int32 GetLinkerCustomVersion(FGuid CustomVersionKey) const
{ return MAX_int32; }
12345671234567
在GetLinkerCustomVersion()后面,加入如下代码:
int32 GetLinkerCustomVersion(FGuid CustomVersionKey) const;
#endif 1212
现在我们开始重写函数的cpp代码,我们需要在ObjectBaseUtility.cpp文件开头,在include
语句之后加入如下代码:
#include &CoreUObjectPrivate.h&
#if !ASSUME_UE4VERSIONS_ARE_LATEST1212
在文件末尾加入:
这些就是所有的了,现在编译器应该能够完全去掉patching代码,这样一来整个代码简洁很多。
其他的意见(给Epic)
我见过了太多licensees会直接在EUnrealEngineObjectUE4Version中加入自己的宏定义了… 还是尽量避免这样吧。如果是我的话我会加入一些注释,把:
VER_UE4_AUTOMATIC_VERSION_PLUS_ONE,
VER_UE4_AUTOMATIC_VERSION = VER_UE4_AUTOMATIC_VERSION_PLUS_ONE - 1
};1234512345
VER_UE4_AUTOMATIC_VERSION_PLUS_ONE,
VER_UE4_AUTOMATIC_VERSION = VER_UE4_AUTOMATIC_VERSION_PLUS_ONE - 1
};12345671234567
另外,如下的代码也可以更改,让其从:
enum EUnrealEngineObjectLicenseeUE4Version
VER_LIC_NONE = 0,
VER_LIC_AUTOMATIC_VERSION_PLUS_ONE,
VER_LIC_AUTOMATIC_VERSION = VER_LIC_AUTOMATIC_VERSION_PLUS_ONE - 1
};12345671234567
enum EUnrealEngineObjectLicenseeUE4Version
VER_LIC_NONE = 0,
VER_LIC_AUTOMATIC_VERSION_PLUS_ONE,
VER_LIC_AUTOMATIC_VERSION = VER_LIC_AUTOMATIC_VERSION_PLUS_ONE - 1
};12345671234567
还有可以尝试对版本控制之类的名字估计可以从EUnrealEngineObjectUE4Version重命名为EUnrealEngineObjectPleasePleaseOnlyForEpicChangesUE4Version之类的。请务必让用户了解到直接更改这一块的危害!我甚至见过非常有经验的开发者在这里栽过跟头。
本文已收录于以下专栏:
相关文章推荐
这篇博客讲解了在UE4中涉及到版本之间识别、切换的工作原理以及一些可优化项的介绍。
https://mp./s/iEs-1O3wTntaTrrCnOBn-A
这可能是针对MMORPG最全的一份Unity手游性能蓝皮书
2017-07-...
http://blog.csdn.net/noahzuo/article/details/
这篇博客介绍了如何使用UE4.13的ProceduralMeshC...
http://blog.csdn.net/noahzuo/article/details/
这篇博客翻译自Robert Troughton的博客Using the D...
/zh-CN/blog/building-an-unreal-engine-application-with-mali-graphi...
作者:梧桐
链接:/question//answer/
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业...
http://blog.csdn.net/jxw167/article/details/
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销...
http://blog.csdn.net/noahzuo/article/details/
在很多的FPS或者TPS游戏中,当玩家的队友处于障碍物...
/694945.html
游戏中的实时水体模拟技术分享:波形叠加法与波动方程
发布者: 小篱 | 发布时间:
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 unreal engine 5 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信