UE5.3 虚幻引擎 Windows插件开发打包(带源码插件打包、无源码插件打包)

0 引言

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

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

1 快速入门

1.1 新建插件的前提

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

1.2 创建插件步骤

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

在这里插入图片描述
在这里插入图片描述

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

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

1.3 打包插件

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

2 无源代码的插件制作

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

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

  1. 将打包后的插件Source文件夹中的Private文件夹删除
    在这里插入图片描述
  1. 需要修改.Build.cs文件内容
    在这里插入图片描述
  1. 得到了最终的文件目录,如下所示,我们只需要把插件目录下的文件拷贝到别的UE工程的Plugins文件夹下即可使用插件。
    在这里插入图片描述

3 插件详细介绍

3.1 插件的使用方法

插件有两种使用方法:

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

3.1 UE 预置插件模版

在UE中新建插件时,有很多 UE 预置的插件模版,如下图所示:
在这里插入图片描述

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

该模板创建出来,只包含下面这些最基本的文件。在这里插入图片描述

3.1.2 纯内容
  • 创建一个值包含内容的空白插件。
  • 这个模板创建出来是真正意义上的空白插件,什么都没有(一般不会用这个模板)。不会生成C++代码。
3.1.3 编辑器独立窗口
  • 创建一个插件,其将在关卡编辑器的工具栏中添加一个按钮;点击按钮可调出一个空白独立选项卡窗口
  • 该插件的代码,如下图所示:内容就多了许多,用于完成按钮点击事件,还有窗口调用等功能。
    在这里插入图片描述在这里插入图片描述
3.1.4 编辑器工具栏按钮
  • 创建一个插件,其将在关卡编辑器的工具栏中添加一个按钮。
  • 首先在创建的"OnButtonClick"事件中实现一些内容
  • 插件的代码如图所示:
    在这里插入图片描述在这里插入图片描述
3.1.5 编辑器模式
  • 创建一个将含有编辑器模式的插件。
  • 其将包含工具包范例,以指定出现在**“模式”选项卡**(在植物、地形等选项卡旁边)中的UI。其也将包含最基础的UI,展示编辑器交互和取消/回复功能的使用。
  • 插件的代码如图所示:可以发现代码量增多了。
  • 【注意】需要编译下插件再打开工程才能看见插件的UI。
    在这里插入图片描述在这里插入图片描述
3.1.6 第三方库
  • 创建一个使用已包含第三方库的插件。
  • 这可用作范例,展示如何自行包含、加载和使用第三方库
  • 该模版包括了一个测试用的三方库,然后还有如何使用该三方库的代码
    在这里插入图片描述
3.1.7 蓝图库
  • 创建一个含有蓝图函数库的插件。
  • 如果创建静态蓝图节点,请选择此模板
  • 代码结构如图所示:
    在这里插入图片描述

3.2 插件中文件的含义

  • 插件中包含许多文件夹和文件
    在这里插入图片描述
  • 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"配置与项目实际使用插件模块时机不一致,导致插件模块没有找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 的事务与多版本并发控制(MVCC)的那些事

什么是事务原子性:一致性隔离性 问题1: 为什么MySQL要使用mvcc实现隔离性而不使用 锁 解决并发问题?持久性 问题2: MySQL 不是磁盘数据库吗,持久化为什么是 redo log 保证的?问题 3: redo log 储存了什么东西,持久化(崩溃恢复是怎么做的?)问题 4 : MySQL 的 bing log (二进制…

多模态论文笔记——U-ViT

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍U-ViT的模型架构和实验细节,虽然没有后续的DiT在AIGC领域火爆,但为后来的研究奠定了基础,但其开创性的探索值得学习…

springboot实战纪实-课程介绍

教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能,降低了复杂性,同时支持…

BBP飞控板中的坐标系变换

一般飞控板中至少存在以下坐标系: 陀螺Gyro坐标系加速度计Acc坐标系磁强计Mag坐标系飞控板坐标系 在BBP飞控板采用的IMU为同时包含了陀螺(Gyro)及加速度计(Acc)的6轴传感器,故Gyro及Acc为同一坐标系。同时…

数据表中的索引详解

文章目录 一、索引概述二、普通索引三、唯一索引四、全文索引五、多列索引六、索引的设计原则七、隐藏和删除索引 一、索引概述 日常生活中,我们经常会在电话号码簿中查阅“某人”的电话号码,按姓查询或者按字母排序查询;在字典中查阅“某个…

大模型系列17-RAGFlow搭建本地知识库

大模型系列17-RAGFlow搭建本地知识库 安装ollama安装open-wehui安装并运行ragflowRAG(检索、增强、生成)RAG是什么RAG三过程RAG问答系统构建步骤向量库构建检索模块生成模块 RAG解决LLM的痛点 使用ragflow访问ragflow配置ollama模型添加Embedding模型添加…

R shiny app | 网页应用 空格分隔的文本文件在线转csv

shiny 能快速把R程序以web app的形式提供出来,方便使用,降低技术使用门槛。 本文提供的示例:把空格分隔的txt文件转为逗号分隔的csv文件。 前置依赖:需要有R环境(v4.2.0),安装shiny包(v1.9.1)。括号内是我使用的版本…

SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models

题目 苏格拉底式教学:用大型语言模型探索苏格拉底式个性化教学 论文地址:https://openreview.net/pdf?idqkoZgJhxsA 项目地址:https://github.com/Ljyustc/SocraticLM 摘要 大型语言模型(LLM)被认为是推进智能教育的一项关键技术,因为它们展…

第一节:电路连接【51单片机+A4988+步进电机教程】

摘要:本节介绍如何搭建一个51单片机A4988步进电机控制电路,所用材料均为常见的模块,简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机最小控制模块 ②开关电源 ③A4988模块转接座 ④二相四线步进电机 ⑤电线若干 二、接线 三、A49…

Outlook2024版如何回到经典Outlook

Outlook2024版如何回到经典Outlook 如果新加入一家公司,拿到的电脑,大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的,科技公司所有人都是I…

网关如何识别和阻止网络攻击

网关在识别和阻止网络攻击方面扮演着关键角色,它通过多种技术和机制来确保网络的安全。以下是网关如何识别和阻止网络攻击的一些主要方法: 1.深度包检测(DPI) 网关可以对经过的数据包进行深度分析,检查数据包的头部、负…

操作系统复习(理论版)

目录 只会在选择填空出现类型 第一章:操作系统导论 操作系统介绍 不得不知道的概念 可能出现在答题的类型 第二章:进程调度 进程管理: 处理机调度: 进程同步: 死锁: 预防死锁: 避免死…

概述(讲讲python基本语法和第三方库)

我是北子,这是我自己写的python教程,主要是记录自己的学习成果方便自己日后复习, 我先学了C/C,所以这套教程中可能会将很多概念和C/C去对比,所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l,long list 使用长列表格式-a,all 不忽略.开头的条目(打印所有条目,包括.开头的隐藏条目&#xff09…

改善 Kibana 中的 ES|QL 编辑器体验

作者:来自 Elastic Marco Liberati 随着新的 ES|QL 语言正式发布,Kibana 中开发了一种新的编辑器体验,以帮助用户编写更快、更好的查询。实时验证、改进的自动完成和快速修复等功能将简化 ES|QL 体验。 我们将介绍改进 Kibana 中 ES|QL 编辑器…

基于Spring Boot的紧急物资管理系统

基于Spring Boot的紧急物资管理系统是一个非常实用的应用,特别是在应对自然灾害、公共卫生事件等情况下。该系统可以帮助管理者有效地追踪和分配物资,确保资源能够及时到达需要的地方。以下是一个基本的实现思路和一些关键组件: 项目规划 需…

机器学习基础-概率图模型

(一阶)马尔科夫模型的基本概念 状态、状态转换概率、初始概率 状态转移矩阵的基本概念 隐马尔可夫模型(HMM)的基本概念 条件随机场(CRF)的基本概念 实际应用中的马尔科夫性 自然语言处理: 在词…

Qt打包为exe文件

个人学习笔记 选择release 进入项目文件夹,查看releas生成的文件 releas文件路径 进入release看到exe文件,但是无法执行 将exe文件单独放到一个文件夹内 选择MinGW 用CD 进入存放exe文件的路径,输入下面指令 cd J:\C\Qt\test4-3-1 windeploy…

VScode怎么重启

原文链接:【vscode】vscode重新启动 键盘按下 Ctrl Shift p 打开命令行,如下图: 输入Reload Window,如下图:

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …