NGUI 新手引导
现在我们的游戏已到了开发后期,这个时候需要做新手引导这一块(恶心的新手引导,真想说游戏行业究竟哪个2B最先想出来要引导的???代码搞的到处都是,改了一次又改!)
吐槽过后进入正题:主要还是UI相关的操作,3D场景操作引导的东西比较少。这一块我们使用的是unilua来做这件事,因为我们还没考虑用完善的热更新方案(比如ulua)来做新手引导,所以使用unilua也能暂时满足需求。
具体的做法是:新手引导这一块属于一个单独的界面,其中的Panel层次是比较高的(高于被引导的所有其他界面),其中主要的包括两种基本元素:对话窗口与指引点,对话窗口是只要玩家一点击就进入下一步,而指引点是玩家点击指引点(比如1个圆圈UI圈住1个领奖按钮)同时出发指引点的逻辑以及触发相应按钮的逻辑!
其中比较麻烦的有几点:
0.指引点的适配问题:比如在不同的分辨率下,箭头都需要指示在对应的按钮旁边!
1.要点击的指引点需要高亮
2.其他不被点击的需要不接收点击事件
3.如果是使用panel来控制高亮区域的点击,那么能否在新手引导完成之后销毁不需要的panel降低drawcall?
流程:
0.关于适配问题:令指引点(有时旁边也需要显示指引点对应的说明文本)中的所有对象都居于一个称为AnchorObj的对象之下,并且它的大小与要点击的按钮或者可点击区域一样大小,然后这个AnchorObj对象在运行时用NGUI的锚点接口(好像是这个SetAnchor(0, 0, 0, 0),有点忘了)动态设置它与需要被引导点击的按钮关联
1.我们的新手弹窗的层次结构简化为
NewbiePopup(1)->Dlg(n) // 新手引导弹窗中包括多个对话窗口
NewbiePopup(1)->GuidePoint(n) //新手引导弹窗中包括多个指引点
然后在NewbiePopup C#脚本中是有两个字典的,使用新手步骤字符串作为key分别保存对话窗口和指引点对象,当然了,使用for循环进行单击事件的绑定。这两个字典还有租用:比如需要显示某个对话窗口或者指引点,在lua脚本中往C#层面传入步骤字符串,然后根据字符串名去索引对应的对象,控制其显示状态!
2.由于新手引导弹窗panel的depth在所有界面之上,且本身是带BoxCollider的,这个BoxCollider的区域是很大的,所以能拦截所有的点击事件;
每个需要被引导点击的按钮,其上是加了一个panel组件,然后在显示指引点之前会动态将其panel的depth设置得比新手弹窗大,借此可以得到高亮效果!然后在所有新手引导完成之后将对应指引点上的panel组件销毁掉!这样也能降低drawcall(一个panel是一个drawcall)
大致实现思路就是这样,然后具体的步骤,最好还是线性的一路引导下来,比如第50个步骤是引导领奖可以命名为"AwardStep50", 最好带序号且从小到大,然后相邻两个步骤之间有一定间距,比如下一个步骤可以取"Step100",这样如果之后往中间插入若干个步骤也好扩展!另外如果还有交叉或者“并行性”,则要想法设法实现成线性的!
1个月前做的了,一时兴起写的,就不贴具体的代码或者界面层次结构了!经过实际项目考验,如果有什么错误或者更好的想法可以互相交流一下!谢谢
NGUI 新手引导的更多相关文章
- NGUI的新手引导的实现
先声明一下,UNITY新手,如果说的有不对的地方,欢迎各位大神指正. 最近在项目需要实现新手引导,最基础的需求就是需要一个带黑色遮罩的引导UI,类似下图这种: 对,就是这么敷衍的UI,因为是我随手做的 ...
- Unity3d 用NGUI制作做新手引导的思路
一.先看下效果 Prefab结构 二.实现思路: 1.prefab上的Panel层级设置成较高 2.背景由5个UISprite拼接起来的,4个(L,R,U,D)当作遮罩,1个镂空(Hollow)当作点 ...
- NGUI利用深度测试实现新手引导遮罩
实现原理:实际上就是先利用渲染队列渲染,然后再利用ZTest,改变渲染的遮挡关系. PS:Depth Testing:深度测试,也叫深度缓冲.只有最靠近观察者的物体会被绘制.深度即Z,该值越小表示离观 ...
- UISprite(NGUI)扩展 图片镂空
NGUI 版本2.6.3 在做新手引导时,需要高亮特定UI元素,也就是加个黑色蒙板,然后在蒙版上显示这个UI元素,为了简单方便我扩展了下UISprite,来镂空指定空间. 分为2种,矩形和圆镂空,矩形 ...
- 【转】发布一个基于NGUI编写的UI框架
发布一个基于NGUI编写的UI框架 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面 ...
- 如何简单的实现新手引导之UGUI篇
一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存.那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于UGUI做的一个简单的引导! 怎么样,看着是那么回事 ...
- 关于Unity中NGUI的Tab商城、Scrollview和打字机效果的实现
Tab商城实例 UIToggle 和 UIToggledObjects+ Box Collider(实现商城功能必备) 1.创建两个个UI Sprite,Sprite1和Sprite2 2.给Spri ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- Unity3D新手引导开发手记
最近开始接手新手引导的开发,记录下这块相关的心得 首先客户端是Unity,在接手前,前面的同学已经初步完成了新手引导框架的搭建,这套框架比较简单,有优点也有缺点,稍后一一点评 我们的新手引导是由一个个 ...
随机推荐
- JavaScript能干什么?
真的是长见识了,JavaScript居然能做除了WEB界面外运行于任何平台的APP,而且可以做服务器端,还有天理和王法吗?JavaScript到底有多神奇,要不要重新上路,老程序员何去何从,自然要先网 ...
- CocoaPods安装记录
1. ruby版本过低的解决方法 查看ruby版本:$ruby -v 终端会输出你的ruby 版本信息 查看目前的所有ruby版本:$rvm list known 安装ruby版本:$rvm inst ...
- Spark Streaming源码解读之数据清理内幕彻底解密
本期内容 : Spark Streaming数据清理原理和现象 Spark Streaming数据清理代码解析 Spark Streaming一直在运行的,在计算的过程中会不断的产生RDD ,如每秒钟 ...
- CACTI表结构和数据被动获取
cacti我们也用了很久了,但是它的表结构一直都没有去关心过,得空抽了半个晚上的时间,把它的库表结构大概看了下,某些字段的含义跟大家分享下:cacti的数据都是存放在rrdtool中的,数据库存放的其 ...
- Docker指令集
FROM 语法:FROM <image>[:<tag>] 解释:设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile ...
- The source attachment does not contain the source for the file ActionSupport.class 错误
报错 Syntax error, insert ";" to complete FieldDeclaration 报错 The source attachment does ...
- 中文api接口
http://www.bejson.com/knownjson/webInterface/
- /proc/net/tcp中各项参数说明
/proc/net/tcp中的内容由tcp4_seq_show()函数打印,该函数中有三种打印形式,我们这里这只列出状态是TCP_SEQ_STATE_LISTENING或TCP_SEQ_STATE_E ...
- asp.net的JSONHelper 类
调用方法: ){ jsons = json.ToString();}else{ jsons = @"{success:false}";}return jsons; JS ...
- 1、Python环境安装部署
一.环境准备 1.下载Python安装包(至官方网站) https://www.python.org/downloads/ 建议下载安装最新版 2.设置"环境变量" "我 ...