现在我们的游戏已到了开发后期,这个时候需要做新手引导这一块(恶心的新手引导,真想说游戏行业究竟哪个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 新手引导的更多相关文章

  1. NGUI的新手引导的实现

    先声明一下,UNITY新手,如果说的有不对的地方,欢迎各位大神指正. 最近在项目需要实现新手引导,最基础的需求就是需要一个带黑色遮罩的引导UI,类似下图这种: 对,就是这么敷衍的UI,因为是我随手做的 ...

  2. Unity3d 用NGUI制作做新手引导的思路

    一.先看下效果 Prefab结构 二.实现思路: 1.prefab上的Panel层级设置成较高 2.背景由5个UISprite拼接起来的,4个(L,R,U,D)当作遮罩,1个镂空(Hollow)当作点 ...

  3. NGUI利用深度测试实现新手引导遮罩

    实现原理:实际上就是先利用渲染队列渲染,然后再利用ZTest,改变渲染的遮挡关系. PS:Depth Testing:深度测试,也叫深度缓冲.只有最靠近观察者的物体会被绘制.深度即Z,该值越小表示离观 ...

  4. UISprite(NGUI)扩展 图片镂空

    NGUI 版本2.6.3 在做新手引导时,需要高亮特定UI元素,也就是加个黑色蒙板,然后在蒙版上显示这个UI元素,为了简单方便我扩展了下UISprite,来镂空指定空间. 分为2种,矩形和圆镂空,矩形 ...

  5. 【转】发布一个基于NGUI编写的UI框架

    发布一个基于NGUI编写的UI框架 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面 ...

  6. 如何简单的实现新手引导之UGUI篇

    一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存.那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于UGUI做的一个简单的引导! 怎么样,看着是那么回事 ...

  7. 关于Unity中NGUI的Tab商城、Scrollview和打字机效果的实现

    Tab商城实例 UIToggle 和 UIToggledObjects+ Box Collider(实现商城功能必备) 1.创建两个个UI Sprite,Sprite1和Sprite2 2.给Spri ...

  8. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

  9. Unity3D新手引导开发手记

    最近开始接手新手引导的开发,记录下这块相关的心得 首先客户端是Unity,在接手前,前面的同学已经初步完成了新手引导框架的搭建,这套框架比较简单,有优点也有缺点,稍后一一点评 我们的新手引导是由一个个 ...

随机推荐

  1. java时间类简单总结

    java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个):  日期格式为:年月日时分秒(不包含毫秒部分) ...

  2. Asp.net core 通过Models 生成数据库的方法

        其实Getting Started当中有着详细的说明,https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html ...

  3. 用SQL语句获得一个存储过程返回的表

    1. 定义一个表变量 declare @table table(ReportType nvarchar(30),ReportPath nvarchar(200),ParaCnt int,DataAre ...

  4. Hash函数及其应用

    本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数 ...

  5. PAT 02-线性结构1 两个有序链表序列的合并 (15分)

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef ...

  6. 9、SQL Server 操作数据

    插入数据 使用Insert Into 插入 if(exists(select * from sys.databases where name = 'webDB')) drop database web ...

  7. ExtJs6.0.0随笔

    环境:extJs6.0.0GPL,对应SenchaCmd-6.0.2-windows-64bit(注意版本不能太高). 步骤: 1.安装senchaCmd 2.运行生成demo: http://doc ...

  8. KBMMW 4.92.00 发布

    We are happy to announce the release of kbmMW Professional and Enterprise Edition. Yet again kbmMW c ...

  9. DELPHI 读取csv 格式文本文件

    procedure TForm1.btn1Click(Sender: TObject); var sFile,sLine: TStrings; r,c:Integer; begin sFile := ...

  10. 企业级监控平台开发之nagios二次开发(七)

    背景: A公司里有很多服务器(>3000台),每台服务器都有不同的用途,如DB Server.WEB Server.ESXI等,每个组使用其中的一批,每个组可能有多个服务器管理员.现在问题出来了 ...