admin 管理员组文章数量: 1086019
2024年4月18日发(作者:js判断数组是否有重复数据)
Unity3D新手引导开发手记
最近开始接手新手引导的开发,记录下这块相关的心得首先客户端是Unity,在接手
前,前面的同学已经初步完成了新手引导框架的搭建,这套框架比较简单,有优点也有缺
点,稍后一一点评我们的新手引导是由一个个强引导组成的,每个强引导都有一系列的步
骤,这套框架实现的功能就是:1.组织一个强引导(任务)所需的步骤,并可以一步一步
前进2.实现蒙版,遮罩以及高亮引导区第一个功能比较简单,首先需要有一个新手引导管
理器来管理每一个步骤,然后启动第一个步骤,只需要在每一次点击的事件处理中,通知
新手引导管理器,结束当前步骤,启动下一个步骤第二个功能相对麻烦一点,首先每一个
步骤可能都会有一个高亮区域,我们需要在不改动原有代码的基础上,实现这个高亮,首
先我们增加一个Guide摄像机,这个摄像机的优先级是最高的,他只照射Guide这个层的
东西,而这个层的最底部,有一个黑色的蒙版,在步骤开始执行时,我们只需要将要高亮
的对象,设置为该层的对象,即可高亮显示,并且蒙版添加一个BoxCollider,来防止玩
家点击到蒙版以下的按钮。在该新手引导步骤结束的时候,再将引导区设置回原来的层。
view sourceprint?01.//找到该物件并设置其层e void SetObjectLayer(int
layer, bool isStart)03.{ (highLightObj != null)05.{
(isStart)07.{ghtObjLayer = ;09.}10.
er(highLightObj, layer);12.}13.}每一个强引导都是一个
Prefab,里面记录了每一步的引导区域,在运行状态下,找到引导区域,拖给Prefab的
脚本,然后脚本找到该区域的完整路径,拖完每一步的引导区域后,随即保存这个Prefab,
这样我们就可以根据路径来找到要高亮的引导区了上面的引导区拖拽是非常适合策划人员
来设计新手引导的,而动态改变引导区所在的层,来实现高亮和屏蔽其他按钮,也是比较
巧妙的,但是这里关于步骤完成相关的逻辑,耦合性是非常大的,我们来看一下这里是如
何实现下一步的前人留下的Demo中,是在每一个步骤对应高亮区域的按钮点击回调中,
添加一行代码,来通知新手引导管理器步骤完成,也就是说,在实现过程中,每一个需要
点击引导区的步骤,都需要添加这么一行代码,工作量大,而且可维护性太差另外,当发
生界面跳转的时候,也需要特殊处理,因为需要等新的界面加载完成,并显示才能执行下
一个步骤,所以Demo在界面完全显示的时候,来通知新手引导管理器,而每个界面加载
完成的标准又不统一,有些需要等某个特效播放完毕,才会显示,如果对相应的逻辑不是
很熟悉,这块地方非常容易出BUG【改进】在这里特别针对上面两个问题做出如下改进,
使其无需在原先的代码添加额外的代码来通知步骤完成但凡有高亮引导区的,都是可以点
击的,那么一定有BoxCollider,在我获取这个对象进行设置层级的时候,顺便找到这块
引导区域的BoxCollider,一般只会有一个,因为引导的每一步都是明确的,找到这个
BoxCollider之后,为他的点击委托添加一个委托,就是完成步骤的委托,然后在步骤结
束的时候,去除这个委托,这样就无需在每一个点击事件处,强制添加完成下一步的代码,
而是在点击事件中,顺带执行我们的委托(原事件处理委托+新手引导步骤结束委托),这
样既不需要添加额外的代码,破坏封装,整体的流程也非常清晰对于第二个问题,关键是
因为在界面未显示完全的时候,我们无法获得相应的高亮区域,这里使用逆向思维,我不
等你加载完之后通知我,我主动去扫描你,当我们开始步骤的时候,如果有引导区域先扫
描引导区域,启用一个协同,每0.2秒主动查找该引导区域,当界面完全显示出来的时候,
一定可以获得引导区域,也不需要在对应的界面加载完成,显示之后写额外的代码来通知
新手引导模块这边了通过上面两个改进,完全解决了新手引导和原有代码逻辑的耦合,将
新手引导相关的功能全部内聚在新手引导模块中实现了【其他改进】一个是使用消息机制
来替代单例,原有的新手引导管理器是一个单例,但当你完成新手引导之后,就不再需要
它了,所以使用消息机制来推动新手引导管理器,当新手引导完成之后,消息照常发出,
只是处理者不见了根据服务器下发的消息动态创建,只有当我需要完成新手引导时,才创
建新手引导管理器,并初始化新手引导文字提示和点击屏幕继续,有N种文字提示样式,
我们将其实现为一个Prefab,并根据配表显示具体的样式,内容,以及点击屏幕后的处理
【和服务器联调】在新手引导这块,服务器只做简单的判断,只要不是明显的错误,我们
选择信任前端,并做好数据的存储以及下发工作在游戏的前端,我们需要做好异常处理,
以及强制引导流程,当强引导一开始,就要强制执行到结束我们游戏的引导是这样的,例
如去商城购买物品这样的一个引导,都是正常一步一步走的,当走到购买完成的步骤,即
通知服务器,完成了这个引导,那么会碰到三种异常,当我们走到一半的时候断掉,当我
们购买完成,未来得及通知服务器时断线,当我们通知了服务器之后断线,有不一样的处
理第一种,未购买掉线,则重连后让玩家强制重新开始该引导第二种,购买后未通知掉线,
则强制执行该引导,但开始执行时,做异常检测,例如检测是否存在任务物品,如果是则
直接完成任务第三种,购买通知后掉线,则直接让玩家完成该新手引导
版权声明:本文标题:Unity3D新手引导开发手记 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713387994a632110.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论