Unreal Engine 4 C++ 插件介绍

  • Unreal Engine 4 C 插件介绍
    • 创建插件
    • C静态链接插件

Unreal Engine 4 C++ 插件介绍

好记性不如烂笔头啊,还是记录一下!


1.创建插件

创建插件的步骤很简单,但是很容易出错:

  1. 关闭项目,在项目目录下创建Plugins文件夹
  2. 拷贝一个空白插件(BlankPlugin)到Plugins文件夹下(BlankPlugin位于路径Engine/Plugins/Developer/BlankPlugin)
  3. 把文件夹,文件名,文件内容里面所有的 BlankPlugin 替换为你的插件名字
  4. 重新生成项目
  5. 重新编译项目

会发现你的项目中已经自动检测出了插件:

Unreal Engine 4 C++ 插件介绍_第1张图片

其中<插件名称>.uplugin为插件的描述文件:

{
    "FileVersion" : 3,
    "Version" : 1,
    "VersionName" : "1.0",
    "FriendlyName" : "MyTestPlugin",
    "Description" : "Test Plugin Develop",
    "Category" : "Tests",
    "CreatedBy" : "Colocasia",
    "CreatedByURL" : "",
    "DocsURL" : "",
    "MarketplaceURL" : "",
    "SupportURL" : "",
    "EnabledByDefault" : true,
    "CanContainContent" : false,
    "IsBetaVersion" : false,
    "Installed" : false,
    "Modules" :
    [
        {
            "Name" : "MyTestPlugin",
            "Type" : "Developer",
            "LoadingPhase" : "Default"
        }
    ]
}

描述文件不能乱改,否则会导致加载失败,需要修改可以参考官方文档:描述器文件格式

插件中也有项目的配置文件,<插件名称>.Build.cs

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

namespace UnrealBuildTool.Rules
{
    public class MyTestPlugin : ModuleRules
    {
        public MyTestPlugin(TargetInfo Target)
        {
            PublicIncludePaths.AddRange(
                new string[] {
                    // "MyTestPlugin/Public"
                    // ... add public include paths required here ...
                }
            );

            PrivateIncludePaths.AddRange(
                new string[] {
                    "MyTestPlugin/Private"
                    // ... add other private include paths required here ...
                }
            );

            PublicDependencyModuleNames.AddRange(
                new string[]
                {
                    "Core",
                    "CoreUObject"
                    // ... add other public dependencies that you statically link with here ...
                }
            );

            PrivateDependencyModuleNames.AddRange(
                new string[]
                {
                    // ... add private dependencies that you statically link with here ...
                }
            );

            DynamicallyLoadedModuleNames.AddRange(
                new string[]
                {
                    // ... add any modules that your module loads dynamically here ...
                }
            );
        }
    }
}

然后配置完后就可以像引擎编写模块一样,愉快的编写代码了。


2.C++静态链接插件

在说此方法之前,先引用下官网的说明,不是很推荐用这种方法:

为了使插件真正可插拔,我们通常不鼓励为插件添加依赖关系。

但是如果一个游戏各个系统都是一个个插件,或者有人发布了很好用的代码类的工具插件,就可以用下面的方式进行静态链接。(静态链接后如果找不到插件编译会报错)

在你需要依赖的模块的<模块名称>.Build.cs中加入下列代码:

PrivateDependencyModuleNames.AddRange(
    new string[] {
        "MyTestPlugin"
    }
);

PrivateIncludePathModuleNames.AddRange(
    new string[] {
        "MyTestPlugin"
    }
);

这样就可以访问插件中的接口了,不过这里有个大坑:

插件中的要让其他模块访问的接口要符合模块API的标准

这个问题曾经困扰了我很久:

/**
 * Example of declaring a UObject in a plugin module
 */
UCLASS()
class MYTESTPLUGIN_API UMyTestObject : public UObject
{
    GENERATED_UCLASS_BODY()
};

比如这个例子中:你想UMyTestObject被游戏中的模块创建,必须加入MYTESTPLUGIN_API这个标记,否则会报无法找到定义的LINK2019错误。加入的标记符合<插件名称>_API,注意插件名称必须为大写。

你可能感兴趣的:(Unreal,Engine,4)