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,在接手前,前面的同学已经初步完成了新手引导框架的搭建,这套框架比较简单,有优点也有缺点,稍后一一点评 我们的新手引导是由一个个 ...
随机推荐
- jeecg 扩展封装查询条件 时间段查询
使用jeecg框架开发的小伙伴们知道,添加查询条件,通常是我们加一个配置(query="true")就可以将该字段设置为查询条件.简单方便.但是这样的配置查询条件仅适用于输入框输入 ...
- python中logging
1.root logger以及logger斧子关系 http://www.pythonclub.org/modules/logging #coding=utf-8 __author__ = 'n ...
- GCD、dispatch函数介绍
iOS多线程的方法有3种: NSThread NSOperation GCD(Grand Central Dispatch) 其中,由苹果所倡导的为多核的并行运算提出的解决方案:GCD能够访问线程池, ...
- TreeMap
TreeMap的put() ,remove() ,containsKey(), get() 全都尊重compareTo() 或者 compare() 是否返回0的结果 如果compareTo() 或者 ...
- JS实现无缝滚动
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- eclipse内嵌jetty(run-jetty-run插件) 配置jndi数据源
运行环境 java 6,eclipse juno,ssh(spring,hibernate,springmvc ) 1.离线安装 下载地址:http://pan.baidu.com/s/1qX67wO ...
- Android常用客户端测试工具
Emmagee GT iTest PowerTutor 网速限制 Root Explorer ApkEditor 陆续添加...
- Objective - C NSArray不可变数组和NSMutableArray可变数组
OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见 ...
- Parquet与ORC:高性能列式存储格式(收藏)
背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌 ...
- javascript验证香港身份证
var assert = require('assert'); describe('test', function() { it('coc', function() { var testCard01 ...