RPG游戏开发日志6:拾取列表的实现

本项目同步上传于github和coding上,国内读者可以通过在coding下载项目。
也欢迎你加入我的UE4学习交流QQ群:872537977。如果你喜欢我写的文章,也希望你点赞、收藏、转发。谢谢!
如果你喜欢我写的文章,也希望你点赞、收藏、转发。谢谢!
如果你想参与到这个项目的开发中来,唯一的要求是像我一样编写开发日志让更多的人看到并学习。
github地址:https://github.com/Liweimin0512/uRPG
coding地址:https://git.dev.tencent.com/JeremyBrett/uRPG.git
上篇文章中我们讲了一个非常粗糙的技能实现方式,本打算这一期做一个更复杂版本。但相比于一个模块一个模块的开发方式,我更喜欢将整个游戏需要的模块都用最便捷最粗糙的方式实现,然后再通过迭代优化。这样做的好处是可以迅速的做出原型,然后暴露问题,寻思调整。姑且就称之为我的敏捷开发方式吧。
好的,闲话少说,这期我们实现道具的拾取列表。

需求分析

类似《绝地求生:刺激战场》的效果,当我们靠近可拾取物时候,会出现一个列表,如下图所示:
拾取列表效果图

点击道具图标就可以“拾取”道具。
需要梳理的一个概念就是掉落物和道具的关系,当怪物死亡的时候会产生一个或多个掉落物。这些掉落物是怎么产生的呢?当道具可以堆叠的时候,就会堆叠成一项道具,并且标出堆叠的数量。而单个道具则不需要。所以在列表中显示的时候也是同理。
按照流程来思考整个功能的实现方式,应该分为两步:

  • 当玩家进入或者离开拾取物的拾取范围的时候,更新玩家的拾取列表;
  • 点选列表中的某项,触发拾取逻辑,将拾取物从列表中删除,存放在背包中(背包就是另一个列表);

拾取物UI(PickupItem)

我们创建一个新的Weiget,取名叫“UMG_PickupItem”,注意设置成“Desired On Screen”

Desired On Screen
整个控件由三部分组成:图标、名称和数量
UMG_PickupItem
需要注意的是,它需要实现UserObjectListEntry这个接口
应用UserObjectListEntry
这个接口的函数GetListItemObject如下图所示:
GetListItemObject实现
返回一个Model_ItemData文件,这个文件我们在之后说明。此外,就是实现OnListItemObjectSet这个接口事件,这个事件简单说就是把接受的Item数据展示在各种UI控件上,我是这么写的
接口事件OnListItemObjectSet的实现
首先把接收到的数据cast成Model_ItemData,之后把数据分别绑定给图标、名称和数量。啊,就这么简单。

拾取物列表(PickupList)

我们再创建一个Weiget,命名为“UMG_PickupList”,同理设置成“Desired On Screen”。它其实只包含一个“ListView”控件(之后可能添加“全部拾取”的按钮控件)
UMG_PickupList

关于ListView控件,需要特别说明的就是
ListView设置
这里,只有实现了UserObjectListEntry接口的Weiget才能设置在EntryWidgetClass中。这就回答了上文的一个疑问。

Model_ItemData

关于Model_ItemData,首先是这个命名不咋地我之后很可能换掉。这个类继承自Object而不是Actor(敲黑板啊,这里崩溃了很多次)。里面只是存放了一个结构体S_PickupItem。是一个货真价实的数据类。

Model_ItemData
s_PikcupItem结构体其实就是s_ItemData结构体的扩展,保存了ItemID和Amount(数量),方便使用。
s_PikcupItem
因为我们上文中说过,掉落物不但指定Item而且有堆叠数量的概念。所以通过ItemID和Amount进行一些堆叠操作是很必要的。

drop逻辑重构

首先是击杀NPC获得产生掉落,这里我们将产生掉落单独作为一个函数。这个函数在之后很可能成为一个掉落组件(现在太懒了,就先不弄了。)同时我们也对drop逻辑做了一次简单的重构,主要是加入了数量随机的设定(依然是因为太懒,先写死为1~20之间随机)
drop逻辑

就是根据Item能否堆叠来判断数量,如果能堆叠就产生数量随机,否则数量就是1个。(在我写这篇日志的时候突然意识到这样也不太对,数量随机与否应该是看配置数据怎么定义的,能否堆叠只是决定如何显示,之后再改吧)

掉落物

上一期我们忘记介绍掉落物,新建一个Actor命名为Bp_master_PickupBase,它由三部分组成,StaticMesh、特效和一个球形碰撞体(拾取范围),同时,它保存着一个s_PickupItem的结构体数据。

Bp_master_PickupBase
然后它的逻辑部分也比较简单,就是当有角色进出拾取范围时候,更新一下ListView
逻辑实现
Bp_CharacterBase中实现的updateListView只是调用主界面UI上的同名方法
updateListView
这里之所以没有在掉落物蓝图中直接调用主界面的逻辑,是想将可拾取物和主界面解耦,此外,可以在角色蓝图中做一些额外的处理。

UpdateListView

UMG_PickupList中写了真正的处理逻辑,这里比较重要的两个节点是ListView提供的清理和添加界面,逻辑简单讲就是先清理ListView,然后遍历列表中的数据添加到ListView中。

updateListView

效果展示

之前一直都是在之后加入“运行,测试,完美”的句式感觉太不走心了,之后的开发日志中我尝试截取GIT图片分享给大家。


效果展示

这里我们尝试击杀两个机器人然后看一下掉落效果。文件太大所以删除了开头和结尾并且删除了不少帧。将就看吧。

多测试几次,成功发现问题,就是开篇时图片所展示的。
重复道具
重复道具没有堆叠成一块,这个我们在之后再调整吧,今天懒癌发作,先逃了。
下一期我们实现道具的拾取保存。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,813评论 0 5
  • 你有没有用毛毛草编过可爱的兔子两把穗子是竖起来的两只耳朵或者用它编织花环戴上它就是大自然的王冠 你可曾把它衔在唇齿...
    听雨呢喃阅读 371评论 2 3
  • by 杨硕 营养学类的书籍是我这半年读的最多的,这本书最为浅显易懂,非常适合家庭使用。 随着生活水平的提高,“吃”...
    SureYang0826阅读 891评论 0 0
  • 在很长的一段时间里,我焦虑失眠。 夜晚漫长而空洞。我身体疲惫,脑子依然高速运转,双眼炯炯有神。白天发生的事...
    By于你与你阅读 183评论 0 0
  • 荆与棘其实在最初的时候是两种植物,只不过它们在野外常混生,因此产生“荆棘”。 书翎觉得这日子越来越难过了。 她已经...
    花见川阅读 676评论 0 5