在看Unreal Engine 4.x Scripting with C++ Cookbook(第二版)这本书,把一些必要的基础知识过一过。目前没有学习ygo具体游戏逻辑的实现,先尝试先自己简化一下实现一些东西,首先要弄清楚如何动态的传递一些参数(这对后面写逻辑至关重要):例如说,我得到了卡牌的code,那么我该怎么映射成对应的贴图信息?如果创建一个特定的Actor蓝图,那么我又该怎么去动态的表示这个蓝图的信息呢?这就是接下来将要进行的内容探索。
关于这个问题的具体描述应该是如何动态的加载资源(分为Object资源和Class资源)
可以看一下这一些大佬的归纳:UE4静态/动态加载资源方式 - 知乎 (zhihu.com)
【资料图】
[UE4]C++实现动态加载的问题:LoadClass()和LoadObject() 及 静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder() - Bill Yuan - 博客园 (cnblogs.com)
简而言之,资源按照一定的规律和卡片的id进行关联,然后在代码中通过LoadObject()传入资源的路径来完成动态的加载。 卡片衍生出来的蓝图通过LoadClass().
因此之前的修改1、动态加载材质信息,路径Path是字符串,可以很方便的变更,同样的蓝图类以一定的规则组织之后也可以通过路径来很方便的设置
接下来要考虑的内容是事件的传递、类间的消息传递,以及技能逻辑的运用
在做接下来的功能设计的时候,需要去了解游戏王卡牌游戏这个游戏的相关逻辑,关于卡片逻辑编写可以看B站这位大佬的视频游戏王Lua脚本编写教程·改二_哔哩哔哩_bilibili
关于技能的发动:
1、GAS中取对象的技能设计,使用targetData Actor来表征选选择对象的信息。
另一种实现方式是设定一个定时器,当技能开始的时候⏲,如果超时没有获取到对象,那么就当作对局失败或者技能发动失败处理。我偏向于后者的实现。
2、关于效果的类型,我们可以看到ygopro和DL的分类大体相似,如果用GAS设计技能的话也可以从简单的技能类型设计起来
3、卡片的表示
沿用ygopro的卡片类型的定义,在游戏中用Pawn做为基类。初始化的时候传入基本的信息,一开始将cards.db读入内存,用map存储,后续信息的查找都查询该map
效果卡片,仍然可以用lua实现逻辑,具体的后续再看看怎么实现比较合适。
4、设计简单的演示方案,仍然是从最简单的初代规则和初代卡牌考虑
a:summon a monster
利用动态资源加载的方式,先完成了一个简单的召唤逻辑。
先实现最基本的功能。后面再考虑详细的state信息
接下来实现三种基本的技能方式,然后看看技能资源该如何组织比较好
b:进行攻击
c:装备卡发动
d:生命值回复效果