如何简单的实现新手引导之UGUI篇
一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存。那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于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篇的更多相关文章
- 基于PHP——简单的WSDL的创建(WSDL篇)
1.建立WSDL文件 建立WSDL的工具很多,eclipse.zendstudio.vs都可以,我个人建议自己写,熟悉结构,另外自动工具对xml schame类型支持在类型中可能会报错. 下 ...
- 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)
转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/07/12/sc03-feign/ 本文出自方志朋的博客 最新Finchley版本请访问: ...
- 写简单游戏,学编程语言-python篇:大鱼吃小鱼
很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码.这边主要还是以学习编程语言和学习编程思路为重点记录一下吧.最近时间有点吃紧,只能匆忙记录一下.用pygame做的大鱼吃小鱼的游戏截图如下: ...
- 写简单游戏,学编程语言-python篇:传说哥大战剧毒术士
上篇写的动画示例其实算不上一个游戏,顶多算是利用pygame进行的图形操作,今天着手实现一个小游戏:传说哥大战剧毒术士.名字很玄乎,其实就是最简单的一个射击游戏.好了废话不多说,先上截图吧: 一.初始 ...
- 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...
- 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f3-feign/ 本文出自方志朋的博客 上一篇文章,讲述了如 ...
- 【C/C++学院】0724-堆栈简单介绍/静态区/内存完毕篇/多线程
[送给在路上的程序猿] 对于一个开发人员而言,可以胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中.由此简化系统的开发.是其架构生涯的第一步. ...
- 原来rollup这么简单之 rollup.generate + rollup.write篇
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 计划 rollup系列打算 ...
- v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码
本篇关键词:池头.池体.节头.节块 内存管理相关篇为: v31.02 鸿蒙内核源码分析(内存规则) | 内存管理到底在管什么 v32.04 鸿蒙内核源码分析(物理内存) | 真实的可不一定精彩 v33 ...
随机推荐
- SQL Server中INNER JOIN与子查询IN的性能测试
这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...
- 模板不存在:./xx 错误位置 FILE: LINE:110 (thinkphp上传至服务器后模板无法解析原因)
thinkphp上传至服务器后模板无法解析原因 前几日做好的响应式静态页面上传至虚拟空间,打开网址地址出现: 模板不存在:./App/Admin/View/Config/customerService ...
- bash shell中测试命令
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径.如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 .这样if-than语句就与其他编程 ...
- iOS安全攻防之反编译
Class-dump 进行反编译: 之前做代码混淆, 首先了解了下反编译,使用入门级的反编译 class-dump.下载地址:最新版Class-dump. 首先需要注意的是,class-dump的作用 ...
- 基于nodejs 的多页面爬虫
前言 前端时间再回顾了一下node.js,于是顺势做了一个爬虫来加深自己对node的理解. 主要用的到是request,cheerio,async三个模块 request 用于请求地址和快速下载图片流 ...
- intersect for multiple vectors in R
Say you have a <- c(1,3,5,7,9) b <- c(3,6,8,9,10) c <- c(2,3,4,5,7,9) A straightforward way ...
- MySQL的复制
1.复制概述1.1.复制解决的问题数据复制技术有以下一些特点:(1) 数据分布(2) 负载平衡(load balancing)(3) 备份(4) 高可用性(high avail ...
- sql定时自动备份(定时作业)
第一步: 右键启动"SQL Server 代理"
- c++概括
c++到底是什么样的语言 在过去的几十年,计算机技术的发展令人吃惊,当前的笔记本电脑的计算速度和存储信息的能力超过了20世纪60年代的大型机.20世纪七十年代,C和Pascal语言引领人们进入结构化编 ...
- [Leetcode] Binary tree Zigzag level order traversal二叉树Z形层次遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...