未提供

教程实例-自走棋玩法教程

一.地形编辑模块

  本教程非地形编辑模块教程,关于绘制地形的部分,参考官方教程《地形编辑模块》,此处只对一些关键部分进行介绍。

  1.关于棋盘的绘制:

  本教程的自走棋棋盘为8*8格方阵,采用全局触发器先定义不同玩家棋盘的左下角左边点,然后定义棋盘格子大小20*20,最后使用棋盘摆件完成

二.全局触发器模块

  本教程作为玩法示例教程,在此不对整个全局触发器中各API进行介绍,只对全局触发器逻辑框架进行介绍,同时对其中某些比较关键的与各模块之间的通信逻辑进行介绍

  1.触发器框架构思:

  触发器框架构思:对于我们要实现的玩法,首先需要将玩法进行拆解,其中包括我们需要用到的变量、各阶段需要对变量进行什么样的操作,对玩家的操作输入需要做什么样的反馈等

  自走棋玩法整个框架包括:

  (1).地图初始化:这里主要是为整个游戏进行准备的阶段,包括我们需要使用的变量,包括游戏镜头调整等

  本地图中,主要使用到的玩家信息、棋子信息、初始镜头切换

  (2).游戏进程部分:游戏进程部分为回合类游戏的核心部分,每一个回合都是游戏进程的循环

  本地图中,主要将游戏进程分为准备回合开始、准备回合结束、战斗回合开始、战斗回合结束

  (3).玩家操作输入反馈:对于手游,玩家大部分的操作输入为拖动以及点击

  本地图中,玩家操作主要有锁定按钮、升级按钮、抽卡按钮、棋子操作(购买棋子、移动棋子、出售棋子)、切换玩家视角、强制退出游戏、查看棋子图鉴、查看羁绊信息

  (4).表现相关:主要针对于游戏中需要显示的一些非界面信息,主要包括特效信息

  本地图中,特效信息主要包括棋子选中特效以及棋子星级显示特效

  2.触发器编写:

  (1).地图初始化:

  第一步:进行玩家信息初始化,给每个玩家设置一个自定义键值,后续可以通过自定义键值来对应上玩家,同时将玩家全部放入一个玩家组中,可以通过循环玩家组进行所有玩家的操作

  第二步:对玩家锁定按钮状态、血量、金钱、经验、等级、棋盘位置进行初始化,同时对于不同等级玩家抽取棋子概率进行初始化

  第三步:对棋子信息初始化,给每个棋子设置一个自定义键值,后续可以通过自定义键值来对应棋子,同时将棋子放入一个数组中

  第四步:对棋子的等级、品质、出售价格、购买价格、数量、入血值、羁绊设定进行初始化

  第五步:初始化镜头

  (2).游戏进程部分

  准备回合开始流程:镜头拉远,清空所有场上的棋子,更新玩家的金钱、经验、等级信息,更新棋子库中抽到各棋子的概率,重置场上的棋子

  准备回合结束进程:检测场上棋子数量,当棋子数量超过玩家等级,退回棋子操作

  战斗回合开始进程:镜头拉近,随机敌方玩家,产生敌方单位,对敌方单位以及友方单位执行AI指令,根据场上棋子给各单位增加羁绊效果

  战斗回合结束:战斗开始一段时间以后判断场上决出胜负区域、单位死亡时判断场上决出胜负区域、到达一定时间以后即使场上还有区域未决出胜负也结束

  第一步:战斗开始一段时间以后判断场上决出胜负区域,如果已经全部决出胜负则进行回合结束结算然后进入新的回合

  第二步:单位死亡时,判断场上决出胜负的区域,如果已经全部决出胜负则进行回合结束结算然后进入新的回合

  第三步:当战斗开始一段时间以后,对场上所有区域进行结算然后进入新的回合

  (3).玩家操作输入反馈

  点击锁定按钮:修改锁定按钮状态

点击前状态

点击后状态

  点击人口按钮:增加玩家经验以及判断玩家等级,同时更新玩家抽卡概率

升级按钮

  点击抽卡按钮:更新抽出来的棋子

刷新棋子按钮

  点击设置按钮:弹出是否退出界面

点击查看棋子图鉴按钮

点击查看羁绊信息按钮

  棋子操作:购买棋子、移动棋子、出售棋子

  第一步:购买棋子,判断玩家金钱是否足够购买棋子,棋子放置位置

购买棋子界面

  第二步:移动棋子以及出售棋子,首先判断按下时按到的棋子所处位置,然后判断释放时释放的位置,根据位置对应进行棋子的移动或者出售操作

等待区

战场区

删除区

  点击切换玩家视角:点击不同玩家血条,切换到不同玩家的视角进行观战

不同玩家血条

  (4).表现相关:选中棋子特效显示以及棋子星级特效显示

选中棋子特效

头顶上星级

三.UI编辑模块

  自走棋玩法中UI编辑涉及较多较为高阶的做法,本教程指涉及这些高阶做法,基础UI编辑方式见《UI编辑模块》

  (1).多人玩法的控件显示问题

  在制作多人玩法时,常常需要面对同一个控件需要对不同玩家显示不同内容的问题,最基础的做法是在UI触发器中直接判断本地玩家的归属

  示例:

  该触发器用于显示玩家每局对战的对手是谁

  在监听了roundstate3全局事件后(意为游戏进入了战斗回合)

  分别判断本地玩家的归属,把同一个控件——enemy_information显示为enemystr这个字符串数组中对应的字符串

  (2).控件嵌套

  自走棋玩法一个panel中存在上百个控件,这时需要灵活使用控件嵌套的功能

  示例:

  这是panel1中屏幕左侧英雄头像栏的控件集合,把大量控件放在拖入背景图片中,使得他们的相对位置关系统一

  这样就可以通过操作Player1_info这个控件的各种属性,如位置、可见度来控制其从属控件的对应属性

  (3).倒计时

  制作一个自动倒数的倒计时UI是一个常见的需求

  第一步:创建一个文本控件,默认文本为倒计时最大数字——30

  第二步:在触发器中编辑它,创建两个UI局部变量

  第三步:编写触发器

这样就实现了30秒倒计时和60秒倒计时的来回循环播放

  示例:

  在监听到roundstate1,即准备回合开始时 

  设置两个变量分别为30和0

  然后每经过1秒,则显示控件文本为变量数字,然后把countdown1-1

  注意,要加上countdown1大于1的条件,这样倒计时会到0终止

编写另外一个触发器

  (4).控件组(以羁绊显示UI为例)

  有时候我们需要用到大量的同类型控件,如果在触发器中重复编写对应的触发器,是一件非常没有效率的事情,这时我们用到控件组

  第一步:创建12个羁绊图标控件

  这里用到了三个列表来帮助我们排列图标

  具体的列表功能使用方式见《UI编辑模块》

  第二步:创建控件组并加入所有的控件

  第三步:使用循环动作触发器更新羁绊图标,由于我们羁绊图标需要缩进显示,所以采用如下算法

  race_loop是局部循环变量

  可以看到对控件组做循环动作大量节省了触发器的编写,并且用race_loop每次+1的方式实现了图标显示的缩进

  (5).裁剪

  有时候预设库中的图片资源过大,而我们只需要用到其中一部分图片资源,这时就需要用到裁剪功能

  第一步:创建一个空节点(layout)

  layout空间如何创建详见《UI编辑模块》

  第二步:在layout控件中勾选剪裁选项

  第三步:在该layout下创建一个图片控件

  注意,该图片控件与layout控件一定是父子关系

  最终效果:

原图片

剪裁后

  (6).UI的拖动操作

  自走棋玩法UI最重要的是实现了棋子的拖动操作,这部分与自走棋主逻辑关系密切,这里只讲解UI部分是如何实现的

  第一步: 创建一个控件变量——choosecard,用于存储被玩家选择到的控件

  第二步: 编写手指按下事件相关的触发器,该事件会在玩家用手指触摸屏幕时发送触发器事件

  第三步:

  该动作是读取玩家手指触摸屏幕的坐标

  第四步: (重要)

  如果玩家触摸的坐标不在任何一个控件上,那就需要向全局触发器发送一个事件,告诉全局触发器,此时choosecard为空,同时把choosecard置空

  第五步: 如果choosecard=任何一个控件,都要向全局触发器发送相应的choose_card事件,并发送触摸发生的坐标

  手指按下事件编辑器设置完毕

  第六步: 编写手指触摸屏幕结束事件

  第七步: 被拖动的卡牌变透明

  第八步: 向全局触发器发送结束事件,并附带结束时手指停留的坐标

  全局触发器对结束事件进行处理,把棋子放在棋盘的对应位置

  第九步: 编写手指移动事件

  设置单位展示模型,使得拖动棋子时出现半透明模型

  附带屏幕左边的point事件,使得半透模型随着手指移动

地表选中特效显示

  最终效果如下:

拖动时卡牌半透

拖动时的虚影模型

松手放下棋子

四.全局触发器与UI触发器之间交互制作

  本教程作为多人玩法教程示例,梳理总结全局触发器与UI触发器之间的通信逻辑,方便大家进行多人玩法的制作

  1.全局触发器向UI触发器发送信息

  全局触发器中存在API:发送UI事件以及发送UI事件附带整数信息

  UI触发器中存在API:监听全局发送的事件

  如果是对于所有玩家进行操作,则全局发送UI事件即可,UI监听到该事件,对于不同本地玩家都进行统一操作即可

  如果是对于特定玩家进行操作,则全局发送UI事件需要附带特定玩家的信息,UI监听到该事件,根据附带的特定玩家信息对特定玩家进行操作

  2.UI触发器向全局触发器发送信息

  UI触发器中存在API:发送全局事件

  全局触发器中存在API:监听UI发送事件

  因为UI触发器发送的信息基本都是对于触发玩家信息的操作,因此直接使用触发玩家提取出该玩家即可

五.技能编辑模块

  本教程非技能编辑模块教程,关于编辑技能部分,参考官方教程《技能编辑模块》

六.AI编辑模块

  本教程非AI编辑模块教程,关于编辑AI部分,参考官方教程《AI编辑模块》