老虎机制作流程其实很简单,首先我们需要了解NGUI的各种组件,对NGUI有一定了解的人一定清楚NGUI有一个组件UIWrap,通过这个组件可以将在ScrollView中的滚动项循环,那么我们的老虎机就是基于NGUI这种好的基础上进行制作的。
我们首先理清思路,制作老虎机必须解决的两个问题:
1.如何让老虎机的图片恰好转到准确的位置:
我们见到的老虎机都是正好是一张完整的图片出现在老虎机的显示区域,不可能两张图片各占一半的时候就停止了,那么我们就需要解决这个问题。
2.如何记录当前转到的图片:
我们每转一次老虎机,停止时停止的图片如何获取到,或者图片对应的ID(序号)如何获取到,这对于老虎机的实用性很重要。我们制作老虎机如果不能记录当前转到哪个图片是无法判断老虎机每一列的图片是否一致。
解决这两个问题之前,首先声明一下,我们使用的是UIScrollView组件中的MoveRelative方法,这个方法可以让滑动列表中的项进行滑动,我们的滑动列表制作就调用了这个方法,所以也感谢NGUI开源出来并且公开出了这个方法。
综合以上两个问题,我们有了一种思路,就是将老虎机的图片大小以及老虎机转动显示的栏的大小进行准确设置,我们通过准确的距离判断,来进行图片项的准确停止,那么我们如何判断当前停下的是哪个图片就是我们该考虑的问题了,我曾经想过通过射线碰撞检测图片名来获取图片对应的实体对象进行后续操作,但是后来想到老虎机本质上就是几个随机数,所以我们不妨先随机出和老虎机列数相等数量的随机数,然后每一列都有一个随机数目标,当转到这个数值时,就停止。那么要做到这点,我们就必须给每个图片对应的序列号,当我们随机到某个图片的序列号以后,我们就可以根据序列号来转动老虎机,让老虎机准确的停到对应的序列号。
思路有了,具体就是实现了。我们每一列的ScrollView都会挂载一个脚本,用来转动操作和计数。(我的图片长宽都是100)
因为我们的老虎机是逐列停止,所以会有isReturnTo这个属性
//**********************************
//用户:#USERNAME#     QQ:798757741
//时间:#DATATIME#     TEL:15235637384
//**********************************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScrollColumn : MonoBehaviour
{
    //每次随机到的数
    public int scrollIndex;
    //是否在移动
    public bool isMove = true;
    //是否轮流到了本滑动列表停止了
    public bool isReturnTo = false;
    UIScrollView scroll;
    // Use this for initialization
    void Start()
    {
        scroll = GetComponent<UIScrollView>();
    }
   
   //当前图片索引
    private int m_CurrSprIndex=0;
    //已经走过图片的数量
    private int m_MoveNum = 0;
    //已经走过的距离
    private int m_MoveDis = 0;
    // Update is called once per frame
    void Update()
    {
        if (isMove)
        {
            scroll.MoveRelative(new Vector3(0, 10, 0));
            m_MoveDis += 10;
            if (m_MoveDis % 100 == 0)
            {
                m_MoveNum++;
                m_CurrSprIndex = m_MoveNum % 6;
            }
            if (MechineCtrl.isBeginStop&&isReturnTo)
            {
                //如果当前图标
                if (m_CurrSprIndex == scrollIndex)
                {
                    scroll.MoveRelative(new Vector3(0,-(m_MoveDis%100),0));
                    m_MoveDis -= m_MoveDis % 100;
                    isMove = false;
                    isReturnTo = false;
                }
            }
        }
       
    }
}
然后就是在UIROOT上挂载控制全局的脚本
//**********************************
//用户:#USERNAME#     QQ:798757741
//时间:#DATATIME#     TEL:15235637384
//**********************************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MechineCtrl : MonoBehaviour
{
    /// <summary>
    /// 滑动列表数组
    /// </summary>
    [SerializeField]
    private UIScrollView[] m_ScrollArr;
    public static bool isBeginStop = false;
    //避免多次操作造成混乱
    public static bool isBusy = false;
    void Start()
    {
        Init();
    }
    /// <summary>
    /// 初始化随机数
    /// </summary>
    private void Init()
    {
        for (int i = 0; i < m_ScrollArr.Length; i++)
        {
            m_ScrollArr[i].transform.GetComponent<ScrollColumn>().scrollIndex = Random.Range(0, 6);
            Debug.Log(m_ScrollArr[i].transform.GetComponent<ScrollColumn>().scrollIndex);
        }
    }
   //轮流停止
    private IEnumerator ReturnToStop()
    {
        isBusy = true;
        for (int i = 0; i < m_ScrollArr.Length; i++)
        {
            yield return new WaitForSeconds(0.2f);
            m_ScrollArr[i].transform.GetComponent<ScrollColumn>().isReturnTo = true;
        }
        isBusy = false;
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)&&!isBusy)
        {
            Debug.Log("点击左键");
            isBeginStop = true;
            StartCoroutine(ReturnToStop());
        }
        if (Input.GetMouseButtonDown(1)&&!isBusy)
        {
            isBeginStop = false;
            for (int i = 0; i < m_ScrollArr.Length; i++)
            {
                m_ScrollArr[i].transform.GetComponent<ScrollColumn>().isMove = true;
            }
            Init();
        }
    }
}
这样,一个简易的老虎机就做好了,我们可以将随机到的数字进行一系列操作,比如随机到的数字都相等,就可以获得某些奖励,或者加一些shader特效之类的等等都可以,本文主要介绍一下主要逻辑,如有问题欢迎讨论!

使用NGUI制作简易的老虎机相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. 利用Unity3D制作简易2D计算器

    利用Unity3D制作简易2D计算器 标签(空格分隔): uiniy3D 1. 操作流程 在unity3DD中创建一个新项目 注意选择是2D的(因为默认3D) 在Assets框右键新建C#脚本 在新建 ...

  3. html range关联文本框,HTML5gt;meter标签与input(type=range)标签结合制作简易范围指示器...

    HTML5>meter标签与input(type=range)标签结合制作简易范围指示器 发布时间:2020-03-26 15:41 很多时候我们能看到这样的表示范围的优化工具,能给人带来很好的 ...

  4. SwiftUI优秀文章经典案例制作简易的新闻列表Demo

    SwiftUI制作简易的新闻列表Demo import SwiftUIstruct HomeView: View {@StateObject var newsViewModelVM = NewsVie ...

  5. Unity3D4.* NGUI制作动态字库

    新建一个工程,这个工程必须没有中文路径,否则会不识别字体!!! 首先导入NGUI插件,这里我用的是NGUI 3.0.2版本的. 在Assets 下创建一个文件夹,用来存放接下来的工作文件 . 这里随便 ...

  6. python注册系统_Python制作简易注册登录系统

    Python制作简易注册登录系统 这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python 是一种面向对象.解释型计算机程 ...

  7. python random.random 缩短小数点儿后位数_Python random模块制作简易的四位数验证码...

    先给大家介绍下python中random模块 random与numpy.random对比: 1.random.random():生成[0,1)之间的随机浮点数: numpy.random.random ...

  8. Luat Inside | 致敬经典,使用Air724UG制作简易贪吃蛇

    作者简介: 打盹的消防车--活跃于Luat社群的新生代全能开发者,东北小伙儿爽朗幽默.好学敏思,更是实力行动派.幼年曾手握火红炽铁而后全然无恙,堪称魔幻经历:如今热衷于各类嵌入式软硬件研究,快意物联江 ...

  9. 用VC++6.0制作简易浏览器

    很好的一个VC++6.0制作简易浏览器,对初学者来说有很大的帮助,但是我在最后遇到点问题,如果有问题请连接http://blog.csdn.net/u013675958/article/details ...

最新文章

  1. 这7个实用又强大的软件,真的惊艳到我了!
  2. 项目使用mysql接收emoji表情
  3. matlab检验两个样本的,两样本独立T检验MATLAB代码
  4. 【Java并发系列04】线程锁synchronized和Lock和volatile和Condition
  5. python安装教程win8-python 2.7在win8.1上安装的方法
  6. NGUI Label Color Code
  7. bit byte B KB Kbps KBps ps
  8. Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群
  9. paper 35 :交叉验证(CrossValidation)方法思想
  10. 华为主题包hwt下载_华为主题 | 黑白人物
  11. tomcat上传文件,重新加载后删除以及在web.xml中配置全局路径
  12. 发际线对于一个人的颜值影响有多大?
  13. 1、varargout与nargout区别
  14. The essentiality for Close-Out The Project
  15. 轴承过盈量程序matlab,轴承matlab处置程序.doc
  16. 抖音数据统计_【数据】2018抖音大数据报告(完整版)
  17. 微信小程序实现图片虚化(滤镜)效果
  18. Cisco 实现路由防火墙 双机热备(项目记录)
  19. 郑州大学计算机考研944,2020年郑州大学944计算机技术专业基础综合考研复习资料...
  20. 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄

热门文章

  1. scikit-learn 中 OneHotEncoder 解析
  2. (附源码)计算机毕业设计SSM英语单词记忆系统
  3. 定时器中断实现数码管动态显示
  4. 从“智能”楼宇到“智慧”楼宇——ThingJS助力“智慧”升级
  5. asio指定网卡加入组播组
  6. Ubuntu解压缩zip,tar,tar.gz,tar.bz2 1
  7. 关于java时区转换夏令时问题及解决办法
  8. 机器学习实战2.1--决策树之求数据集的香农熵
  9. WinZip 6 for Mac 强大的压缩解压缩工具 | 正版序列号
  10. 工具管理(资源管理)