(转)Unity3D新手引导开发手记

转自:http://www.cnblogs.com/ybgame/p/3844315.htmlhtml

最近开始接手新手引导的开发,记录下这块相关的心得前端

首先客户端是Unity,在接手前,前面的同窗已经初步完成了新手引导框架的搭建,这套框架比较简单,有优势也有缺点,稍后一一点评服务器

clipboard

咱们的新手引导是由一个个强引导组成的,每一个强引导都有一系列的步骤,这套框架实现的功能就是:框架

1.组织一个强引导(任务)所需的步骤,并能够一步一步前进ide

2.实现蒙版,遮罩以及高亮引导区ui

第一个功能比较简单,首先须要有一个新手引导管理器来管理每个步骤,而后启动第一个步骤,只须要在每一次点击的事件处理中,通知新手引导管理器,结束当前步骤,启动下一个步骤spa

第二个功能相对麻烦一点,首先每个步骤可能都会有一个高亮区域,咱们须要在不改动原有代码的基础上,实现这个高亮,首先咱们增长一个Guide摄像机,这个摄像机的优先级是最高的,他只照射Guide这个层的东西,而这个层的最底部,有一个黑色的蒙版,在步骤开始执行时,咱们只须要将要高亮的对象,设置为该层的对象,便可高亮显示,而且蒙版添加一个BoxCollider,来防止玩家点击到蒙版如下的按钮。在该新手引导步骤结束的时候,再将引导区设置回原来的层。设计

clipboard[1]

复制代码
//找到该物件并设置其层
    private void SetObjectLayer(int layer, bool isStart)
    {
        if (highLightObj != null)
        {
            if (isStart)
            {
                highLightObjLayer = highLightObj.layer;
            }

            CommonTools.SetLayer(highLightObj, layer);
        }
    }
复制代码

 

每个强引导都是一个Prefab,里面记录了每一步的引导区域,在运行状态下,找到引导区域,拖给Prefab的脚本,而后脚本找到该区域的完整路径,拖完每一步的引导区域后,随即保存这个Prefab,这样咱们就能够根据路径来找到要高亮的引导区了code

clipboard[2]

上面的引导区拖拽是很是适合策划人员来设计新手引导的,而动态改变引导区所在的层,来实现高亮和屏蔽其余按钮,也是比较巧妙的,可是这里关于步骤完成相关的逻辑,耦合性是很是大的,咱们来看一下这里是如何实现下一步的htm

前人留下的Demo中,是在每个步骤对应高亮区域的按钮点击回调中,添加一行代码,来通知新手引导管理器步骤完成,也就是说,在实现过程当中,每个须要点击引导区的步骤,都须要添加这么一行代码,工做量大,并且可维护性太差

另外,当发生界面跳转的时候,也须要特殊处理,由于须要等新的界面加载完成,并显示才能执行下一个步骤,因此Demo在界面彻底显示的时候,来通知新手引导管理器,而每一个界面加载完成的标准又不统一,有些须要等某个特效播放完毕,才会显示,若是对相应的逻辑不是很熟悉,这块地方很是容易出BUG

 

【改进】

在这里特别针对上面两个问题作出以下改进,使其无需在原先的代码添加额外的代码来通知步骤完成

但凡是有高亮引导区的,都是能够点击的,那么必定有BoxCollider,在我获取这个对象进行设置层级的时候,顺便找到这块引导区域的BoxCollider,通常只会有一个,由于引导的每一步都是明确的,找到这个BoxCollider以后,为他的点击委托添加一个委托,就是完成步骤的委托,而后在步骤结束的时候,去除这个委托,这样就无需在每个点击事件处,强制添加完成下一步的代码,而是在点击事件中,顺带执行咱们的委托(原事件处理委托+新手引导步骤结束委托),这样既不须要添加额外的代码,破坏封装,总体的流程也很是清晰

对于第二个问题,关键是由于在界面未显示彻底的时候,咱们没法得到相应的高亮区域,这里使用逆向思惟,我不等你加载完以后通知我,我主动去扫描你,当咱们开始步骤的时候,若是有引导区域先扫描引导区域,启用一个协同,每0.2秒主动查找该引导区域,当界面彻底显示出来的时候,必定能够得到引导区域,也不须要在对应的界面加载完成,显示以后写额外的代码来通知新手引导模块这边了

经过上面两个改进,彻底解决了新手引导和原有代码逻辑的耦合,将新手引导相关的功能所有内聚在新手引导模块中实现了

 

【其余改进】

一个是使用消息机制来替代单例,原有的新手引导管理器是一个单例,但当你完成新手引导以后,就再也不须要它了,因此使用消息机制来推进新手引导管理器,当新手引导完成以后,消息照常发出,只是处理者不见了

根据服务器下发的消息动态建立,只有当我须要完成新手引导时,才建立新手引导管理器,并初始化新手引导

文字提示和点击屏幕继续,有N种文字提示样式,咱们将其实现为一个Prefab,并根据配表显示具体的样式,内容,以及点击屏幕后的处理

 

【和服务器联调】

在新手引导这块,服务器只作简单的判断,只要不是明显的错误,咱们选择信任前端,并作好数据的存储以及下发工做

在游戏的前端,咱们须要作好异常处理,以及强制引导流程,当强引导一开始,就要强制执行到结束

咱们游戏的引导是这样的,例如去商城购买物品这样的一个引导,都是正常一步一步走的,当走到购买完成的步骤,即通知服务器,完成了这个引导,那么会碰到三种异常,当咱们走到一半的时候断掉,当咱们购买完成,将来得及通知服务器时断线,当咱们通知了服务器以后断线,有不同的处理

第一种,未购买掉线,则重连后让玩家强制从新开始该引导

第二种,购买后未通知掉线,则强制执行该引导,但开始执行时,作异常检测,例如检测是否存在任务物品,若是是则直接完成任务

第三种,购买通知后掉线,则直接让玩家完成该新手引导

相关文章
相关标签/搜索