NPC对话
界面内容读取与展示
第一部分是UI内容的读取和显示。
你需要前往物体编辑器,给NPC添加一个自定义属性“Talk”存储谈话内容。
我们还需要在界面编辑器设计聊天UI,它应该包括背景、NPC头像、文本和退出按钮。
聊天UI需要能读取并显示正确信息。
你可以用创建一个带参数的函数,参数是“NPC”单位。 在函数里创建两个本地变量存储NPC头像的ID和我们先前预存的自定义属性“Talk”。然后再创建界面组件“Icon”和“Talk text”并读取这两个变量。
这样当你具体调用与某个NPC的对话函数时,玩家UI就会出现其头像和文字内容。
统一NPC对话入口
第二部分是NPC聊天的统一入口。
当玩家试图靠近并点击任何NPC时,程序将会得到通知,并把各种触发方式统一为同一个入口,通过自定义的函数,把触发事件的玩家角色与想要对话的NPC这两个单位类型变量作为参数传递给函数中去。
通过调用函数,获取到对应NPC的一系列信息参数,并把它们写入到聊天界面,显示给玩家。
同时需要一个退出按钮,当玩家按下按钮时,对应的标记真值被修正为‘true’,即会执行界面的关闭。
然后,在函数Z02.一次NPC对话事件中,还需要使用循环计时器每秒检测玩家单位与NPC之间的距离。如果检测到距离大于500,也会触发对应的结构,使得界面结构停止运行并销毁。在统一出入口这件事上,和前面的统一入口的实现逻辑是类似的,我们需要把不同的退出方式进行单独处理,并最后通知在同一个出口上。
为了让所有的处理结构都处在同一个函数下,这里我们选择一种相对比较消耗性能的方式,以让玩家点击事件导致的界面关闭不会和显示界面的功能分离成两个模块。
我们使用一个真值类型的Swith对开关的状态进行储存,默认状态下,Swich为false,当玩家点击退出按钮时,我们在事件的动作中设置Swich为True。
视角回到函数内部,界面在启动时会循环检测Swich的状态,如果检测到玩家点击了离开,则会运行对应的退出功能。
功能差不多完成了,在核心的结构实现以后,需要对其他触达玩家操作的‘传感器’进行落地实现。
当玩家角色进入一个NPC的对话区域时,他们会调用函数Z02.一次NPC对话事件。
当玩家在地图上选择一个单位是,首先比较该单位,如果检测到其是一个NPC,则调用函数Z02.一次NPC对话事件,同时需要让玩家重新选中玩家角色。
为了防止玩家能够远程和NPC对话,以让游戏效果更拟真,只有当玩家选择的NPC距离玩家角色的距离小于400时,才会启动函数,否则向其提示距离过远。
Y3编辑器已帮助众多游戏开发者实现游戏梦想,欢迎大家下载Y3编辑器,创作属于自己的爆款游戏!更多保姆级新手教程,点击领取。
装备限制
对装备的品类或者数量做限制是RPG类游戏中一个常见的机制,例如一个玩家觉得只能携带一把武器和一件装甲,比如在FPS游戏中,玩家同时只能持有一把枪,想要切换到另一把枪就会把当前持有的武器移除掉,这些实际上的游戏效果都是装备限制。
装备属性和类型的储存
当玩家拾取装备时,如果玩家单位上没有该类型的装备,则会直接进行装备。
如果已经装备有同类型的装备,那么此时拾取的装备将被直接丢弃。
同时这个丢弃会被定义为系统丢弃,也即是不会触发对应的玩家丢弃流程。
第一部分是对数据进行存储,需要现在物编编辑器中定义每个装备的名称,图标等等,以及使用自定义值功能为其添加一个type项以表示其装备类型。
拾取物品
当玩家拾取一个物品时,创建两个局部变量来接收这个单位和对应的物品。
获取物品的‘type’属性,来判断当前单位是否具有此类型的物品。
如果判定为具有该类型物品,则需要将物品系统丢弃。
通过在物品的自定义值真值‘SystemDiscard’标记以让丢弃系统过滤掉本次操作。
如果判定为不具有该类型物品,则玩家成功获得物品,并将对应的‘type’类型标记为有。
并且储存当前持有的本物品,以方便后续根据物品变量显示对应的特效效果。
特效生成
想要为一个已有的事件附加另一个效果,可以使用自定义事件功能。
我们可以通过发送自定义事件和接收自定义事件来传输信息,在获得新装备后,可以发送一个自定义事件,通过事件来激活对应的特效功能。
对于武器和铠甲,我们使用了两种格式来对特效进行创建。
武器的特效是直接绑定在角色手部的拖尾,所以我们只需要直接将对应的特效路径以自定义值的形式保存在物品上,就可以用同一个函数启用所有的武器特效。
护甲的特效则复杂一些,它们由多个特效组合盘旋而成,所以我们需要一个函数内部对这些特效进行不间断的生成和销毁。
然后,我们根据自定义事件传递的物品和type参数进行分敛,以通知到不同类型的特效创建函数,执行对应的效果即可。
特效销毁
在函数库中,我们需要新建三个函数,分别是武器,盔甲1和盔甲2。
对于武器特效功能,在单位的节点添加一个拖尾特效,启动一个循环计时器,检测当前玩家持有的武器是否是该装备,如果已经丢弃,则将其移除,并对所有结构进行销毁。
盔甲1的特效显示逻辑和武器特效类似,不同的是,盔甲的特效将在每秒计时器到时后生成,并在两秒后将其销毁。
为了显示盔甲2的特殊效果,我们为单位创建了两个投射物,并使用局部变量进行储存。 为了实现球体的环绕效果,我们需要定义一个角度,这个角度将会每帧进行递增,以实现帧叠加以后的球体圆周运动。
我们使用一个帧计时器(0.03秒)来检测装备是否还在被装备,如果它被丢弃,对所有结构进行销毁。
当程序一直持续循环运行,球体的角度会在每一帧减去6,并根据一个固定的距离,以角色位置为圆心,通过极坐标系确定本帧投射物该在的位置。
丢弃物品
与拾取物品类似,当一个单位丢弃物品时,先使用局部变量对参数进行缓存。
如果该物品被检测为系统丢弃,则跳过整个流程,当做无事发生,因为一个未被允许装备的物品是不会运行对应的装备流程的。
如果判断物品是被玩家手动抛弃,可以先获取其对应的type,根据type对单位的对应自定义值项进行清空,这项数据的清空同时也会被一直检测本数据的特效结构得知,从而进行特效的销毁。
Y3编辑器已为众多游戏开发者带来千万营收,欢迎大家下载Y3编辑器,创作属于自己的百万爆款游戏!还有更多保姆级新手教程,等你来领。