热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用UE4制作2D游戏文档——计算篇

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。






一、前言

首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容。

视频指路:https://www.bilibili.com/video/BV1s5411Y7Ry

感兴趣的朋友别忘了给这个视频一键三连。

如何利用UE4制作一个2D游戏,众所周知,UE4是EPIC为了方便自己开发FPS游戏而“顺便”研发的一个引擎,后期通过不断的完善成为了现在功能强大的游戏开发引擎,并且在GITHUB上面进行开源,可以拿到源码进行魔改,然后声称“自主研发”。

后期会挖一个坑如何魔改UE4引擎源码(需要一定的C++基础),不过那是后话,本系列内容是如何使用UE4的蓝图进行制作2D游戏,主要包括以下内容:

(一)——基础篇,介绍UE4的基础操作,以及需要用到的类

(二)——资源篇,介绍如何导入基础美术资源进行场景制作与动画制作

(三)——角色篇,如何制作属于自己的角色,并且添加属于自己的操作

(四)——NPC篇,在角色制作的基础上创造一些NPC角色并且产生对话,制造故事流程

(五)——战斗篇,制作基于UE4自带AI的敌人,进行回合制战斗。

(六)——计算篇,进行战斗完毕后要对人物的奖励进行结算

(七)——数据篇,利用服务器存储角色数据,并进行在线交互(额外内容,不影响结算可以跳过)

……后续有更新再编辑这里

前文指路:

(一)基础篇:https://blog.csdn.net/qq_33182045/article/details/117120658

(二) 资源篇:https://blog.csdn.net/qq_33182045/article/details/117227086
(三)角色篇:https://blog.csdn.net/qq_33182045/article/details/117256883
(四)NPC篇:https://blog.csdn.net/qq_33182045/article/details/117560734
(五)战斗篇:https://blog.csdn.net/qq_33182045/article/details/117596948


二、UE4引擎奶妈级教程,如何对战斗结果进行结算

1.没看过战斗篇的读者可以去看看,如何进入战斗参考那一篇文章,这一次我们来对战斗结果进行结算。首先判定胜利条件,只要敌人生命值低于0,就宣告战斗胜利,那么我们就定义一个custom_event,来判定胜利。
先决条件是获取敌人的当前生命值参数,如果小于等于0,就将它置为0,并显示胜利界面,然后展示获得的奖励,如图1所示

图1 战斗胜利界面
可以在图1看到我们是在战斗胜利的时候会有一些数值影响玩家的角色的,因为要涉及到后面有个功能,该功能可更换操作的角色,所以相应的数值我们和上一篇一样,存储在玩家控制器里面。可以新建一个结构体,用于存储角色的一些基础数据,比如生命值,勇敢值,善良值,幸福值等等,如图2所示

图2 创建枚举
然后这个枚举就可以通用,在每一个项目里面存储对应通用的结构,比如如果我赋值给当前玩家的控制器,就新建一个数据表格,调用这个枚举,如图3所示

图3 新建数据表格调用结构体
调用这个结构体之后,可以看到类似于数据库操作的,没错,这个就是一个单机数据库,用来存储对应的数据

图4 数据表结构截图
在存储有数据的基础上,在角色蓝图里面调用对应行的数据,不过这个后期我们才用得到
2.新建角色内部的属性数据
在这里新建一个字符串表格,命名为shuxing,结构如图5所示

图5 玩家属性表格
这个表格用用于在玩家控制器当中存储相应的角色基础数据,再将这个数据存储进入步骤1中新建的结构体当中,那么我们如何在别的事件当中操控这些元素呢,这里提供两个思路,一个是通用蓝图接口(BP interface)如图6所示,另一个是调用自定义方法(custom events)如图7所示。

图6 蓝图接口界面

图7 自定义方法界面
友情链接董国政大佬的蓝图接口详解https://blog.csdn.net/qq_36409711/article/details/76596206
3.蓝图接口我们后面会专门开一个别的栏目来讲,这里我们用自定义方法来进行数据操作,所有的数据和方法都在玩家控制器当中,所以我们战斗胜利的时候调用玩家控制器对象的同时可以调用对象内的自定义方法。
先判定战斗胜利,在战斗界面的UI图表方法中,新建一个自定义方法,命名为victory_event,当敌人血量为0以下时,判定战斗胜利,并告知玩家控制器你获得了胜利,让敌人消失,并且获得奖励结算,如图8所示

图8 战斗胜利自定义方法
当敌人死亡的时候,将敌人生命值置为0,并且让胜利计算界面可视,进行结果计算(结果计算方法自己写),然后调用玩家控制器,通知敌人死亡,调用敌人死亡方法,接着调用切换音乐方法,再结束战斗,结束战斗就是将当前战斗界面从父项移除。
4.然后回到玩家控制器界面,生成一个自定义方法,命名为update_shuxing,用于更新玩家控制器内的某个属性,输入“shuxingming”字符串来存储属性的下标,用作属性名,"shuxingdian"整数来用作属性增加的数值,比如我要让"brave"属性+2,就将"shuxingming"输入为“brave”,"shuxingdian"输入为2,然后通过ADD方法,将属性表中对应的brave属性+2,如图9所示,这里需要说明一下为什么用ADD,官方给的解释是添加一个数组元素,如果原数组当中已经有相应下标的数组元素,则将其覆盖,所以我们引用了这个元素加上新的值之后覆盖原值。

图9 增加属性值通用方法

5.定义敌人死亡方法,以及战斗结束之后对属性的影响,首先我们定义敌人死亡的方法,当UI界面告诉玩家控制器敌人已经死亡的时候,玩家控制器当中存储的敌人生命值也相应的置为0,然后因为战斗胜利,需要获取更新属性,就调用刚才写的update_shuxing方法,输入brave,2,战胜敌人之后原地生成一个ACTOR,因为策划的要求是生成一个宝箱,而宝箱类我还没做,所以先用做好的NPC代替,接着敌人被销毁,如图10所示

图10 角色死亡方法
这样就进行了战斗胜利——增加角色属性——NPC消失——打开宝箱这么一个过程。
6.同样的道理,策划同学给了我一个要求,当某个属性增加了三次之后,会有进阶属性,那么我们重复之前1-4步的操作,来新建一个进阶属性数据表,并且用整形切换来进行数值的切换。如图11所示

图11 进阶数据添加
保存好蓝图后进行编译。
这样基础属性的计算和进阶属性的计算我们也就完成了,然后我们来测试一下效果,完成战斗之后是否能输出进阶的属性。初始属性如图12左上角、图13左上角所示。

图12 角色初始属性

图13 角色战斗胜利之后的属性
可以看到其中一项28的数据变成了30,说明了战斗胜利brave属性增加了2,而其他属性不变,方法调用成功。


三、总结

本次的文档重点讲了如何调用方法来进行计算,讲了蓝图接口与自定义方法两个类型的类,重点强调自定义方法的编写与调用,其实学会活学活用面向对象编程,每一个子功能进行分割,制作高内聚,低耦合的对象方法,可以让日后在扩展和维护的时候更方便与快捷,减少错误率,如果有需要我会专门出一篇文章讲UE4的面向对象编程,本次内容讲解完毕,下一次将会讲解UE4与WEB API的调用,记得点赞收藏转发,谢谢。


番外篇

注释的重要性:很多人都喜欢在写代码或者使用蓝图的时候随心所欲的连,只要实现功能,怎么方便怎么来,如果这样随心所欲没有养成分割成子模块并且进行功能注释的习惯,后期代码维护起来是个很大的问题,所以我这里强调一下制作注释。参考对比图14有注释的情况、图15没有注释的情况

图14 制作每个子模块的注释

图15 作者早期制作车辆不写注释的蓝图
通过上下一比对就发现,书写了注释并且分模块来开发,会让整个蓝图容易差错,起码工整清晰,明白自己要做什么子功能,要做什么其他功能。
具体制作注释的方法为:先选中需要注释的内容和节点,多选的情况下也可以,然后右键——创建注释——增加注释文本——把注释框将功能包裹住。这样就会得到自己想要的注释的模块。
我记得一个段子
程序员说:我最讨厌两件事,一件事情是让我写代码注释,另一件事情是别人的代码不写注释。
但是为了养成好习惯,要跟进开发进度与功能模块,将蓝图的注释写好,方便后期拓展与维护。







推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
Devon_Mars
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有