【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!

这篇具有很好参考价值的文章主要介绍了【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:UE虚幻引擎专栏
  • 💥 标题:【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!
  • ❣️ 寄语:将来的自己肯定会感谢现在努力的你!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

随着项目体量的增大,所有代码功能都放一起很难管理。所以有什么办法可以将大模块划分成一个个小模块吗。当然有,因为虚幻引擎本身就遇到过这个问题,他的解决办法就是使用插件的形式开发。

例如,一个团队开发了文件I/O模块插件,另一个团队开发了网络模块,那么大家各个模块可以统一的组合,那样虚幻引擎的功能就可以快速状态。

1 快速入门

1.1 新建插件的前提

创建插件之前,必须已经有一个UE C++的工程

1.2 创建插件步骤

  1. 打开【编辑】-【插件】面板
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  2. 点击左上角【添加】按钮,添加插件。选择空白插件模版,然后设置好插件名称等内容,进行创建。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  3. 创建成功后的VS目录如下所示:
    每个文件的内容看文章的第三部分。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 打开【工具】栏新建C++类,父类选择【蓝图函数库】(相当于C++的全局函数,其他蓝图类可以直接使用)

ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

  1. 选择新建C++类的位置,即是哪个模块的C++类。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 随后在 UGlobalFunction 类中添加一个静态函数 PrintNumer007(注意,一定要静态函数才行)
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  2. 这个函数要让蓝图使用需要添加对应的宏 UFUNCTION(BlueprintCallable)
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 编译工程(生成解决方案),测试函数是否可以正常使用。随便在一个蓝图类中右键搜索函数名,可以搜索到就说明功能可以正常使用。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

此时插件的功能就制作完成,只需要打包插件即可。

1.3 打包插件

  1. 打包插件之间需要在插件的.uplugin做一些配置,确保WhitelistPlatforms是“Win32","Win64”,Type是“Runtime”。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 打开【编辑】-【插件】面板,点击【包】,进行插件打包。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 测试打包后的插件能否正常使用(注意:测试的工程一定要与插件编译的版本保持一致,即都是UE4.27版本或者UE5.0版本)
  1. 将Plugins目录直接拷贝到别的工程下即可
    测试的工程是纯蓝图工程或者C++工程都可以
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

2 无源代码的插件制作

为什么可以不用源码:插件编译后生成了动态库文件,若是删除插件源码的话,就不能再进行编译。所以就不需要让插件编译,bUsePrecompiled = true; 就可以不让插件编译。(就和使用动态库一样,只需要保留头文件,还有动态库文件就可以让别人使用)

注意:无源码插件是在已经打包好插件的基础上,进行一些修改。然后再将程序给别人使用。

  1. 将打包后的插件Source文件夹中的Private文件夹删除
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 需要修改.Build.cs文件内容
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 得到了最终的文件目录,如下所示,我们只需要把插件目录下的文件拷贝到别的UE工程的Plugins文件夹下即可使用插件。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3 插件详细介绍

3.1 插件的使用方法

插件有两种使用方法:

  1. 安装到引擎目录
    你可以将插件直接放到C:\Program Files\Epic Games\UE_5.0\Engine\Plugins\Marketplace目录下,也可以放到这个的上级目录。Marketplace目录一般存放的是虚幻商场中下载的插件,我也习惯将自己做的插件放到这个目录,看个人习惯了。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  1. 安装到工程目录
    如果需要进行工程拷贝的话,将插件安装到工程目录中是最简单的,别人不需要再去引擎中配置一下你工程中的插件。而是可以直接把插件也拷贝过去。
    将插件放到工程的Plugins目录下即可,如果没有该目录则新建一个。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1 UE 预置插件模版

在UE中新建插件时,有很多 UE 预置的插件模版,如下图所示:
ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1.1 空白

  • 使用极少量的代码创建一个空白插件
  • 如果想要从头开始设置,或创建一个不可见的插件,请选择此模版。用此模板创建的插件将会出现在编辑器的插件列表中,但不会注册任何按钮或菜单输入。

该模板创建出来,只包含下面这些最基本的文件。ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++文章来源地址https://www.toymoban.com/news/detail-718805.html

3.1.2 纯内容

  • 创建一个值包含内容的空白插件。
  • 这个模板创建出来是真正意义上的空白插件,什么都没有(一般不会用这个模板)。不会生成C++代码。

3.1.3 编辑器独立窗口

  • 创建一个插件,其将在关卡编辑器的工具栏中添加一个按钮;点击按钮可调出一个空白独立选项卡窗口
  • 该插件的代码,如下图所示:内容就多了许多,用于完成按钮点击事件,还有窗口调用等功能。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1.4 编辑器工具栏按钮

  • 创建一个插件,其将在关卡编辑器的工具栏中添加一个按钮。
  • 首先在创建的"OnButtonClick"事件中实现一些内容
  • 插件的代码如图所示:
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1.5 编辑器模式

  • 创建一个将含有编辑器模式的插件。
  • 其将包含工具包范例,以指定出现在**“模式”选项卡**(在植物、地形等选项卡旁边)中的UI。其也将包含最基础的UI,展示编辑器交互和取消/回复功能的使用。
  • 插件的代码如图所示:可以发现代码量增多了。
  • 【注意】需要编译下插件再打开工程才能看见插件的UI。
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1.6 第三方库

  • 创建一个使用已包含第三方库的插件。
  • 这可用作范例,展示如何自行包含、加载和使用第三方库
  • 该模版包括了一个测试用的三方库,然后还有如何使用该三方库的代码
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.1.7 蓝图库

  • 创建一个含有蓝图函数库的插件。
  • 如果创建静态蓝图节点,请选择此模板
  • 代码结构如图所示:
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++

3.2 插件中文件的含义

  • 插件中包含许多文件夹和文件
    ue4 插件开发,UE,ue4,虚幻,ue5,虚幻引擎,c++,UE C++
  • Binaries:编译后的dll文件存放位置
  • Content:游戏资源Asset文件存放位置
  • Intermediate:编译的中间文件存放位置
  • Resources:一般为图片图标的存放位置
  • Source:代码存放位置
  • .uplugin文件:插件项目配置文件,JSON格式
  • .Build.cs文件:每个 .build.cs 文件声明派生自 ModuleRules 基类的类,并设置属性控制器从构造函数进行编译的方式。由虚幻编译工具编译,并被构造来确定整体编译环境。使用 C# 语法。
  1. ***.uplugin文件详解
{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.0",
	"FriendlyName": "HHW_PluginTest",
	"Description": "TestPlugin",
	"Category": "Other",				// 类目名即在插件浏览器中所属的类目
	"CreatedBy": "hhw",
	"CreatedByURL": "",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,					// 默认启用或禁用状态,在插件浏览器中可以控制加载卸载插件模块
	"Modules": [						// 描述模块名、运行类型、加载时机、支持平台等信息
		{
			"Name": "HHW_PluginTest",
			"Type": "Runtime",			// 有多种:Runtime,RuntimeNoCommandlet,Developer,Editor,EditorNoCommandlet,Program
			"LoadingPhase": "Default",
			"WhitelistPlatforms": [		// 支持的平台
				"Win32",
				"Win64"
			]
		}
	]
}
  1. ***.Build.cs文件
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class HHW_PluginTest : ModuleRules
{
	public HHW_PluginTest(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

		// 将bUsePrecompiled设置为true后,就不会让插件编译
		//bUsePrecompiled = true;
		//PrecompileForTargets = PrecompileTargetsType.None;

		PublicIncludePaths.AddRange(
			new string[] {
				// ... add public include paths required here ...
			}
			);
				
		PrivateIncludePaths.AddRange(
			new string[] {
				// ... 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 ...
			}
			);
	}
}

4 插件开发常见问题

  1. 增删代码时,没有更新VistualStudio项目(uproject文件上右键点击Generate Vistual Studio project files可更新重载项目代码)
  2. .Build.cs 代码语法错误导致编译错误。
  3. .uplugin内容语法错误导致启动失败。
  4. 第三方库路径配置错误,导致引入失败,头文件找不到或者链接lib文件失败。
  5. 引擎版本与插件版本不一致导致插件模块丢失不能使用。
  6. 插件的"Installed": false,或者插件浏览器中没有启动插件,导致插件模块没有找到。
  7. 插件的Module下的"Type"配置与实际项目运行类型不一致。
  8. .插件的Module下的"LoadingPhase"配置与项目实际使用插件模块时机不一致,导致插件模块没有找到。

到了这里,关于【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【虚幻引擎UE】UE4/UE5 功能性插件推荐及使用介绍 1

    实现POST/GET基本方法,并支持HEAD带信息。 使用案例:【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件) 能够快速实现打开对话框获取数据的导入、导出路径。 某月限免插件,比较方便的地图插件,可以改改样式直接用。 http下载数据到指定路径 按空格可以切

    2023年04月11日
    浏览(62)
  • [虚幻引擎][UE]BlueprintWebSockets插件打包失败或打包成功运行失败问题解决方法

    错误内容: Plugin ‘EasyWebsockets’ failed to load because module ‘EasyWebsockets’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. UATHelper: Packaging (Windows 64 bi t ) ERROR: Missing pr ecompiled manifest for’EasyWebsockets’. This module was most likely not flagg

    2024年02月16日
    浏览(36)
  • 虚幻引擎UE4源码编译安装(x86,arm64平台)

    (1)关于运行Setup.sh脚本,mono报错,详情截图如下: 分析:不能执行二进制文件mono,根据错误提示找到源码中涉及到具体执行语句为: “mono Engine/Binaries/DotNET/GitDependencies.exe $ARGS”         GitDependencies.exe可执行文件的作用在线下载UE依赖库,而mono是跨平台.net运行环境,

    2024年02月06日
    浏览(83)
  • UE 虚幻引擎 打包android 遇到的一些相关问题,包含插件,git

    1,UE5 name.project requires a temporary target.cs to be generated (Water plugin is enabled) 这个报错是因为启用了,ue内置的一些插件,譬如water  weather system ,如果不是特别需要可以去掉,如果必须要用,那可以参考后面的方式 2,如果继续用插件,那么就会报 这个问题是因为,很多插件代码

    2024年02月15日
    浏览(30)
  • 【虚幻引擎】UE4源码解析FWorldContent、UWorld、ULevel、UGameInstance、UEngine

    Engine,因为也是很基础的类,再加上开发过程中会经常访问到该类型,因此UE4引擎也在代码全局范围内定义了一个该类型的全局变量:UEngine* GEngine供开发者直接调用。该最基础的类型分化成了两个子类:UGameEngine和UEditorEngine。 UGameEngine保存了唯一的一个UGameInstance* GameInstanc

    2024年02月16日
    浏览(33)
  • ubuntu18.04源码编译安装carla0.9.13,关联UE4.26虚幻引擎账号

    参考博客:https://www.cnblogs.com/chenjian688/p/16624095.html 查看推荐显卡 找到recommended推荐的版本,本机是470版本。 本机是470版本 如果安装失败,需要在安装之前进行 sudo apt-get update 指令 同时为了避免UE和 CARLA 依赖项之间的兼容性问题,使用相同的编译器版本和 C++ runtime library来编

    2024年02月14日
    浏览(38)
  • 【程序员必备】UE4 C++ 虚幻引擎:详解JSON文件读、写、解析,打造高效开发!

    🙋‍♂️ 作者:海码007 📜 专栏:UE虚幻引擎专栏 💥 标题:【程序员必备】UE4 C++ 虚幻引擎:详解JSON文件读、写、解析,打造高效开发! ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧! 🎈 最后: 文章作者技术和水平有限,如果文中出现错误,希望大

    2024年02月03日
    浏览(38)
  • 【虚幻引擎】UE4优化植被

    在UE4中,我们在做大型的室外场景时,经常会遇到植物过多导致延迟的现象,有时候我们需要在UE4的场景中放置几千几万甚至更多的模型,这些模型具有相同的LOD,并且基础模型都使用同一模型资源。因为模型文件拖入UE4场景中会自动使用Static Mesh Actor来表示,当在程序中放

    2024年02月15日
    浏览(30)
  • 【虚幻引擎】UE4/UE5 材质

      基础颜色(BaseColor) :材质本身的颜色,例如绿色蓝色等 金属度(Metallic) :金属度,材质是否含有金属光泽 粗糙度(Roughness) :粗糙或者平滑度,物体表面的粗糙程度 自发光(EmissiveColor) :物体本身是否发光 透明度(Opactity) :物体表面是否透明,适用于 半透明(Translucent)、

    2024年02月02日
    浏览(49)
  • 【虚幻引擎】UE4/UE5 pak挂载

     找到:D:UEUE_4.27EngineBinariesWin64,  WindowS+R打开CMD命令 运行UnrealPak,运行结果如下      注意如果想要加载Pak内资源,那么这些资源必须是经过Cook的。如果打包的是未Cook的资源,那么即使Pak挂载成功,也不可能会成功加载Pak内资源。  Cook好之后,存储的路径在你的I:DBJ

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包