Unreal插件开发
本文目录 15 个章节
Unreal插件开发
# Unreal插件开发
创建时间:2022/3/4 18:40
- 目录结构
- Plugin Descriptor Files
- 操作方法
- 打包发布
- 插件编译执行过程
- 编辑器拓展开发接口
- 其他技巧
- Include
- Include public
- Include private
- 添加第三方依赖库
- 链接错误的解决方法
- 访问private或protected的UPROPERTY
- Include
- Build.cs
- Ref
目录结构
Engine /[UE4 Root]/Engine/Plugins/[Plugin Name]/
Game /[Project Root]/Plugins/[Plugin Name]/ (will be detected and loaded at Engine or Editor start-up time)
Public/Classes的父目录名就是module名
Plugin Descriptor Files
Plugin descriptor Files: .uplugin
API: https://docs.unrealengine.com/4.27/en-US/API/Runtime/Projects/FPluginDescriptor/
Category:类目名即在插件浏览器中所属的类目。 Installed:默认启用或禁用状态,在插件浏览器中可以控制加载卸载插件模块。 Modules:描述模块名、运行类型、加载时机、支持平台等信息。 Type:Runtime,RuntimeNoCommandlet,Developer,Editor,EditorNoCommandlet,Program。 LoadingPhase:Default,PreDefault,PostConfigInit,PostConfigInit。 WhitelistPlatforms:支持的平台 BlacklistPlatforms:不支持的平台
操作方法
unreal的理念是开发工作都是在工程目录进行,包括插件开发
打包发布
https://blog.csdn.net/jxyb2012/article/details/88839224
public class AGenericClass<T> where T : IComparable<T> { }
插件编译执行过程
Plugins will automatically be compiled by UBT when compiling your game project.
public class AGenericClass<T> where T : IComparable<T> { }
每个独立模块都有一个类继承自 IModuleInterface,重写了插件加载卸载的方法。
.uplugin文件中Modules下的LoadingPhase字段说明了模块加载的时机,当满足这个时机时此模块StartupModule函数将被调用。此插件的功能入口就是从这里开始。当程序关闭或主动调用ShutdownModule函数时,模块将被卸载。
编辑器拓展开发接口
LevelEditorModule.GetToolBarExtensibilityManager()可以拓展关卡编辑器的工具栏,GetMenuExtensibilityManager()可以拓展菜单栏。 GEditor->GetEditorSubsystem()->OnAssetOpenedInEditor(),可以监听UE中,任意编辑器打开的事件。 FCoreUObjectDelegates::OnObjectPropertyChanged可以监听任意Object,任意属性的变化事件。
其他技巧
Include
unreal中所有头文件都可以include。只是ue建议只include public目录或Classes的头文件,不建议include private目录的。
Include public
在XXX.Build.cs文件中添加依赖Module:PublicDependencyModuleNames.AddRange 然后在某个源码文件,直接include。(从Public/Classes开始算路径)
Include private
在当前插件模块的build.cs文件中添加Private目录:
public class AGenericClass<T> where T : IComparable<T> { }
public class AGenericClass<T> where T : IComparable<T> { }
添加第三方依赖库
PublicIncludePaths.Add(zlibPath + “include” + platform); //把(.h)头文件路径引入。 PublicLibraryPaths.Add(zlibPath + “lib” + platform); //把(.lib)库文件路径引入。 PublicAdditionalLibraries.Add(“zlibstatic.lib”); //把(.lib)库文件引入。
https://blog.csdn.net/jxyb2012/article/details/88839224
链接错误的解决方法
- 确保:把所属module添加到PublicDependencyModuleNames中
- 确保:如果缺失的函数or类是某个插件中的,需要标识为API,在函数前加入对应API宏。
例如module名为SamplePlg,则API宏为:SAMPLEPLG_API
访问private或protected的UPROPERTY
public class AGenericClass<T> where T : IComparable<T> { }
public class AGenericClass<T> where T : IComparable<T> { }
Build.cs
配置文件属性详细说明:https://blog.csdn.net/jxyb2012/article/details/88839224
public class AGenericClass<T> where T : IComparable<T> { }
Ref
https://www.jianshu.com/p/ec0ae889f417 https://www.jianshu.com/p/49684c1b6011 https://gameinstitute.qq.com/community/detail/121298