UE4實現簡單的插件開發VS2015
1. 從Editor中生成一個空的C++插件模板
2. 關掉(diào)vs,右鍵生成一下工程文(wén)件,把Plugins掃進去
打開解決方(fāng)案開始編寫(xiě)插(chā)件,插件加進來(lái)了(le)
3. 編(biān)寫插件
首先把插件的配置文TestPlugin.uplugin件改一下(被(bèi)這個坑了兩天)
這個LoadingPhase的值默認為Default,必須修改為PreDefault,不然重啟Editor會報關聯不上插件源碼的錯誤,切(qiē)記!
修改編譯模塊配置TestPlugin.Build.cs文件,c#文件
詳細代碼,有注釋 !
using UnrealBuildTool;
using System.IO; //路徑獲取需要用到IO
public class TestPlugin : ModuleRules
{
private string ModulePath //當前TestPlugin.Build.cs文件所在的路徑
{
get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }
}
private string ThirdPartyPath //這(zhè)個插件引用的第三方庫的目錄
{
get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
}
private string MyTestLibPath //第三方(fāng)庫MyTestLib的目錄
{
get { return Path.GetFullPath(Path.Combine(ThirdPartyPath, "MyTestLib")); }
}
public TestPlugin(TargetInfo Target)
{
PublicIncludePaths.AddRange( //公有文件搜索路徑
new string[] {
"TestPlugin/Public"
// ... add public include paths required here ...
}
);
PrivateIncludePaths.AddRange(
new string[] {
"TestPlugin/Private" //私有文件搜索(suǒ)路徑
// ... add other private include paths required here ...
}
);
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core"
// ... add other public dependencies that you statically link with here ...
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
// ... add private dependencies that you statically link with here ...
}
);
DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);
LoadThirdPartyLib(Target); //加載第三方(fāng)庫
}
public bool LoadThirdPartyLib(TargetInfo Target)
{
bool isLibrarySupported = false;
if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))//平台判斷
{
isLibrarySupported = true;
System.Console.WriteLine("----- isLibrarySupported true");
string PlatformSubPath = (Target.Platform == UnrealTargetPlatform.Win64) ? "Win64" : "Win32";
string LibrariesPath = Path.Combine(MyTestLibPath, "Lib");
PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, PlatformSubPath, "TestLib.lib"));//加載第三方靜態(tài)庫.lib
}
if (isLibrarySupported) //成功加載(zǎi)庫的情況下,包含第三方庫的頭文(wén)件
{
// Include path
System.Console.WriteLine("----- PublicIncludePaths.Add true");
PublicIncludePaths.Add(Path.Combine(MyTestLibPath, "Include"));
}
return isLibrarySupported;
}
}
我們寫個自定義的char – TestChar,繼承自Character
先看下文件結構,需要藍圖可見的必須丟到Public下
先(xiān)修改預編譯頭(tóu)文(wén)件TestPluginPrivatePCH.h,必須包含(hán)CoreUObject,不然編譯不過,切記(jì)!
#include "TestPlugin.h"
// UObject core
#include "CoreUObject.h" //默認是不含這個的
// Actor based classes
#include "GameFramework/Character.h" //包(bāo)插件中所有用的(de)的引擎類都丟到這裏來
頭文件,正常(cháng)編寫自定(dìng)義的(de)類一樣
#pragma once
#include "GameFramework/Character.h"
#include "TestChar.generated.h"
UCLASS()
class ATestChar : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values for this character\'s properties
ATestChar();
UPROPERTY(EditAnywhere, Category = "Test Char")
int32 mAge;
UPROPERTY(EditAnywhere, Category = "Test Char")
FString mName;
};
cpp文件,包含的是預編譯文件和(hé)類的頭文件
#include "TestPluginPrivatePCH.h"
#include "TestChar.h"
#include "TestLib.h" //引入的第(dì)三方(fāng)庫(kù)的頭文件
ATestChar::ATestChar() : Super()
{
mAge = myPrint("hello world", 123); //第三方庫中的方法
mName = "yangx";
}
第(dì)三方庫打成了一個靜(jìng)態庫TestLib.lib
TestLib.h
#ifndef __TEST_LIB_H__
#define __TEST_LIB_H__
#include
#include
int myPrint(std::string _name, int _age);
#endif
TestLib.cpp
#include "TestLib.h"
int myPrint(std::string _name, int _age)
{
return _age + 1000;
}
4. 編譯(yì)運行,在(zài)Editor中create一個Blueprint繼承自這個TestChar類
5. 拖到場景運行遊戲
6.WONGLOVE數據手套的UE4插件類似(sì)於(yú)上述方法, 如果您(nín)是WONGLOVE用戶,可以聯係我們索取該插件程序。
- 上一篇:Unity3D係統創建(jiàn)人(rén)物骨骼動畫模型 2017/8/9
- 下一篇:Hololens開發環境搭建 2017/7/31