一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存。那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于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. 适配器模式(Adpater Pattern)

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  2. 如何选择版本控制系统 ---为什么选择Git版本控制系统

    版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开 ...

  3. iOS storyBoard中tableViewCell传值方法

    一般在storyboard中传值通过identifier的值来控制segue的跳转和传值,但是,如果在tableView中,由于cell特别多,不可能创建n个identifier标识符,这里通过NSI ...

  4. WannaflyUnion每日一题

    ---恢复内容开始--- 1. http://www.spoj.com/problems/KAOS/ 题意:给定n个字符串,统计字符串(s1, s2)的对数,使得s1的字典序比s2的字典序要大,s1反 ...

  5. java加密解密研究6、MD算法家族

    一.简述 MD5算法是典型的消息摘要算法,其前身有MD2.MD3和MD4算法,它由MD4.MD3和MD2算法改进而来.不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生一个123位的信息摘 ...

  6. html或者php中 input框限制只能输入正整数,逻辑与和或运算

    有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: <input onkeyup="if ...

  7. 简单VR照片 使用陀螺仪、姿态角(Roll、Pitch、Yaw )、四元数

        最近在做一个类似VR照片的demo,跟全景图片也很像,只是VR照片与全景720度显示,我只做了180度.但我发现他们实现的原理有一丝相似,希望可以给一些想入行AR.VR的朋友一些提示吧.   ...

  8. Mapreduce在Yarn调用出错

    共享原因:虽然用一篇博文写问题感觉有点奢侈,但是搜索百度,相关文章太少了,苦苦探寻日志才找到解决方案. 遇到问题:mapreduce程序一直迟迟没有结果. [QC] INFO [main] org.a ...

  9. Python中lambda用法

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  10. python基础操作_集合_三元运算

    #使用操作文件的时候,可以使用with函数#with open('E:\info.txt','a+') as fr#fr这个值可以是任意值# :#for line in fr:'''with open ...