Unity简单抽奖效果实现

news2024/11/15 18:03:52

实现效果如下:

实现效果为:外部传入数值,正常显示 lhj抽取效果

用户可自定义行为:1,抽取的显示;2,抽取的最低时间

实现代码如下,可自行改写:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

/// <summary>
/// 老虎机
/// </summary>
public class SlotMachine : MonoBehaviour
{
    //private float startPosY;

    private int[] moveAdd = new int[3] { 0, 0, 0 };


    private bool[] playArray = new bool[3] { false, false, false };

    private int[] showArray = new int[3] { 0, 1, 2 };

    public float MinTime = 3f;
    private float minTime = 0f;

    private float moveFx = 0.2f;//移动系数,需要能被1整除:0.1;0.2;0.25;0.5
    private float moveLen;
    private int moveNum = 5;

    private Action callBackAc;    

    //public float UpdateSp = 0.05f;

    / <summary>
    / 传入类型
    / </summary>
    //public void Born()
    //{
     
    //    var _messT = transform.Find("1").GetChild(1);
    //    moveLen = _messT.GetComponent<RectTransform>().rect.height * moveFx;

    //    Debug.LogError(moveNum + "  " + moveLen + "   " + (1 / moveFx) + "   "/*+startPosY*/);

    //}

    public void ClickPlay(int _one, int _two, int _three,Action _callAc)
    {
        playArray[0] = true;
        playArray[1] = true;
        playArray[2] = true;
        showArray[0] = _one;
        showArray[1] = _two;
        showArray[2] = _three;
        minTime = MinTime + Time.time;
        callBackAc = null;
        callBackAc = _callAc;            
    }

    // Start is called before the first frame update
    void Start()
    {
        //Born();
        var _messT = transform.Find("1").GetChild(1);
        moveLen = _messT.GetComponent<RectTransform>().rect.height * moveFx;

    }

    //private float updateTime = 0f;

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A)) ClickPlay(1, 2, 2,delegate { Debug.Log("打印"); });

        for (var _i = 0; _i < 3; _i++)
        {
            if (playArray[_i])
            {
                string _name = "";
                bool _isUpdate = UpdateDown(_i, out _name);
                if (Time.time > minTime && _isUpdate && _name == showArray[_i].ToString())
                {
                    switch (_i)
                    {
                        case 0: playArray[_i] = false; break;
                        case 1: if (!playArray[0]) playArray[_i] = false; break;
                        case 2: if (!playArray[1] && playArray[_i]) { playArray[_i] = false;/* Debug.LogError("执行");*/ callBackAc?.Invoke(); } break;
                    }
                    //Debug.Log(_name + " ~~~~~~~  " + _i);
                }
            }
        }
    }


    /// <summary>
    /// 模拟不断下落的过程
    /// </summary>
    private bool UpdateDown(int _i, out string _imageName)
    {
        var _tran = transform.Find(_i.ToString());
        _imageName = "";

        var _down = moveLen * Vector3.down;
        foreach (Transform idx in _tran)
            idx.GetComponent<RectTransform>().localPosition += _down;

        moveAdd[_i] += 1;
        //Debug.Log(moveAdd[_i] + "  " + moveNum);

        var _isR = moveAdd[_i] == moveNum;
        if (_isR)
        {
            _tran.GetChild(_tran.childCount - 1).SetSiblingIndex(0);         
            _imageName = _tran.GetChild(2).name;
            //Debug.Log(_i + "   " + _imageName);
        }
        _tran.GetComponent<ContentSizeFitter>().enabled = _isR;
        _tran.GetComponent<VerticalLayoutGroup>().enabled = _isR;
        if (_isR) moveAdd[_i] = 0;
        return _isR;
    }


}

demo下载地址:简单实用的抽奖显示插件资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/823695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新 23 届计算机校招薪资汇总

24 届的秋招提前批已经开始了&#xff0c;比如米哈游、oppoe、tplink 等公司都已经录取开启提前批。 像腾讯、字节、阿里等一线大厂的话&#xff0c;根据往年的情况&#xff0c;估计是 7月下-8 月初。 所以今年参加秋招的同学&#xff0c;要抓紧复习了。 提前批通常就持续不到…

Minio 部署

minio 官网&#xff1a;https://www.minio.org.cn/ 部署文档&#xff1a;https://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html# 选择自己的部署环境&#xff1a; 我用的docker: docker pull qua…

命令模式——请求发送者与接收者解耦

1、简介 1.1、概述 在软件开发中&#xff0c;经常需要向某些对象发送请求&#xff08;调用其中的某个或某些方法&#xff09;&#xff0c;但是并不知道请求的接收者是谁&#xff0c;也不知道被请求的操作是哪个。此时&#xff0c;特别希望能够以一种松耦合的方式来设计软件&a…

LaTex的下载与安装超详细windows版

1.LaTex的下载 &#xff08;texlive下载TexStudio下载&#xff09; &#xff08;1&#xff09;texlive下载&#xff1a; 这里清华镜像下载 &#xff08;2&#xff09;TexStudio下载&#xff1a; 点这里下载镜像 可以根据不同的系统选择不同的版本 2 .LaTex的安装 &#…

1分钟解决github push/pull报错443

1.打开https://www.ipaddress.com/ 2.复制如图IP地址 3.文件夹打开C:\Windows\System32\drivers\etc&#xff0c;复制hosts文件&#xff0c;粘贴到桌面 4.在桌面用记事本打开复制过来的hosts 5.在末尾加上一行&#xff0c;IP写刚才复制的 6.复制桌面的hosts,粘贴回C:\Window…

web开发中的安全和防御入门——csp (content-security-policy内容安全策略)

偶然碰到iframe跨域加载被拒绝的问题&#xff0c;原因是父页面默认不允许加载跨域的子页面&#xff0c;也就是的content-security-policy中没有设置允许跨域加载。 简单地说&#xff0c;content-security-policy能限制页面允许和不允许加载的所有资源&#xff0c;常见的包括&a…

3DEXPERIENCE用户角色 | Structural Performance Engineer 结构性能工程师

- 3DEXPERIENCE 用户角色 - 快速、真实和准确的仿真 推动产品工程创新并促进协作 通过 Structural Performance Engineer&#xff0c;您可以在基于云的 3DEXPERIENCE 平台上执行结构静态、频率、扭曲、模态动态响应&#xff0c;以及零件和装配体结构热仿真。 亮点 与 SOLIDW…

统一观测|借助 Prometheus 监控 ClickHouse 数据库

引言 ClickHouse 作为用于联机分析(OLAP)的列式数据库管理系统(DBMS), 最核心的特点是极致压缩率和极速查询性能。同时&#xff0c;ClickHouse 支持 SQL 查询&#xff0c;在基于大宽表的聚合分析查询场景下展现出优异的性能。因此&#xff0c;获得了广泛的应用。本文旨在分享阿…

【Golang】基于录制,自动生成go test接口自动化用例

目录 背景 框架 ginkgo初始化 抓包&运行脚本 目录说明 ∮./business ∮./conf ∮./utils ∮./testcase testcase 用例目录结构规则 示例 实现思路 解析Har数据 定义结构体 解析到json 转换请求数据 转换请求 转换请求参数 写业务请求数据 写gotest测试…

K8s总结

K8s 是什么 Kubernetes是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的机制…

【从零开始学习JAVA | 第三十五篇】IO流综合练习

目录 前言&#xff1a; 1.拷贝文件&#xff08;含子文件&#xff09; 思路&#xff1a; 2.文件加密 思路&#xff1a; 3.修改文件中的数据&#xff1a; 思路&#xff1a; 总结&#xff1a; 前言&#xff1a; 在前面我们为大家介绍了FILE类和IO类。这篇文章我们来练习一…

SQL SERVER 中将数据表中的字段按分隔符分成多行多列

SQL SERVER 中将数据表中的字段按分隔符分成多行多列_sql按逗号拆分列为多行_帅气的苹果果的博客-CSDN博客 SELECTa.name,monitors SUBSTRING ( a.monitors, b.number, charindex( ,, a.monitors ,, b.number ) - b.number ) FROM( SELECT name, monitors FROM [dbo].[ssm_vi…

Packet Tracer - 连接有线和无线 LAN

Packet Tracer - 连接有线和无线 LAN 地址分配表 设备 接口 IP 地址 连接到 云 Eth6 N/A Fa0/0 Coax7 N/A Port0 电缆调制解调器 Port0 N/A Coax7 Port1 N/A 互联网 Router0 控制台端口 N/A RS232 Fa0/0 192.168.2.1/24 Eth6 Fa0/1 10.0.0.1/24 Fa…

安科瑞智能照明系统在医院智能建筑中应用的优势

摘要&#xff1a;现阶段&#xff0c;我国的社会经济的发展水平不断提高&#xff0c;为智能照明系统的发展带来了新的契机。文章主要介绍了几类智能照明系统&#xff0c;分析了其优点&#xff0c;并介绍了智能照明系统在医院建筑中的具体应用&#xff0c;具有一定的参考价值。 …

屏幕取色器Mac版_苹果屏幕取色工具_屏幕取色器工具

Sip for Mac 是Mac系统平台上的一款老牌的颜色拾取工具&#xff0c;是设计师和前端开发工作者必不可少的屏幕取色软件&#xff0c;你只需要用鼠标点一下即可轻松地对屏幕上的任何颜色进行采样和编码&#xff0c;并将颜色数据自动存到剪切板&#xff0c;方便随时粘贴出来。 Sip…

Linux|ubuntu下运行python

参考&#xff1a;ubuntu系统下切换python版本的方法 文章目录 python版本问题查看ubuntu下的所有python版本通过apt-get install可以安装不同版本python查看python版本号更新update-alternatives替代列表查看update-alternatives下的python版本切换python版本删除python版本 p…

Windows7+内网, 安装高版本nodejs,使用vite+vue3+typescript开发项目

前言&#xff1a;vite只支持高版本的nodejs&#xff0c;而高版本的nodejs只支持windows8及以上&#xff0c;且vite还对浏览器版本有兼容问题。以下均为vite官网截图 1、安装好低版本的nodejs win7系统建议安装13.及以下&#xff0c;我的是12.12.0这个版本。nodejs低版本官网下载…

20- C++ STL标准模板库-8 (C++)

第十章 10.1 基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C中&#xff0c;但在被引入C之前该技术就已经存在了很长的一段时间。 STL的从广义上讲分为三类&#xff1a;algorithm&#xff0…

【NLP初级概念】 01-稀疏文档表示(第 1/30 部分)

一、介绍 自然语言处理(NLP)是计算方法的应用,不仅可以从文本中提取信息,还可以在其上对不同的应用程序进行建模。所有基于语言的文本都有系统的结构或规则,通常被称为形态学,例如“跳跃”的过去时总是“跳跃”。对于人类来说,这种形态学的理解是显而易见的。 在这篇介…

kafka总结

Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 消息队列应用场景 缓存/削峰 :处理突然激增的大量数据&#xff0c;先放入消息队列&#xff0c;再按照速度去处理&#xff0c; 解…