封面来源:顽皮狗美术总监John Sweeney个人作品https://gumroad.com/l/VqjIjt
无插件源码编译打包工程的意义:比如,既能将UE4插件给客户正常使用,又能保护代码不被泄漏(曾经我的一个下属把我在公司写的代码和工具放到公网上当作自己的个人作品去光子面试);或者你开发了一个UE4插件放在商城中售卖,希望将有源码版本和无源码版本分开销售(UE4商城有不少牛鼻的插件,但是价格动辄200刀,让一些不需要源码的用户望而却步)。
常规的C++工程只需要编一个链接库就可以达到以上目的,但是UE4 plugin的编译规则有点麻烦,而且UE4的plugin系统有些设计缺陷导致编译步骤有不少坑(比如:不同原因导致的链接错误,UE4控制台只会报同一个错误,且只有简单文本提示);另外对于多个有依赖关系的plugin如何实现无源码编译打包,官方也没相关文档。
1,新建两个插件 (Edit -> Plugins -> New Plugin) 并命令为P1
和P2
.
2,为 P1
和 P2
添加测试代码(这些代码有跨越插件的依赖关系)
我们假设 Actor1
在 P1
中, Actor2
在 P2
中, P2
依赖于 P1
, 但是 P1
并不依赖于P2
。
Actor1.h
#include "Actor1.h"
#include "Engine.h"
// Sets default values
AActor1::AActor1()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AActor1::BeginPlay()
{
Super::BeginPlay();
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString("Actor1 BeginPlay"));
}
Actor2.h
#include "Actor2.h"
#include "Engine/Engine.h"