UE4 在當前遊戲模組新增一個新的模組
問題引入
在學習UE4官方教程 ,“塔防遊戲“遇到了要在當前模組新增一個新的遊戲載入模組
在網上找了些文件後做個步驟總結
1, 首先在專案檔案下->Source 新增一個要新增的模組資料夾,如:TowerGameLoadingScreen
2, 在第一步資料夾下新增一個Private資料夾,一個Public資料夾,還有個 <模組名>.Build.cs檔案 如:TowerGameLoadingScreen.Build.cs
3, 開啟TowerGameLoadingScreen.Build.cs檔案新增如下的程式碼:
// Copyrigth 1998-2020 Epic Games, Inc. ALL Rigths Reserved.
using UnrealBuildTool;
// This moudle must be loaded "PreLoadScreen" in the .uproject file, otherwise it will not hook in time!
public class TowerGameLoadingScreen : ModuleRules
{
public TowerGameLoadingScreen(ReadOnlyTargetRules Target) : base(Target)
{
PrivatePCHHeaderFile = "Public/TowerGameLoadingScreen.h";
PCHUsage = PCHUsageMode.UseSharedPCHs;
PublicDependencyModuleNames.AddRange(
new string[]{
"Core",
"CoreUObject",
"Engine",
}
);
PrivateDependencyModuleNames.AddRange(
new string[] {
"MoviePlayer",
"Slate",
"SlateCore",
"InputCore",
}
);
}
}
該檔案裡定了這個模組引用的其他模組,預編譯的標頭檔案,還可以定義要引用的一些私有的標頭檔案,和公有的標頭檔案
4,Public和Private檔案下分別新增一個 <模組名>.h, <模組名>.cpp 如:
TowerGameLoadingScreen.h
TowerGameLoadingScreen.cpp
5,開啟上一步建立的.h 和.cpp 檔案新增如下程式碼
TowerGameLoadingScreen.h
// Copyright 1998-2020 Epic Game, Inc. All Rights Reserved.
#pragma once
#include "Engine.h"
#include "Modules/ModuleInterface.h" // 這裡要這樣引用否則引用不到
/** Module interface for the game`s loading screens */
class ITowerGameLoadingScreenModule : public IModuleInterface
{
public:
/** Kicks off the loading screen for in game loading (not startup) */
virtual void StartInGameLoadingScreen() = 0;
};
TowerGameLoadingScreen.cpp
// Copyright 1998-2020 Epic Games, Inc. All Rights Reserved.
#include "TowerGameLoadingScreen.h"
// This module must be loaded "PreLoadingScreen" in the .uproject file, otherwise it will not hook in time !
class FTowerGameLoadingScreenModule : public ITowerGameLoadingScreenModule
{
public:
virtual void StartupModule() override
{
}
virtual bool IsGameModule() const override
{
return true;
}
virtual void StartInGameLoadingScreen() override
{
}
};
// 這個地方根據官方文件要這樣使用,用於UBT來自動搜尋模組,編譯新增DLL檔案
IMPLEMENT_GAME_MODULE(FTowerGameLoadingScreenModule, TowerGameLoadingScreen)
6, 開啟<專案名>.uproject,找到Modules中新增你的模組如:
"Modules": [
{
"Name": "MyTower",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"CoreUObject",
"AIModule",
"Slate",
"SlateCore"
]
},
{
"Name" : "TowerGameLoadingScreen",
"Type" : "Runtime",
"LoadingPhase": "PreLoadingScreen"
}
],
7,以上步驟完成並儲存後,右擊<專案名>.uproject 選擇Generate Visual Studio project file
8, 開啟Vs就可以看到你新加的模組了,這個時候你進行編譯是不會編譯你新加的模組的,要在<主專案模組>.Build.cs中新增對這個模組的引用如下:
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class MyTower : ModuleRules
{
public MyTower(ReadOnlyTargetRules Target) : base(Target)
{
PrivateDependencyModuleNames.AddRange(
new string[] {
"TowerGameLoadingScreen"
}
);
}
}
在進行編譯就可以編譯新加的模組了,這個是因為這個模組不是UBT的目標,在主模組進行引用後,UBT就會找到這個模組並進行編譯(我猜的_)。
相關文章
- UE4網路模組解析(一)
- Yii2 之 frontend 子模組實踐之一:新增前後臺子模組
- nginx使用熱部署新增新模組Nginx熱部署
- 在Python中新增自定義模組Python
- onthink新增模組
- 一個工程的多個模組中的一個模組打包成jar在轉為.exe可執行檔案JAR
- Nginx 新增 lua 模組Nginx
- 為 Nginx 新增模組Nginx
- Docker 映象新增模組Docker
- apache新增php模組ApachePHP
- 使用 Python 和 Pygame 模組構建一個遊戲框架PythonGAM遊戲框架
- JavaScript在陣列開頭新增一個新的元素JavaScript陣列
- nginx新增sticky cookie 分流模組NginxCookie
- Apache apxs新增proxy模組Apache
- iptables新增模組(for kernel 2.6)(轉)
- Linux下新增php的zip模組LinuxPHP
- Tengine新增nginx upstream模組的使用Nginx
- 新增php的memcached擴充套件模組PHP套件
- CMake中新增Qt模組的合理方法QT
- 各種語言裡獲取當前模組的方法:ABAP,ABSL,C,nodejsNodeJS
- Flutter 從當前頁面進入一個新的頁面並返回Flutter
- 開始一個新專案前,應當想清楚的幾件事兒
- js如何動態在div中新增一個新的元素JS
- 兩個當前前端領域中好玩的新技術前端
- 在一個系統上編譯多個核心版本的驅動模組(轉)編譯
- pickle模組 collections模組在物件導向中的應用物件
- 8.7 一個模組的封裝過程封裝
- 在一個專案各個子模組中使用Maven的一些通用的準則Maven
- 在Java 11中建立一個簡單的模組化應用教程Java
- Jooby的核心在於模組
- 極簡實用的Asp.NetCore模組化框架新增CMS模組ASP.NETNetCore框架
- 使用DBMS_APPLICATION_INFO.SET_CLIENT_INFO來定位當前session所在的程式模組APPclientSession
- ASP.NET Core模組化前後端分離快速開發框架介紹之2、快速建立一個業務模組ASP.NET後端框架
- [LearnKu 更新] 新增「文章推薦」模組
- QtCreator CMakeLists.txt新增模組(Modules)QT
- lazyload下特性模組匯入另一個模組導致的路由問題路由
- 如何“拼”出一個頁面-遊戲中心模組化實踐遊戲
- 一個簡單的JavaScript模組載入器JavaScript