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網路模組解析(一)
- nginx使用熱部署新增新模組Nginx熱部署
- onthink新增模組
- 為 Nginx 新增模組Nginx
- apache新增php模組ApachePHP
- Nginx 新增 lua 模組Nginx
- 使用 Python 和 Pygame 模組構建一個遊戲框架PythonGAM遊戲框架
- 一個工程的多個模組中的一個模組打包成jar在轉為.exe可執行檔案JAR
- 序列化模組,隨機數模組,os模組,sys模組,hashlib模組隨機
- 極簡實用的Asp.NetCore模組化框架新增CMS模組ASP.NETNetCore框架
- Tengine新增nginx upstream模組的使用Nginx
- Linux下新增php的zip模組LinuxPHP
- 如何“拼”出一個頁面-遊戲中心模組化實踐遊戲
- pickle模組 collections模組在物件導向中的應用物件
- python 模組:itsdangerous 模組Python
- path模組 fs模組
- Python模組:time模組Python
- 遊戲情感化設計【社交模組】遊戲
- day18:json模組&time模組&zipfile模組JSON
- CMake中新增Qt模組的合理方法QT
- Python模組之urllib模組Python
- python模組之collections模組Python
- CommonJS模組 和 ECMAScript模組JS
- 每週一個 Python 模組 | copyPython
- 每週一個 Python 模組 | functoolsPython
- 每週一個 Python 模組 | jsonPythonJSON
- 每週一個 Python 模組 | stringPython
- 每週一個 Python 模組 | socketPython
- 每週一個 Python 模組 | heapqPython
- 每週一個 Python 模組 | enumPython
- 每週一個 Python 模組 | itertoolsPython
- 每週一個 Python 模組 | timePython
- 每週一個 Python 模組 | bisectPython
- 每週一個 Python 模組 | QueuePython
- 每週一個 Python 模組 | structPythonStruct
- 每週一個 Python 模組 | signalPython
- 每週一個 Python 模組 | unittestPython
- 每週一個 Python 模組 | linecachePython