100个 Unity小游戏系列三 -Unity 抽奖游戏专题三老虎机游戏

2024-05-28 12:52

本文主要是介绍100个 Unity小游戏系列三 -Unity 抽奖游戏专题三老虎机游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、演示效果

二、知识点讲解

2.1 布局

public void CreateItems(SlotsData[] slotsData){isInited = false;slotsPrizeList = new List<SlotsData>();for (int i = 0; i < slotsData.Length; i++){var item = slotsData[i];slotsPrizeList.Add(item);}float bottomY = -itemPadding * frontItemCount;slotEdge = new Vector2(bottomY + itemPadding * slotsPrizeList.Count, bottomY);slotWheelsIds = new int[slotWheels.Length][];slotsStopIdx = new int[slotWheels.Length];for (int i = 0; i < slotWheelsIds.Length; i++){slotWheelsIds[i] = new int[slotsPrizeList.Count];for (int j = 0; j < slotWheelsIds[i].Length; j++){slotWheelsIds[i][j] = slotsPrizeList[j].id;}int halfLen = slotsPrizeList.Count / 2;for (int j = 0; j < halfLen; j++){int randSwapIdx = UnityEngine.Random.Range(0, halfLen + 1);int swapIdx2 = slotsPrizeList.Count - randSwapIdx - 1;int tmpPrizeId = slotWheelsIds[i][swapIdx2];slotWheelsIds[i][swapIdx2] = slotWheelsIds[i][randSwapIdx];slotWheelsIds[i][randSwapIdx] = tmpPrizeId;}}for (int i = 0; i < slotWheels.Length; i++){var wheel = slotWheels[i];for (int j = 0; j < slotWheelsIds[i].Length; j++){var prizeId = slotWheelsIds[i][j];var reward_data = LuckyManager.Instance.GetDataById(rewardDatas, prizeId, out int index);var item = Instantiate(slot_Item, wheel);var pos = item.transform.localPosition;pos.y = slotEdge.y + j * itemPadding;item.transform.localPosition = pos;item.transform.localScale = Vector3.one * itemSize;var reward_img = item.GetComponentInChildren<Image>();reward_img.sprite = itemImgs[reward_data.type - 1];reward_img.SetNativeSize();item.GetComponentInChildren<TextMeshProUGUI>().text = string.Format("{0}", reward_data.amount);item.SetActive(true);}}isInited = true;}

2.2、转动逻辑

 private void OnClickSpin(){if (!isInited || IsRolling){return;}GetSelectIndex();RollSlots(SpinComplete);}public void RollSlots(Action<bool, SlotsData> onSpinCompleted){IsRolling = true;int rewardId = LuckyManager.Instance.CalculateRewardId(rewardDatas);var reward_data = LuckyManager.Instance.GetDataById(rewardDatas, rewardId, out int slot_index);bool isMatched = CalculateSlotStopIndex(reward_data, out slotsStopIdx);int slotWheelsCount = slotWheels.Length;int roundNum = 5;for (int i = 0; i < slotWheels.Length; i++){var wheel = slotWheels[i];var stopIdx = slotsStopIdx[i];float rollDistance = roundNum * (slotEdge.x - slotEdge.y);var offsetY = wheel.GetChild(stopIdx).localPosition.y;rollDistance += offsetY < 0 ? Mathf.Abs(offsetY - slotEdge.y) + slotEdge.x : offsetY;float preframePosY = 0f;float curPosY = 0f;float rollTime = 2.5f;if (rollStyle2){rollTime = 2.5f + i * 0.5f;}else if (rollStyle3){rollTime = 4.5f - i * 0.5f;}else if (rollStyle4){rollTime = 2.5f + i * 2.5f;}var rollAnim = DOTween.To(() => curPosY, (x) => curPosY = x, rollDistance, rollTime);rollAnim.SetEase(Ease.OutQuart);rollAnim.onUpdate = () =>{float deltaY = curPosY - preframePosY;for (int j = 0; j < wheel.childCount; j++){var item = wheel.GetChild(j);float nextPosY = item.transform.localPosition.y - deltaY;var localPosition = item.transform.localPosition;localPosition.y = nextPosY < slotEdge.y ? slotEdge.x - (slotEdge.y - nextPosY) : nextPosY;item.transform.localPosition = localPosition;}preframePosY = curPosY;};rollAnim.onComplete = () =>{if (--slotWheelsCount <= 0){IsRolling = false;onSpinCompleted.Invoke(isMatched, reward_data);}};}}

三、代码完整链接

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

这篇关于100个 Unity小游戏系列三 -Unity 抽奖游戏专题三老虎机游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010626

相关文章

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)

题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

【Unity Shader】片段着色器(Fragment Shader)的概念及其使用方法

在Unity和图形编程中,片段着色器(Fragment Shader)是渲染管线中的一个阶段,负责计算屏幕上每个像素(片段)的颜色和特性。片段着色器通常在顶点着色器和任何几何处理之后运行,是决定最终像素颜色的关键步骤。 Fragment Shader的概念: 像素处理:片段着色器处理经过顶点着色器和几何着色器处理后,映射到屏幕空间的像素。颜色计算:它计算每个像素的颜色值,这可能包括纹理采样、光

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中,Alpha Blend(也称为Alpha混合)是一种用于处理像素透明度的技术。它允许像素与背景像素融合,从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体(如窗户、玻璃、水、雾等)时非常重要。 Alpha Blend的概念: Alpha值:Alpha值是一个介于0(完全透明)和1(完全不透明)的数值,用于表示像素的透明度。混合模式:Alpha B

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,

2024年6月24日-6月30日(ue独立游戏为核心)

试过重点放在独立游戏上,有个indienova独立游戏团队是全职的,由于他们干了几个月,节奏暂时跟不上,紧张焦虑了。五一时也有点自暴自弃了,实在没必要,按照自己的节奏走即可。精力和时间也有限,放在周末进行即可。除非哪天失业了,再也找不到工作了,再把重心放在独立游戏上。 另外,找到一个同样业余的美术,从头做肉鸽游戏,两周一次正式交流即可。节奏一定要放慢,不能影响正常工作生活。如果影响到了,还不如自