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

怎么样,看着是那么回事吧?看起来确实有点丑,如果给按钮边缘加上缩放或者流光特效,那么逼格瞬间就上去了,可惜,没找到资源。最重要的是实现起来灰常简单,就一个函数搞定。

1,如何实现引导:

  1,首先创建一个Mask遮罩,保证任意地方接受不到点击,适当的调整下Alpha。

2,将要点击的按钮高亮,保证引导按钮可以响应到点击事件。

  3,引导类型判断:如果是强制引导,没办法,那就老老实实的点高亮的引导按钮吧!如果是非强制引导,触发引导事件后开始计时,如果计时超过5秒自动解除引导。

  4,引导回掉处理,如果该步引导是本引导组的最后一步,那么回掉事件处理正常游戏逻辑。

  5,引导存档。前天我们游戏在测试时发现,玩家在85级开启交易行功能了,引导完成后下线再上线该引导又来了一边,这是非常讨厌的,很有可能因为这个导致玩家流失。所     以存档是必不可少的,无论是单机还是网游。

2,引导如何流程化:

  在我们这个游戏中引导我们走的是配表,程序做好引导机制,策划直接配置Excel表格即可。引导按照功能划分,也就有了所谓的引导组。一个功能内部原子化细分这样每个功能有多少步引导就非常详细了。这里就体现出了所谓的软件的工艺流程!

3,引导如何自动化:

  自动引导这个到底有没有必要呢?当一个游戏的功能和复杂度极高时,这个是十分必要的。就拿我们游戏来说吧,翅膀功能200级开启,翅膀强化遇到一个bug,用GM命令setlevel 200,好了等级到了,1-200级的引导要一个一个去点开,简直是要命啊!所以引导的自动化是十分必要的,自动完成引导节省了很多时间。如何实现自动化引导,那么引导组加上引导步骤id使用强制引导的方式很简单就实现了!

4,具体实现

  这里使用的是Canvas + Graphic Raycaster的方式。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System; public class LoginGuid : MonoBehaviour
{
public GameObject prb_mask;
public GameObject btn_menue1;
public GameObject btn_menue2;
private GameObject mask; public LoginPanelView loginPanel;
public static Action GuidCallback; // Use this for initialization
void Start()
{
GuidCallback += GuidFinsih; EventTriggerListener.GetListener(btn_menue1).onPointerClick += go =>
{
if (loginPanel != null)
{
loginPanel.gameObject.SetActive(true);
GuidStep2();
}
else
Debug.LogError("panel_login is not found!");
}; EventTriggerListener.GetListener(btn_menue2).onPointerClick += go =>
{
GuidStep3();
}; GuidStep1();
} /// <summary>
/// 第一步引导
/// </summary>
void GuidStep1()
{
Debug.Log("<color=red>开始第一步引导</color>"); //创建遮罩Mask
mask = Instantiate(prb_mask) as GameObject;
mask.transform.parent = this.gameObject.transform;
mask.transform.localPosition = Vector3.zero;
mask.transform.localScale = Vector3.one;
mask.transform.SetAsLastSibling(); btn_menue1.AddComponent<Canvas>().overrideSorting = true;
SetMaskAndBtnHiglight(null, btn_menue1);
} void GuidStep2()
{
Debug.Log("第二步引导");
SetMaskAndBtnHiglight(btn_menue1, btn_menue2);
} void GuidStep3()
{
Debug.Log("第三步引导");
SetMaskAndBtnHiglight(btn_menue2, loginPanel.btn_login);
} /// <summary>
/// 还原上一个引导
/// 设置下一个引导
/// </summary>
/// <param name="lastBtn">上一个引导按钮</param>
/// <param name="nextStep">下一个引导按钮</param>
void SetMaskAndBtnHiglight(GameObject lastStep, GameObject nextStep)
{
if (lastStep)
{
lastStep.GetComponent<Canvas>().overrideSorting = false;
Destroy(lastStep.GetComponent<GraphicRaycaster>());
}
Canvas nextCanvas = nextStep.GetComponent<Canvas>();
if (nextCanvas)
nextCanvas.overrideSorting = true;
else
nextStep.AddComponent<Canvas>().overrideSorting = true;
nextStep.AddComponent<GraphicRaycaster>();
} void GuidFinsih()
{
Debug.Log("<color=red>引导完成</color>");
Destroy(mask);
}
}

一个简单而实用的引导就实现了,下一篇研究下NGUI的引导实现!如有问题或者建议,欢迎交流!

项目地址:https://git.oschina.net/wuzhang/uguinewguid.git

如何简单的实现新手引导之UGUI篇的更多相关文章

  1. 基于PHP——简单的WSDL的创建(WSDL篇)

    1.建立WSDL文件      建立WSDL的工具很多,eclipse.zendstudio.vs都可以,我个人建议自己写,熟悉结构,另外自动工具对xml schame类型支持在类型中可能会报错. 下 ...

  2. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

    转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/07/12/sc03-feign/ 本文出自方志朋的博客 最新Finchley版本请访问: ...

  3. 写简单游戏,学编程语言-python篇:大鱼吃小鱼

    很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码.这边主要还是以学习编程语言和学习编程思路为重点记录一下吧.最近时间有点吃紧,只能匆忙记录一下.用pygame做的大鱼吃小鱼的游戏截图如下: ...

  4. 写简单游戏,学编程语言-python篇:传说哥大战剧毒术士

    上篇写的动画示例其实算不上一个游戏,顶多算是利用pygame进行的图形操作,今天着手实现一个小游戏:传说哥大战剧毒术士.名字很玄乎,其实就是最简单的一个射击游戏.好了废话不多说,先上截图吧: 一.初始 ...

  5. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)

    转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...

  6. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f3-feign/ 本文出自方志朋的博客 上一篇文章,讲述了如 ...

  7. 【C/C++学院】0724-堆栈简单介绍/静态区/内存完毕篇/多线程

    [送给在路上的程序猿] 对于一个开发人员而言,可以胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中.由此简化系统的开发.是其架构生涯的第一步. ...

  8. 原来rollup这么简单之 rollup.generate + rollup.write篇

    大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 计划 rollup系列打算 ...

  9. v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码

    本篇关键词:池头.池体.节头.节块 内存管理相关篇为: v31.02 鸿蒙内核源码分析(内存规则) | 内存管理到底在管什么 v32.04 鸿蒙内核源码分析(物理内存) | 真实的可不一定精彩 v33 ...

随机推荐

  1. MACD指标

    MACD(Moving Average Convergence)平滑异同移动平均线 MACD指标有双移动平均线发展而来,由快速移动平均线减去慢速移动平均线,当MACD从负数转向证书,是买入信号,从正数 ...

  2. 受够了if (ModelState.IsValid)?ActionFitlter也是一路的坑啊!

    这篇博客真是干货,干得估计还有点“磕牙”,所以还提供视频和代码.但基础稍弱的同学,怕还是得自行补充一些基础知识——就一篇文章,确实没办法面面俱到. 视频和代码下载:Demo - 百度云盘 · 一起帮 ...

  3. MyBatis之级联——一对一关系

    在学数据库概论的时候会听到这么几个词:数据库的关系分为一对一.一对多.多对多.对于在学校里学的知识已经忘得差不多了,在这里简单的提一下数据库的关系.此篇是介绍MyBatis是如何实现数据库中一对一关系 ...

  4. PHP导出生成CSV文件

    composer 用起来是非常方便的 所以我是依赖composer来做的包管理 1.先安装composer 自行百度一下composer安装以及使用 2.用composer下载安装office包即可 ...

  5. carryLess开发日记_2017-05-18

    1.接上一篇的form表单的ajax问题,上一篇中的form表单的ajax提交不能上传文件,所以采用了formData的方式上传 1)前段代码如下: <form action="&qu ...

  6. Venn Diagram Comparison of Boruta, FSelectorRcpp and GLMnet Algorithms

    Feature selection is a process of extracting valuable features that have significant influence ondep ...

  7. web前端面试集锦(自己搜集的,如有错误请不吝赐教)

    css 1 浏览器兼容性 CSS hack(针对IE6-,IE7,IE8,IE9以及其他浏览器) ‘ * ’ : 所有的IE浏览器都能识别 说明:在标准模式中 “-″减号是IE6专有的hack “\9 ...

  8. python学习第三个坑

    ##########################python 第三章 ################################这一章呢,主要是文件的操作,还有涉及到函数的一部分. PS:整 ...

  9. css3 linear-gradient渐变效果及兼容性处理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. sql还原(.sql文件还原)

    第一步: 把还原文件直接拖到SQL Server 2012(或者其他版本)里面,这里以MyDB.sql为例