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

news2024/11/19 12:35:41

目录

  • 0 引言
  • 1 快速入门
    • 1.1 新建插件的前提
    • 1.2 创建插件步骤
    • 1.3 打包插件
  • 2 无源代码的插件制作
  • 3 插件详细介绍
    • 3.1 插件的使用方法
    • 3.1 UE 预置插件模版
      • 3.1.1 空白
      • 3.1.2 纯内容
      • 3.1.3 编辑器独立窗口
      • 3.1.4 编辑器工具栏按钮
      • 3.1.5 编辑器模式
      • 3.1.6 第三方库
      • 3.1.7 蓝图库
    • 3.2 插件中文件的含义
  • 4 插件开发常见问题

请添加图片描述

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

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.coloradmin.cn/o/1088897.html

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

相关文章

milvus和相似度检索

流程 milvus的使用流程是 创建collection -> 创建partition -> 创建索引(如果需要检索) -> 插入数据 -> 检索 这里以Python为例, 使用的milvus版本为2.3.x 首先按照库, python3 -m pip install pymilvus Connect from pymilvus import connections c…

Java初学者容易犯的错误,Java程序员必须知道的学习路线

万事开头难,java 编程的初学者常常会遇到各种各样的问题。对于自学的读者来说,则是需要花费更多的时间、精力来解决这些问题,而且一旦遇到的问题几天都得不到解决,往往会带来很大的挫败感。 所以本节介绍一些初学者经常出现的错误…

Flutter笔记:电商中文货币显示插件Money Display

Flutter笔记 电商中文货币显示插件 Money Display 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1338…

【数据结构】什么是线性表?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 线性表的定义 生活中常见的线性表 结语 线性表的定义 线性结构的特点: 在数据元素的非空有限集中: 存在唯一的一个被称作"第一个"的数据元素;存在唯一的一个…

Linux系统编程_文件编程第1天:打开、写入、读取、关闭文件等编程

1. 文件编程概述(399.1) 内容超多: 文件系统原理及访问机制文件在内核中的管理机制什么是文件信息节点inode文件的共享文件权限,各种用户对其权限。。。。。。 应用为王,如: 账单游戏进度配置文件等 关心如…

WEditor的安装和使用

WEditor 编辑器能够提供辅助编写脚本,查看组件信息,调试代码等功能。 Screenshot 安装 依赖项目 Python3.6 uiautomator2facebook-wda Only tested in Google Chrome, IE seems not working well. pip3 install -U weditor # uiautomator2, faceboo…

龙迅LT86102UXE HDMI2.0转二路HDMI2.0/1.4,支持音频剥离,支持4K60HZ

龙迅LT86102UXE 1.描述: 龙迅 LT86102UXE HDMI2.0 分路器具有符合 HDMI2.0/1.4 规范的 1:2 分路器、最大 6Gbps 高速 数据速率、自适应均衡 RX 输入和预加重 TX 输出(用于支持长电缆应用)、内部 TX 通道交换以 实现灵活的 PCB…

天眼查最新方式工商信息爬取(公开信息)

本章教程,主要介绍利用python效率提取天眼查公开工商信息。 官网地址:天眼查-商业查询平台_企业信息查询_公司查询_工商查询_企业信用信息系统 教程仅供参考,请勿滥用,由此带来的法律责任,需由自己承担。 1、数据预览 2、程序代码 #!/usr/bin/python # -*- coding: UTF-…

vue3结合elemplent-plus组件初始化选择日期范围

实现的效果: 在使用时踩了个坑,耽搁了俩小时时间,气人!!!! 注意: 1.获取上个月时间时必须使用正确的时间格式去获取,在获取时间的时候不能操作-等 2.获取到的时间必须…

物联网AI MicroPython传感器学习 之 HX711称重传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 下图是一款量程为5kg的称重传感器,采用悬臂梁方式安装。传感器主体结构是一个开孔金属条,金属条上下表面各贴有两个应变电阻,当金属条受力发生变形时时&…

接口测试如何高效管理接口文档 !

痛点 如果你负责测试的项目是一个前后端分离的项目。 回忆下是不是有如下场景: 某个项目开发完成,接口文档发布在了 swagger 上,前后端各自进行开发。此时你负责这个项目的服务端测试。 首先进行接口测试,熟练的打开 postman 导入 swagger 文档,然后开始进行接口测试。 接口…

自动化办公篇之python

1、如果没有安装xlwings库,先在控制台pip install xlwings,然后点击运行,创建四个空excel表 。 import xlwings as xw app xw.App(visibleTrue,add_bookFalse) for dept in ["技术部","销售部","运营部","财务部&q…

2023年中国渔业研究报告

第一章 行业概况 1.1 定义 渔业,作为全球经济的重要支柱之一,其核心活动包括捕捞、水产养殖、产品加工与销售等。其不仅是食物安全的重要保障,还是许多沿海和内陆地区经济发展的重要动力。 首先,捕捞活动是渔业的基础。通过海洋…

中国走向碳中和:零碳联盟的关键角色

随着近期联合国大会上主席宣布的中国碳中和目标,国家的低碳转型和绿色可持续发展再次成为焦点。面对这样的国家大政方针,不少企业和机构纷纷响应,其中零碳联盟的努力与成果更是备受瞩目。 零碳联盟,作为中国投资协会联合多家机构…

微信小程序生成海报

效果: js1: const cloudHelper = require(../../../helper/cloud_helper.js);async function config1({cover,title,desc,qr,bg = }) {var qr1 ="images/qr.png"var qr2 ="https://636c-cloud1-0gu29f2j63906b7e-1319556650.tcb.qcloud.la/activitycomm/setu…

C++入门 —— 命名空间

命名空间 前言1. 什么是命名空间2. 命名空间的定义3. 命名空间的使用3.1 域作用限定符 ::3.2 使用using将命名空间中某个成员引入3.3 使用using namespace 命名空间名称 引入 4. cin/cout 输入输出4.1 C中的输入输入与C中的输入输出对比 所属专栏:C“嘎嘎" 系统…

快速自动化处理JavaScript渲染页面

在进行网络数据抓取时,许多网站使用了JavaScript来动态加载内容,这给传统的网络爬虫带来了一定的挑战。本文将介绍如何使用Selenium和ChromeDriver来实现自动化处理JavaScript渲染页面,并实现有效的数据抓取。 1、Selenium和ChromeDriver简介…

AN基础工具——动画人物上色

【AN基础工具——动画人物上色】 基本操作滴管工具填充工具画笔工具流畅画笔工具 实例,给多啦A梦上色注意事项 本篇内容:动画人物绘制基础 重点内容:滴管工具,画笔工具,填充工具 工 具:Adobe Animate 2022 …

17个开源的Go语言博客和CMS解决方案

Go语言,也称为Golang,是一种为构建高效、可靠和可扩展软件而设计的开源编程语言。它于2007年在Google开发,现在广泛用于开发Web应用程序、网络工具和系统软件。 为什么使用基于Go的CMS解决方案? 这些优势使Go成为开发可扩展、高…