📅  最后修改于: 2023-12-03 15:20:47.618000             🧑  作者: Mango
在UE4中,模块化代码是一种组织代码的方式,它允许将代码分成多个模块以便更好地管理和维护代码。本文将介绍如何使用模块化字符来构建模块化代码。
模块化字符是UE4中特有的一种命名约定,用于指定模块名称、类名称和函数名称。模块名称用于指定模块所属的命名空间,而类名称和函数名称则用于指定类或函数所属的模块。
模块名称遵循以下约定:
MY_MODULE
类名称和函数名称遵循以下约定:
MyClass
MY_MODULE_API void MyFunction()
创建模块化代码需要遵循以下步骤:
要将代码添加到模块中,请使用模块化字符来命名类和函数。例如,假设要向模块中添加一个称为MyClass
的类和一个称为MyFunction
的函数,则应按以下方式使用模块化字符来命名它们:
// MyClass.h
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
namespace MY_MODULE
{
class MY_MODULE_API MyClass
{
public:
MyClass();
~MyClass();
void DoSomething();
};
}
// MyClass.cpp
#include "MyClass.h"
namespace MY_MODULE
{
MyClass::MyClass()
{
// 构造函数
}
MyClass::~MyClass()
{
// 析构函数
}
void MyClass::DoSomething()
{
// 做些事情
}
}
// MyModule.h
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
DECLARE_LOG_CATEGORY_EXTERN(LogMyModule, Log, All);
class FMyModule : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;
};
// MyModule.cpp
#include "MyModule.h"
#include "MyClass.h"
#define LOCTEXT_NAMESPACE "FMyModule"
DEFINE_LOG_CATEGORY(LogMyModule);
void FMyModule::StartupModule()
{
// 在模块启动时执行的代码
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, LOCTEXT("HELLO_WORLD", "Hello World!").ToString());
MyClass* NewMyClass = new MyClass();
NewMyClass->DoSomething();
}
void FMyModule::ShutdownModule()
{
// 在模块卸载时执行的代码
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FMyModule, MyModule);
在上述示例中,MyClass
和MyFunction
两个类的名称和函数名称均使用了模块化字符。此外,我们还创建了一个名为FMyModule
的类来实现我们的模块。该类需要继承自IModuleInterface
接口,并实现其StartupModule
和ShutdownModule
方法。最后,我们使用IMPLEMENT_MODULE
宏来声明该模块。
要在UE4项目中使用模块,需要在项目的.uproject
文件中添加模块的引用。例如,如果要将之前创建的MY_MODULE
添加到项目中,则需要在.uproject
文件中添加以下行:
{
"FileVersion": 3,
"EngineAssociation": "4.26",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "MyProject",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"Core",
"MY_MODULE"
]
}
],
"TargetPlatforms": [
"MacNoEditor",
"WindowsNoEditor",
"LinuxNoEditor"
],
"bHasExplicitTimeOfDay": false
}
请注意,AdditionalDependencies
数组包含当前项目中使用的所有模块,而其中包括我们之前创建的MY_MODULE
模块。
要在代码中使用模块中的类或函数,我们需要包含模块的头文件,并使用模块化字符来引用类或函数。使用模块化字符示例如下:
#include "MY_MODULE/Public/MyClass.h"
namespace MY_MODULE
{
void SomeFunction()
{
MyClass MyObject;
MyObject.DoSomething();
}
}
通过本文的介绍,我们了解了UE4中模块化字符的概念,可以使用模块化字符来创建模块化代码,在模块中添加类和函数,并在项目中使用模块中的类或函数。模块化字符是UE4中非常重要的概念,希望本文能对您有所帮助。