查看: 177|回复: 6

[编程指南] 【游戏性模块 | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73038
发表于 2016-6-26 02:01:58 | 显示全部楼层 |阅读模式


本页面的内容:

      
模块创建
INI文件设置

多个游戏性模块

限制
     
正如引擎本身由一组模块构成一样,每个游戏也是由一个或多个游戏性模块构成的。这些模块和之前版本的引擎中的包类似,因为它们是相关类的容器。在虚幻引擎4中,由于所有游戏性都通过C++完成的,所以模块实际上是DLL文件,而不是包文件。

如果您还没有创建游戏项目,那么请参照创建游戏项目页面获得关于如何创建及设置您的游戏项目的说明。
模块创建
游戏性模块至少要包含一个头文件 (.h</code>)、一个C++文件(.cpp</code>)和一个编译文件(*.Build.cs</code>)。头文件必须位于模块资源详细内容的 Public</code> 文件夹中,也就是 [GameName]\Source[ModuleName]\Public</code> 资源详细内容。该文件包含了编译该模块中的类所需的所有头文件 - 包括模块自动生成的头文件。
#include "Engine.h"#include "EnginePrivate.h"#include "ModuleNameClasses.h"
C++文件必须位于模块资源详细内容的 Private</code> 文件夹中,也就是 [GameName]\Source[ModuleName]\Private</code> 资源详细内容,用于注册及实现模块。


在您的游戏中,至少要使用 IMPLEMENT_PRIMARY_GAME_MODULE</code> 注册一个模块。其他模块可以使用另一个可选的 IMPLEMENT_GAME_MODULE</code> 方法进行注册。请参照 多个游戏性模块部分获得在一个游戏项目中使用多个游戏性模块的更多细节。

// 包括游戏的头文件#include "ModuleName.h"// 将模块指定为主模块IMPLEMENT_PRIMARY_GAME_MODULE( ModuleName, "GameName" );
编译文件位于游戏性模块的根资源详细内容中,也就是资源详细内容 [GameName]\Source[ModuleName]</code> ,它定义了UnrealBuildTool编译该模块时要使用的一些信息。
using UnrealBuildTool;public class ModuleName : ModuleRules{    public ModuleName( TargetInfo Target )    {
PublicDependencyModuleNames.AddRange( new string[] { "Core", "Engine" } );
PrivateDependencyModuleNames.AddRange( new string[] { "RenderCore" } );    }}
INI文件设置
由于新的游戏性模块包含 UObject 代码,所以需进行一些必要的配置。

需要在 DefaultEngine.ini</code> 文件中的几个地方添加该模块:

[UnrealEd.EditorEngine]</code> 部分的 EditPackages</code> 数组:
[UnrealEd.EditorEngine]+EditPackages=ModuleName
[Launch]</code> 部分:
[Launch]Module=ModuleName
[/Script/Engine.UObjectPackages]</code> 部分的 NativePackages</code> 数组:
[/Script/Engine.UObjectPackages]+NativePackages=ModuleName多个游戏性模块
关于游戏DLL文件模块化处理有一些明智的做法选择。把游戏分为多个DLL文件会通常会得不偿失,带来很多麻烦,但这需要每个独立团队根据其需要和原则独立做出决定。使用多个游戏性模块会使得连接时间更短,代码迭代速度更快; 但使用过多的模块,你需要更加频繁地处理DLL文件导出 和/或 接口类。对于引擎和编辑器代码来说,做出这种妥协是正确的选择,但对于游戏性代码来说,就不是很合理了。

您可以创建一个主要的游戏模块,然后在创建多个额外的游戏相关的模块。您可以针对这些新模块创建 *.Build.cs</code> 文件,然后把到这些模块的引用添加到您的游戏的Target.cs</code> 文件 (OutExtraModuleNames 数组)中。在C++代码中,请确保为您的游戏模块使用适当的宏。至少有一个模块必须使用  IMPLEMENT_PRIMARY_GAME_MODULE</code> 宏,而所有其他模块应该使用 IMPLEMENT_GAME_MODULE</code> 宏。虚幻编译工具将会自动发现这些模块,并编译额外的游戏DLL文件。
限制
以下是设置游戏性模块的几点注意事项:

我们确实支持创建相互依赖的模块(包括模块彼此间导入和导出函数及数据 -- 比如Engine和UnrealEd模块),但是这会对编译时间造成不利影响,且有时候可能导致出现变量静态初始化相关的问题。没有相互依赖的游戏性模块更难进行设计和维护,但模块的的代码可能会比较整洁。
回复

使用道具 举报

0

主题

825

帖子

2687

积分

vip会员

Rank: 1

积分
2687
发表于 2016-7-2 19:23:54 来自手机 | 显示全部楼层
多少钱,看看
回复 支持 反对

使用道具 举报

用心承诺 该用户已被删除
发表于 2016-7-3 23:12:28 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1327

帖子

4056

积分

vip会员

Rank: 1

积分
4056
发表于 2016-7-4 11:29:34 来自手机 | 显示全部楼层
谢谢支持。
回复 支持 反对

使用道具 举报

0

主题

861

帖子

2876

积分

vip会员

Rank: 1

积分
2876
发表于 2016-7-4 22:49:47 来自手机 | 显示全部楼层
加油摸摸大,感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

843

帖子

2737

积分

vip会员

Rank: 1

积分
2737
发表于 2016-7-17 20:37:33 来自手机 | 显示全部楼层
谢谢支持。
回复 支持 反对

使用道具 举报

0

主题

874

帖子

2897

积分

vip会员

Rank: 1

积分
2897
发表于 2016-7-18 09:34:38 | 显示全部楼层
不错 可以下来研究研究
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部