[MarsZ]Unity3d游戏开发之Unity3d全策划配置新手指引
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脚本,并且更新脚本里存储的指引组和指引步骤列表。
[MarsZ]Unity3d游戏开发之Unity3d全策划配置新手指引的更多相关文章
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
---------------------------------------------------------------------------------------------------- ...
- Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity3D游戏开发之SQLite让数据库开发更简单
各位朋友大家好.欢迎大家关注我的博客,我是秦元培,我是博客地址是http://blog.csdn.net/qinyuanpei.在经历了一段时间的忙碌后,博主最终有时间来研究新的东西啦,今天博客向和大 ...
- Unity3D游戏开发之C#编程中常见数据结构的比较
一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都 ...
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...
随机推荐
- HTML知识点纲要(1)
什么是 HTML?HTML,全称是Hyper Text Markup Language,即超文本标记语言.是用来描述网页的一种标记语言. HTML 标签HTML标签是由尖括号包围的关键词,通常成对出现 ...
- IOS分类(Category)
分类(Category):拓展原有类的方法,而不影响原有类的子类,分类中不能创建成员变量. 分类的使用: 1.创建分类: 如图点击(File)选择(New)->(File).. 或者使用快捷键c ...
- [C#]『PLINQ』任务并行库使用小计
并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现. PLINQ 实现完整的 LINQ 标准查询运算符集作为 T:System.Linq 命名空间的扩展方法,并具有用于并行 ...
- 【转】JSONP简介
原文链接:说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 先说说JSONP是怎么产生的: 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面. ...
- python連接mysql數據庫
第一步,安裝mysql數據庫. 這裏我安裝的是mariadb數據庫,版本5.5,並且配置好了字符集.此處不詳細敘述,相信大家沒有問題. 第二步,安裝mysql驅動. 首先說明一下有兩個主要的驅動: m ...
- aspx页面中, <%= % > 与 <%# % > 的区别
关于这个问题,在多数的 ASP.NET 的教材中,都提到了一些. <%= % >与 <%# % >的区别在于:绑定时机不同, <%# % >是在控件调用DataBi ...
- Python学习笔记——正则表达式入门
# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...
- sql join 用法
SQL JOIN 的用法 关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create tabl ...
- 【转】MyBatis中Like语句使用方式
http://www.cnblogs.com/littleCode/p/3727476.html oracle数据库: SELECT * FROM user WHERE name like CONCA ...
- C++的数据类型
C++的数据类型 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数.浮点数.字符等形式). 不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组).数据结构指的是数据的组 ...