html购物网站代码,镇江网站建设网站,茶叶怎么做网站销售,wordpress主题安装教程本项目同步上传于github和coding上#xff0c;国内读者可以通过在coding下载项目。也欢迎你加入我的UE4学习交流QQ群#xff1a;872537977。如果你喜欢我写的文章#xff0c;也希望你点赞、收藏、转发。谢谢#xff01;如果你喜欢我写的文章#xff0c;也希望你点赞、收藏…本项目同步上传于github和coding上国内读者可以通过在coding下载项目。也欢迎你加入我的UE4学习交流QQ群872537977。如果你喜欢我写的文章也希望你点赞、收藏、转发。谢谢如果你喜欢我写的文章也希望你点赞、收藏、转发。谢谢如果你想参与到这个项目的开发中来唯一的要求是像我一样编写开发日志让更多的人看到并学习。github地址https://github.com/Liweimin0512/uRPGcoding地址https://git.dev.tencent.com/JeremyBrett/uRPG.git这一期我们实现道具的拾取和存放需求分析上一期中我们设计了一个掉落物的列表。这一期我们继续处理当列表中的道具被点击后将道具保存到玩家的背包中的操作。我们首先制作一个极简的背包它不需要通过主界面的图标跳转到专属的界面。而只是在主界面下方的一排“快捷栏”。因为其实现的原理是一致的。希望小伙伴们能举一反三吧。首先我们依然要客串策划的工作。策划同学突然灵光一闪觉得道具和掉落物应该是一一对应的而掉落物的参数是可配置的。DropData与Item的对应关系通过思考我们对这部分代码进行了重构。首先是我们创建了一个DropData的结构体如下图所示默认值就设置成之间的掉落物本来该有的值s_DropData这里设置比较简单掉落物的模型、特效及拾取半径都是可以配置的。然后我们在原有的ItemData中引用这个结构体如下图所示ItemData中引用构建Bp_master_DropBase我们在Bp_master_DropBase中首先将相关变量都勾选成“可编辑实例”和“在生成时显示”。并且编写蓝图的构建脚本如下图所示Bp_master_DropBase的构建脚本构建脚本顾名思义就是在蓝图构建时调用的大概总之是比BeginPlay事件要早。当玩家进出凋落物的拾取范围呢依然是调用玩家角色身上的UpdateDropItemList方法。调用UpdateDropItemList这个方法的实现目前看依然很尴尬只是做了一个传话筒但是我们这么写的目的是为了搭出架子来在之后的修改中会更方便。UpdateDropItemList的实现Drop函数的重构再次改写Drop函数其实是因为Bp_master_DropBase这个蓝图本身做了调整它除开存放本身外显的一些参数外还存放了一个s_ItemState的结构体变量s_ItemState这个结构体很常用是保存玩家所拥有的道具及道具数量的简单结构体。Drop函数的改变可以看出Drop函数的改变主要来自于ItemState简单了许多只需要传入道具Id和数量即可。而Drop相关的参数也是通过查询ItemList表格获取到的。UMG_PickupList的处理UMG_PickupList主要是UpdateListView这个函数的实现这也是目前比较关键的一步。首先我们根据Add判断是添加还是移除元素从ItemStatList这个集合中同时对PickupListView进行一次清理操作ItemStatList操作然后我们遍历ItemStatList中的元素逐个添加到PickupListView中添加操作由于这部分都是对上一期中代码的重构因此不详细介绍思路了就。UMG_ItemInventory上文的内容都是对过往代码的重构从这里开始才进入本篇文章的主题。首先我们创建一个主界面控件——快捷栏控件。它长这样UMG_ItemInventory的设计如果你细心观察会发现其实这个Weiget只使用了一个HorizontalBox组件如何实现这就要引出PreConstruct这个事件了他有点类似于蓝图的构造脚本。在编辑器中就可以展现事件中所进行的修改。我这里进行的修改很简单PreConstruct创建了10个UMG_Item并将其添加到HorizontalBox组件上同时为了进行逻辑上的记录还将其保存在一个名为ItemIndex的map中ItemIndex至于UMG_Item这个Weiget呢相信你已经猜出来了。UMG_Item它由背景图片道具图片和道具数量三部分组成并且默认情况下没有道具时道具图标、道具数量都是隐藏的只显示背景图片。ps写到这里突然感觉实现方式有问题懒得改了下期再说OnItemClicked事件ListView很重要的一个事件就是当列表中的某一项被点击时候调用的OnItemClicked事件。我们这里要用这个事件当点击时将掉落物添加到背包中并从拾取物列表中移除。OnItemClicked这里我们并没有直接处理而是将操作权交给了Controller。不过还是将干掉掉落物的操作直接在这里实现了。似乎也是不合理的部分之后优化吧。那么Controller怎么操作的呢他首先通知Character做相应的操作SetItemValue然后通知主界面做相应操作UpdateItemInventoryF_Pickup而UpdateItemInventory顾名思义就是更新一下背包。这个函数可以再每次打开背包的时候调用这里因为是直接显示在快捷栏中因此当捡起道具时候就应该直接显式调用一次。UpdateItemInventory首先就是遍历ItemMap然后根据其中存储的ItemID通过查表将道具图标和数量显示出来需要注意的是图标和数量的控件默认都是隐藏的这里需要将其设置为显示的。至此将道具存放到背包中的功能就算是完成了。下期预告在之后的一段时间我想研究一下任务系统的实现。至于道具系统更深入的开发就留给任务系统之后来做。或者说是制作一个简易的任务系统然后补充这些基础系统的文档后。再重构更为精巧的技能、任务和道具系统。