UE5 C++ 插件开发 0.专栏介绍

0. 前言

看了一下Epic商店的插件,价格都比较贵,当然,插件贵有贵的道理:

  • 即插即用,插件可以大大降低开发成本,丢到项目插件栏即可启用;
  • 高度解耦,插件不依赖具体项目,与项目解耦代表其高度可移植性,这个项目用完,下个项目也可以用;
  • 灵活扩展,在插件的基础上可以进行扩展,当然,这个要看插件的具体接口是否足够开放;

优秀的插件应该具备上述的三种特质,所以开发一款插件很考验设计和实现能力,在设计上应该考虑到解耦,易用,扩展性,实现的时候要充分利用接口的特性.
这个专栏就是针对插件开发来写的,在开发商店和背包的插件过程中,笔者积累了不少心得,尤其是关于UE5 C++的使用,关于接口的实战应用,代理声明,绑定和触发,消息监听,广播和注销,ListView的使用等等,大量的干货!

商店背包插件1.0


大家可以先看看这个插件的视频介绍,以下是插件的思维导图:

思维导图
图片看不清的话,可以跳转到源文件:游戏商店和背包设计.

1. 插件开发案例:商店和背包

游戏商店和背包插件作为第一个案例,实现的功能如下:

  • 商店展示和交互;
  • 背包展示和交互;
  • 快捷栏的展示和交互;
  • 合成面板的展示和交互;
    这里交互主要是增删改查,拖拽,提示,等.

2. 插件开发大纲

这个大纲和上面的思维导图是一样的,只是形式不同,思维导图更加容易看清楚结构,开发大纲更容易根据大纲来逐项完成开发.

2.1数据结构:Data

●物品:Item
	●物品配置:FItemTable
		●编号:ID
		●价格:Price
		●库存:Stock
		●物品定义接口:IItemDefinitionInterface
			●显示名称:DisplayName
			●物品类型:FGameplayTagContainer
			●显示图标:FSlateBrush
			●简介:Introduction
			●最大数量:MaxCount
			●可叠加数量:Overlap
			●物品重量:Gravity
			●子类数组:Children
			●标签栈:TMap<FGameplayTag, int32>
				●耐久度:Durability
				●子弹数量:Ammo
				●可扩展
	●物品实例:UItemInstance
		●全局编号:GUID
		在生成实例时赋予实例全局唯一编号FGuid
		●物品编号:ItemID
		●实例索引:Index
		●物品定义:ItemDefinition
		●标签栈:FGameplayTagStackContainer
			●标签:FGameplayTag
			●栈数:StackCount
	●快捷栏配置:FQuickBarConfiguration
		●等级:Level
		●容量:Volume
		●负重:Gravity
		●升级消耗:UpgradeCost
	●背包数据结构:Inventory
		●背包配置:FInventoryConfiguration
			●等级:Level
			●容量:Volume
			●负重:Gravity
			●升级消耗:UpgradeCost
		●背包列表:FInventoryList
			●条目:Entries
				●条目结构:FInventoryEntry
					●物品实例:UItemInstance
					●数量:StackCount
			●所属组件:OwnerComponent
			●操作:Actions
				●增:AddEntry
				●删:RemoveEntry
				●改:UpdateEntry
				●查:FindEntry
				●交换:Swap
				●广播:Broadcast
				●同步序列化:FFastArraySerializer

2.2 游戏实例子系统

●游戏实例子系统:UGameInstanceSubsystem
	●消息:MessageSubsystem
		●监听消息:RegisterListener
		●广播消息:BroadcastMessage
		●注销消息监听:Unregister
	●商店:ShopSubsystem
		●背包配置
			●读取
			●缓存
			●查询
		●快捷栏配置
			●读取
			●缓存
			●查询
		●物品配置
			●读取物品配置表:ReadDataTable
			●物品数据表缓存:SlotTablePtr
			●根据编号获取物品数据:GetItemDataByID
			●物品数据数组缓存:CacheSlotTables
		●交易
			●交易监听句柄:TransactionListenerHandle
			●交易处理:OnNotificationTransactionMessage

2.3 管理组件

●管理组件基类:UActorComponentBase
	●钱包:UWalletActorComponent
		●货币:Gold
		●支付能力:CanAfford
		●交易:Transaction
	●商店:UShopActorComponent
		●商店视觉实例:ShopPtr
		●显示商店:ShowShop
		●变更店主:ChangeOwner
	●背包:UInventoryManagerActorComponent
		●背包配置:FInventoryConfiguration
			●等级:Level
			●容量:Volume
			●负重:Gravity
			●升级消耗:UpgradeCost
		●物品列表:FInventoryList
		●目录:Categories
		●标签:CategoryStatTags
		●实例:CategoryArray
		●升级窗口:UpgradeWindow
		●操作:Actions
			●增:AddItem
			●删:RemoveItem
			●改:UpdateItem
			●查:FindItem
			●交换:SwapItem
			●同步:ReplicateSubobjects
	●快捷栏:UQuickBarComponent
		●快捷栏配置:FQuickBarConfiguration
			●等级:Level
			●容量:Volume
			●负重:Gravity
			●升级消耗:UpgradeCost
		●栏位:Slots
		●激活的索引:ActiveSlotIndex
		●操作:Actions
			●增:AddItem
			●删:RemoveItem
			●改:UpdateItem
			●查:FindItem
			●装备:Equip
			●卸装:UnEquip
		●升级窗口:UpgradeWindow

2.4 UI

●视觉展示:View
	●商店视图:ShopView
		●商品分类:Categories
		根据标签动态生成
		●商品列表:ItemList
		●合成面板:UItemCompoundPanel
			●线条:Lines
			●物品:Items
	●背包:Inventory
		●货币数量:GoldNumber
		●物品分类:Categories
		●物品列表:ItemList
		●背包容量:Volume
		●背包负重:Gravity
		●监听数据变化:Listeners
	●快捷栏:QuickBar
		●货币数量:GoldNumber
		●物品列表:ItemList
		●监听数据变化:Listeners
		●激活的物品:ActiveItem
	●物品单元:ItemSlotBase
		●商品:ShopItem
		●背包物品:InventoryItem
		●快捷栏物品:QuickBarItem
		●合成物品:CompoundItem
	●提示信息:Tips
		●名称:Name
		●描述:Description
		●价格:Price
		●词缀列表:Affix
			●词缀
			●数量
			●监听
	●交互确认:ConfirmWindow
		●文本:Text
			●标题:Title
			●物品价格:PriceText
			●物品名称:ItemName
			●物品数量:CountSlider
		●按钮:Button
			●确认:Confirm
			●取消:Cancel
	●升级窗口:UpgradeConfirm
		●文本:Text
			●标题:Title
			●当前等级:CurrentLv
			●下一等级:NextLv
			●升级价格:PriceText
		●按钮:Button
			●确认:Confirm
			●取消:Cancel

3. 待办清单

当然这个插件还没有完全开发完成,所以还有一个代办清单:
Todo
这些都是要在后面逐步实现并更新的.

4. 订阅须知

那么订阅这个专栏可以得到什么?

  1. 插件源码,这个会首先提供给大家;
  2. 插件使用教学,教学大家快速将插件应用到项目中;
  3. 插件开发教学,从零开始逐步将这个插件开发出来,讲清楚思路原理;
  4. 插件同步更新,提供一个公共账号给大家拉取插件的更新;
  5. 技术支持,对在专栏评论区中的关于插件技术问题的留言进行技术支持.

这个专栏的价格比较高,一方面是因为参照了Epic商店对应类型的价格,所以希望可以给到大家一个合理的定价;另一方面是笔者现在开发独立游戏资金不足,所以想通过知识分享和付费来解决资金困难,希望大家多多支持;最最主要的是这个专栏的定价有助于提升其质量,笔者一定要对得起大家的每一分钱,所以是物超所值的.

猜你喜欢

转载自blog.csdn.net/qq_30137245/article/details/127547980