Unity3d全策划配置新手指引
前言... 2
版本... 2
作者... 2
功能... 2
类型... 2
触发类型... 2
步骤类型... 3
实现... 4
简要... 4
策划方面... 4
程序方面... 4
流程图... 5
详细技术方案... 6
程序主要逻辑... 6
关键细节答疑... 6
附:word版百度云盘下载
前言
本文档描述Unity3d下支持策划灵活配置、多样性丰富的新手指引的相关说明,如有设计上不明白的地方,可登陆游戏(《魔霸西游》)体验。技术上有疑问的地方,可联系作者MarsZ解答,QQ569491198。
2015年7月28日
版本
V1.2( 2015年7月29日11:33:09)
作者
MarsZ (QQ569491198)
功能
在指定任意条件下,触发某对应指引,指示玩家执行某相关操作(如点击、拖动或播放某指令)。指引期间除执行指定操作外,无法执行其他无关操作(如点击无关地方)。所有指引由策划灵活配置,包括什么时候触发、触发什么指引等。
类型
触发类型
指引触发条件(主条件为可能触发指引的操作,副条件为判断指引能否触发时的附加判断条件)
格式: type,value
=====只为主条件, 后端用=====
1: 完成某指引后,主界面触发
base_guide.guide_id
2: 首通某关卡后,主界面触发 base_scene.scene_id
=====只为主条件=====
5: 关卡对话结束(关卡id#1,战胜;2,战败;3,胜或败;4,战前)
6: 点击操作(界面#目标#索引 0无索引)
7: 拖动操作(界面#目标1#索引1#目标2#索引2 0无索引)
11:任意仙魔血量低于X(%) (只用于线性)
25:章节领奖(关卡id#0,该关卡;1,除了该关卡)
=====可为副条件=====
10:进入区域(关卡id#区域12345)
14:战斗&回合(关卡id # 1胜;2败;3超时;4战败 # 第n次)
15:战斗&回合(除了关卡id # 1胜;2败;3超时;4战败 # 第n次)
16:战前配置,已上阵X个仙魔 (不包括主角)
20:主角的第1个激活属性激活了(1)(1不可修改)
21:主角提升到了N级(N)
=====只为副条件:
12:检测任务状态(任务id#0,未完成;1,完成未领;2,完成已领;3,未触发;4,完成)
17:检测指引状态(指引id#0,未完成;1,完成)
18:检测PVP状态(界面#0,未开始;1,开始)
22:检测战斗状态(关卡id#0,非战斗中;1,战斗中)
23:检测敌方仙魔总血量高于百分比(关卡id#XX)
24:检测模块是否解锁(模块id#0,未解锁;1,解锁;)
……
步骤类型
0: 纯对话
1: 箭头指示
2: 手指点击
3: 手指拖动
4: 手指双击
7: 功能解锁/锁定
9: 战斗暂停/继续
10:发送仙魔位置
11:对错提示
12:播放解锁动画
13:移到主界位置
14:战斗界面动画
15:切换头像
16:点击移动
17:箭头文本
18:至某界面
20:滑动地图
……
实现
简要
策划方面
策划主要通过配置2个表来实现对指引的设置和控制,分别为:
base_guide表以及base_guide_step表。表结构分别为:
图1 base_guide表结构
图2 base_guide_step 表结构
程序方面
程序读取配置表,当用户执行某些特定类型的操作,如点击、拖动或接收/完成任务,通关某关卡等时,检测相关操作能满足哪个指引组的执行条件(如是否点击了对应的指引物体、是否拖动了对应的物体到对应的位置、是否接受/完成了对应的任务、是否通关了对应的关卡)。如满足某指引组执行条件,并且当前能执行指引(如不在加载界面,界面不在缓动等),则执行对应的指引组(base_guide表的guide_id的指引)。如不满足,则指引暂时结束。
执行完某指引组的当前步骤的指引(base_guide_step表的guide_step_id的指引)后,判断是否已执行完当前指引组的所有指引步骤,如未指引完,则执行该指引组中的下一个指引步骤,否则判断是否能触发下个指引组。
流程图
图3 流程图
详细技术方案
程序主要逻辑
1、根据策划配置的指引触发类型,设置对应的指引触发类型常量;
2、根据策划配置的指引步骤类型,设置对应的指引步骤常量,设计相应的指引步骤界面(如需要界面,如点击和拖动等需要手指播放界面。如播放某动画需要全屏遮罩等);
3、打开界面时:
i、根据策划配置,检测该界面是否有能触发指引的GameObject,如有,给这些GameObject绑定GuideTriggerGameObject脚本,用于截获能触发指引的操作,如点击(OnClick)等。截获到操作时,发送触发指引消息。指引控制器检测该操作能否触发指引组,如可以,指引之。
ii、根据策划配置,检测该界面是否有能执行指引的GameObject,如有,给这些GameObject绑定GuideGameObject脚本。当该GameObject正处于绑定的指引步骤执行中时,调整该GameObject的Layer和Depth等,让该GameObject可以接受点击或其他对应的指引操作。以及独立于其他显示单元进行高亮(如需要)。
4、指引步骤执行完毕后,发送消息给控制器,控制器收到后,检测当前指引组是否还有下一个指引步骤,如有,继续执行下一个指引步骤,直至指引完该指引组的全部指引步骤。
5、指引组的步骤全部指引完毕后,检测是否能触发下一个指引组,如能,执行之,否则指引暂停。
关键细节答疑
Q:关于指引时只让对应的指引物体可以接受点击、拖动等事件或者高亮。
A:指引时全屏遮罩一个指引layer(层级高于普通GameObject的层级)的蒙版,屏蔽所有无关的GameObject,对应正处于指引步骤中的GameObject,调整其层级到layer层,调整其depth以满足深度合适(必要时可以借助UIPanel来设置depth),让其可以接受事件。
Q:关于点击具有某属性值的物体触发特定指引。如点击某类型的某ID值的卡牌能触发特定指引。
A:打开界面时,给能触发指引步骤的物体绑定GuideGOInfo(继承自MonoBehaviour)脚本,脚本上附上相关的属性值(这些属性在物体上的信息更新时也要即时更新)。当物体遇到触发条件时(如被点击等),检测上方的属性时是否也满足某些指引的触发条件,如果一切条件都满足,即可触发对应指引。
Q:关于“播放动画”类型的指引步骤的执行方案。
A:对于这类型的指引步骤,当触发时,发送消息事件给外部,请求“播放动画”或其他操作。当这类操作完毕时,发送消息事件给指引,告知指引步骤完毕,让指引继续执行即可。
Q:关于断线重连后指引的继续。
A:关键指引步骤会发送消息给后端(见base_guide_step表的to_server
字段),请求后端保存该指引组和指引步骤。断线重连后,结合后端保存的指引组ID和指引步骤,计算出当前应该处于的指引组和指引步骤,执行之。如果该步骤是某界面中执行的,则先打开对应界面再执行指引步骤即可。
Q:关于指引间隙误操作。
A:要有个全局的指引遮罩蒙版,指引间隙间(如2步骤间等)让蒙版的作用。指引继续执行时或者指引结束后去掉该蒙版。
Q:某GameObject如何知道自己处于当前指引步骤。
A:该GameObject身上会有GuideGameObject脚本,继承自MonoBehaviour,且脚本中绑定有与本GameObject关联的指引组和指引步骤列表。当Update执行时,会判断其绑定的指引组和指引步骤列表中,是否有当前正在执行的指引组和指引步骤,如果有,则为正在执行与自身有关的指引。
Q:如何知道某GameObject绑定有什么指引。
A:在界面初始化时及界面中可能触发指引的GameObject变化时,发送一个重新更新绑定GuideGameObject和GuideTriggerGameObject的事件。收到事件后,循环遍历本界面GameObject上的所有Children GameObject,判断其名字和索引是否对应到了base_guide_step和base_guide中,如果有,则绑定GuideGameObject或GuideTriggerGameObject脚本,并且更新脚本里存储的指引组和指引步骤列表。