这篇教程开始我们将使用LuaEngine中的可选功能dataview,这个数据窗口自带了很多的游戏内数据的显示和修改方法,我们在开发脚本时可以随时参考这个脚本中的内容。
在这篇教程中我们将写一个新的脚本,脚本的功能是设计一个双刀的编程式动作,在LuaEngine中我们可以完全使用Lua代码创建一套自定义派生系统,通过设置不同的条件执行指定的派生,我们可以做到很灵活的设计一套连招。
本次设计的脚本中,我们要实现几个自定义的派生操作
- 当释放乱舞时,我们可以通过方向键+空格进行翻滚
- 鬼人六连斩时,在指定帧范围内继续点击左键可重复鬼人六连斩
- 被击飞时指定帧范围内按空格可以释放空中回转乱舞
- 设计一个终结技,按下X键原地跳起并在空中高速释放多次空中回转乱舞
要设计这几个派生操作,我们首先要利用datavie功能,dataview(数据窗口)可以方便的让我们实时看到当前施展的派生动作和动作帧信息,以便我们获取要施展派生的id数据。
接下来我们先安装数据窗口,在LuaEngine的安装包中有一个可选脚本,其中有数据窗口文件夹,将里面的dataview.lua文件解压到游戏根目录的Lua文件夹中,检测LuaEngineUI是否正确安装并设置了DX12模式启动游戏。
进入游戏后我们应该能看到游戏内出现了一个数据窗口,在这个窗口中我们可以看到十分多的游戏内部数据,今天我们用到的主要是玩家数据中的动作这一栏
这里我们可以看到,当前的派生信息和动作帧信息已经显示在窗口中了,接下来我们就可以利用这些信息来编写我们自己的派生动作,现在我们新建自己的脚本文件,这里还用test.lua为例。
首先我们的第一个派生动作当释放乱舞时,我们可以通过方向键+空格进行翻滚,要满足这个动作,我们第一步找到乱舞的派生信息或动作信息,通常我们使用动作信息来判断当前释放的动作。
在游戏内释放乱舞后我们可以看到,当前动作为49263,接下来我们在代码中判断当前的动作是否等于49263,如果是则进行接下的判断,不是则不处理。
这样我们就写好了对动作执行条件的判断了,接下来我们去找下各个方向翻滚的派生id,我们首先进行向前翻滚,然后看派生id和派生目标。
这里显示派生id是18目标是3,我们可以将对应的数值填入下方进行调试,目标填3,id填18然后点击执行派生动作,如果不出意外,我们看到人物已经向前翻滚了。
接下来我们继续寻找各个方向的翻滚派生信息,得出结论
- 向前18
- 向左20
- 向右21
- 向后22
还记得我们刚刚进行调试时使用了执行派生动作这个按钮吗,我们可以看到dataview中这段代码是这样写的
这里我们可以看到直接使用引擎就可以实现派生动作的执行,我们将代码写入我们自己的派生条件中,接下来我们的代码改成
好了,现在reload脚本去试试,我们已经实现了在乱舞过程中按下方向键+空格进行翻滚的操作的。
接下来我们来写第二个功能鬼人六连斩时,在指定帧范围内继续点击左键可重复鬼人六连斩,这个功能上我们用到了当前动作帧的功能,当我们执行某个动作时可以看到,这个动作的动作帧数量和当前正在执行的动作帧,我们希望在每次刀麾下后的一段时间可以触发我们的派生,这样我们就需要知道刀麾下的动作帧区间。
为了方便查看动作帧区间,我们可以在数据窗口中调整当前动作帧的倍率或速率,降低当前动作的速度,这样我们可以更方便的观察动作的运行过程。
通过执行鬼人六连斩这个动作,我们可以获知25-45,55-65这两个区间适合我们的动作执行,接下来我们将代码写入,
reload脚本后,我们可以看到现在已经实现了我们要的功能。第三个要实现的功能原理上和第二个功能完全一致,怎么样尝试自己写一下吧。
第四个功能就是我们通常制作的编程式mod。相信你写完了前三个功能后,已经有了制作第四个功能的大概想法了吧。接下来我们来一步步实现他。
首先我们要按下X键实现终结技的释放,还记得我们写的第一个脚本吗,按下按键,添加延迟,这里是一样的,只不过我们的终结技需要一个较大的延迟或其他限定条件,这里为了让玩家更直观的知道自己能否释放终结技,我们设计上当玩家耐力满时才允许释放终结技,释放后我们扣除掉一半的耐力,接下来我们先写出这部分内容。
怎么样和你写的一样吗,到此我们完成了触发条件的编写,下面我们要实现在空中释放多次空中回转乱舞,我们需要找到一个让玩家原地起跳的功能,然后用一个计数器重复执行动作,我们来写出这部分代码。
可以看到,我们写出了很多内容,让我们一步步解读这些。
首先我们写了一个按下X键释放终结技的触发功能,触发条件是满耐力和按下X键,触发后扣除一半耐力,然后释放一个让玩家起飞的派生动作,最后设置终结技正在释放的状态
接下来我们看释放的过程,首先我们判断了当前是否处于释放过程中,然后检查玩家是否在飞起的动作中,如果是则最当前帧进行判断,当到达顶峰前,我们给玩家坐标一个额外的上升速率,提高动作给出的上升值,当到达顶峰后,我们给出要执行空中乱舞的次数和执行的帧速率
再往下我们看执行空中乱舞的过程,我们首先判断了是否有执行次数和当前动作,然后我们在每次执行时将执行次数减少1,这样执行次数归零时就结束了释放。
然后我们获取了一个最近的怪物坐标,这部分大家可以粗略看看,后面将怪物的章节会详细去讲解,我们判断有没有最近的怪物,如果没有,则生成一个围绕玩家随机的坐标,然后让玩家转向怪物或随机坐标施展空中回转乱舞
最后我们判断是否释放结束全部流程,如果已经结束则还原所有参数。
到此我们的mod就已经完成了,学到这里你应该已经会使用自己的代码编写整套派生了吧。但是在实际使用过程中,你还要注意判断当前地图是否适合使用这些功能,玩家手里是否拿着双刀,逐步完善细节才能做出完美的脚本。
本篇教程大家是否感受到了我们频繁的使用了引擎的功能,但是大家或许对引擎还没有一个全面的了解,接下来的教程中,我们将暂时抛弃完整的脚本编写,带大家详细解读整个LuaEngine引擎部分的功能和使用方法。