100个 Unity小游戏系列四 -Unity 抽奖游戏专题二 水果机游戏

news2024/10/6 0:34:36

一、演示效果

二、知识点

2.1 布局

 private void CreateItems()
        {
            for (int i = 0; i < rewardDatas.Length; i++)
            {
                var reward_data = rewardDatas[i];
                GameObject fruitOjb;
                if (i < itemRoot.childCount)
                {
                    fruitOjb = itemRoot.GetChild(i).gameObject;
                }
                else
                {
                    fruitOjb = Instantiate(itemRoot.GetChild(0).gameObject, itemRoot);
                }
                fruitOjb.SetActive(true);
                var fruitImg = fruitOjb.transform.Find("Icon").GetComponent<Image>();
                fruitImg.sprite = itemImgs[reward_data.type - 1];
                fruitImg.SetNativeSize();
                fruitImg.transform.localScale = Vector3.one * itemSize;

                var amountTxt = fruitOjb.GetComponentInChildren<TextMeshProUGUI>();
                amountTxt.text = string.Format("{0}", reward_data.amount);

                fruitOjb.transform.localScale = Vector3.one * itemSize;

                cursorLists.Add(fruitOjb.transform.Find("Cursor").gameObject);
                selectLists.Add(fruitOjb.transform.Find("Select").gameObject);
            }
        }

2.2 转动逻辑

private IEnumerator StartSpin(Action<List<RewardData>> onSpinCompleted)
        {

            IsRolling = true;

            ChangeSelectEanble(0, true);
            ChangeCursorEanble(0, true);

            GetSelectIndex();


            int[] rewardIdLists = LuckyManager.Instance.CalculateRewardId(rewardDatas, GetRewardCount());

            int spinCount = rewardIdLists.Length;

            List<RewardData> rewardDataList = new List<RewardData>();


            if (rollStyle3)
            {
                yield return StaraThreeSpine();
            }


            for (int i = 0; i < rewardIdLists.Length; i++)
            {
                var rewardDt = LuckyManager.Instance.GetDataById(rewardDatas, rewardIdLists[i], out int rewardIndex);
                if (rewardDt == null)
                {
                    Debug.LogErrorFormat("水果机表中不存在id:{0}", rewardIdLists[i]);
                    continue;
                }
                int totalLen = itemCount * 3 + rewardIndex;

                if (rollStyle3 || rollStyle2)
                    totalLen = itemCount * 3 - i + rewardIndex;


                int curIndex = startIndexs;
                float spinTime = totalLen * 0.06f;
                var moveAct = DOTween.To(() => curIndex, (x) => curIndex = x, totalLen, spinTime);
                moveAct.SetEase(Ease.Linear);
                moveAct.onUpdate = () =>
                {
                    int fixNum = curIndex % itemCount;
                    startIndexs = fixNum;
                    ChangeCursorEanble(fixNum);
                };
                moveAct.OnComplete(() =>
                {
                    rewardDataList.Add(rewardDt);
                    ChangeSelectEanble(rewardIndex);
                    if (--spinCount <= 0)
                    {
                        IsRolling = false;
                        onSpinCompleted?.Invoke(rewardDataList);
                    }
                });
                if (rollStyle3 || rollStyle2)
                    yield return new WaitForSeconds(spinTime);
            }
        }

四 、代码链接

https://github.com/lixianjun0903/luckydraw-master.git

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

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

相关文章

C++数据结构之:链List

摘要&#xff1a; it人员无论是使用哪种高级语言开发东东&#xff0c;想要更高效有层次的开发程序的话都躲不开三件套&#xff1a;数据结构&#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合&#xff0c;即带“结构”的数据元素的集合&am…

如何恢复已删除/丢失或未保存的 PDF 文件?

许多用户曾因某些问题删除或丢失 PDF 文件。此外&#xff0c;一些用户在关闭应用程序时未保存 PDF 文件&#xff0c;从而丢失 PDF 文件。您可以尝试一些解决方案来恢复已删除的 PDF 文件、恢复未保存的 PDF 文件&#xff0c;以及在任何其他数据丢失情况下挽救丢失的 PDF 文件。…

汇编原理(四)[BX]和loop指令

loop&#xff1a;循环 误区&#xff1a;在编译器里写代码和在debug里写代码是不一样的&#xff0c;此时&#xff0c;对于编译器来说&#xff0c;就需要用到[bx] [bx]: [bx]同样表示一个内存单元&#xff0c;他的偏移地址在bx中&#xff0c;比如下面的指令 move bx, 0 move ax,…

学习笔记——数据通信基础——数据通信网络(基本概念)

数据通信网络基本概念 网络通信&#xff1a;是指终端设备之间通过计算机网络进行的通信。 数据通信网络(Data Communication Network)&#xff1a;由 路由器、交换机、防火墙、无线控制器、无线接入点&#xff0c;以及个人电脑、网络打印机&#xff0c;服务器等设备构成的通信…

Spring Boot集成freemaker快速入门demo

1.什么是freemaker&#xff1f; FreeMarker 是一款模板引擎&#xff1a;即一种基于模板和要改变的数据&#xff0c;并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户的&#xff0c;而是一个Java类库…

【学习心得】PyTorch的知识要点复习(持续更新)

PyTorch知识要点复习&#xff0c;目的是为了巩固PyTorch基础、快速回顾、深化理解PyTorch框架。这篇文章会持续更新。 一、本文的一些说明 知识点梳理&#xff1a;我将PyTorch的核心概念和高级技巧进行了系统化的整理&#xff0c;从基础的张量操作到复杂的模型构建与训练。这样…

HR人才测评,想象力维度分析(大五人格测试)

想象力维度&#xff08;高得分者&#xff09;性格特征 开放性人格的人通常富有想象力。想象力是一种可贵的天赋&#xff0c;通常在孩童时期人们都会充满想象力&#xff0c;但是随着渐渐长大&#xff0c;我们的想象力也会被时光的棱角磨平。 但开放性人格的人并非如此&#x…

Windows下PostgreSQL数据库的备份与恢复

文章目录 一、备份1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;使用pg_dump进行备份1.打开命令窗口2.使用pg_dump将数据库备份下来 二、恢复1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;…

2007NOIP普及组真题 4. Hanoi双塔问题

线上OJ&#xff1a; 【07NOIP普及组】Hanoi双塔问题 题解分析 1、本题考的其实不是Hanoi塔&#xff0c;而是瞪眼法&#xff08;数学推导&#xff09;和高精度。 2、本题不需要输出移动的顺序&#xff0c;只是输出移动的次数即可。 核心思想&#xff1a; 1、从上述图中&#x…

.NET 某和OA办公系统全局绕过漏洞分析

转自先知社区 作者&#xff1a;dot.Net安全矩阵 原文链接&#xff1a;.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 0x01 前言 某和OA协同办公管理系统C6软件共有20多个应用模块&#xff0c;160多个应用子模块&#xff0c;从功能型的协同办公平台上升到管理型协同管理平…

Next-Admin,一款基于Nextjs开发的开箱即用的中后台管理系统(全剧终)

hello&#xff0c;大家好&#xff0c;我是徐小夕。之前和大家分享了很多可视化&#xff0c;零代码和前端工程化的最佳实践&#xff0c;今天继续分享一下最近开源的 Next-Admin 项目的最新更新。 这次更新是1.0版本最后一次更新&#xff0c;也根据用户反馈的问题做了一些优化&am…

uniapp开发微信小程序:用户手机号授权获取全流程详解与实战示例

随着多端小程序研发工具的日益普及&#xff0c;诸如uniapp、Taro、Flutter等跨平台解决方案使得开发者能够高效地构建同时适配多个主流小程序平台&#xff08;如微信、支付宝、百度、字节跳动等&#xff09;的应用。尽管各平台间存在一定的差异性&#xff0c;但在获取用户手机号…

helm离线安装

目录 概述实践 概述 centos 7.x 离线安装 helm 3.14.4 版本 实践 离线包资源下载地址 github [roothadoop01 ~]# tar -xvf helm-v3.14.4-linux-amd64.tar.gz linux-amd64/ linux-amd64/README.md linux-amd64/LICENSE linux-amd64/helm [roothadoop01 ~]# mv ./linux-amd…

【云原生 | 59】Docker中通过docker-compose部署ELK

目录 1、组件介绍 2 、项目环境 2.1 各个环境版本 2.2 Docker-Compose变量配置 2.3 Docker-Compose服务配置 3、在Services中声明了四个服务 3.1 ElasticSearch服务 3.2 Logstash服务 3.3 Kibana服务 3.4 Filebeat服务 4、使用方法 4.1 方法一 4.2 方法二 5、启动…

WebPack插件实现:打包之后自动混淆加密JS文件

在WebPack中调用JShaman&#xff0c;实现对编译打包生成的JS文件混淆加密 一、插件实现 1、插件JShamanObfuscatorPlugin.js&#xff0c;代码&#xff1a; class JShamanObfuscatorPlugin { apply(compiler) { compiler.hooks.emit.tapAsync(JShamanObfuscatorPlugin, (comp…

深度神经网络——什么是迁移学习?

1.概述 在练习机器学习时&#xff0c;训练模型可能需要很长时间。从头开始创建模型架构、训练模型&#xff0c;然后调整模型需要大量的时间和精力。训练机器学习模型的一种更有效的方法是使用已经定义的架构&#xff0c;可能具有已经计算出的权重。这是背后的主要思想 迁移学习…

嵌入式进阶——OLED显示器(SPI)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 SPI协议原理图字库芯片中文显示屏原理API的使用 SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

VMware vSphere 8.0 Update 2c 下载 - 企业级工作负载平台

VMware vSphere 8.0 Update 2c 下载 - 企业级工作负载平台 ESXi 8.0U2 & vCenter Server 8.0U2 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsphere-8-u2/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org …

《最新出炉》系列入门篇-Python+Playwright自动化测试-46-鼠标滚轮操作

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 有些网站为了节省流量和资源&#xff0c;提高加载效率&#xff0c;采用的是动态加载&#xff08;懒加载&#xff09;的&#xff0c;也就是当拖动页面右侧滚动条后会自动加载网…