Unity 之 实现老虎机滚动抽奖效果

简介: Unity 之 制作一个老虎机滚动抽奖示例

直接看下效果图吧:
choujiang


制作思路:

设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环。

1.2


场景搭建:

  1. 创建Image命名为Bg作为电视框背景;
  2. 创建Image命名Mask并添加Mask组件作为电视框内容显示遮罩框;
  3. 创建四个Image作为滚动图片;
  4. 创建开始抽奖按钮;

1.3

PS:实际项目中可以根据需求来动态修改图片显示,以达到的控制每次抽奖奖品内容。


源码分享:

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

public class ScollToDraw : MonoBehaviour
{
      // 抽奖按钮
      public Button DrowBtn;
      
      // 奖励图片
      public Image[] ArardImgArr;

      // 转盘速度
      public float AniMoveSpeed = 3f;

      // 进度
      private float[] progress = new[] {0f, 1f, 2f, 3f, 4f};

      // 转动动画位置
      private Vector3[] AniPosV3 = new[]
            {Vector3.up * 240, Vector3.up * 120, Vector3.zero, Vector3.down * 120, Vector3.down * 240};

      // 自动暂停标识
      private bool isAutoStop;
      // 抽奖结束 停止刷新界面UI
      private bool isStopUpdatePos;
      
      void Start()
      {
            DrowBtn.onClick.AddListener(DrawFun);
            isAutoStop = false;
            isStopUpdatePos = false;
      }

      void Update()
      {
            if (isStopUpdatePos) return;
            
            float t = Time.deltaTime * AniMoveSpeed;
            for (int i = 0; i < ArardImgArr.Length; i++)
            {
                  progress[i] += t;
                  ArardImgArr[i].transform.localPosition = MovePosition(i);
            }
      }
      
      // 获取下一个移动到的位置
      Vector3 MovePosition(int i)
      {
            int index = Mathf.FloorToInt(progress[i]);
            if (index > AniPosV3.Length - 2)
            {
                  //保留其小数部分,不能直接赋值为0
                  progress[i] -= index; 
                  index = 0;
                  // 索引为2的到底了,索引为0的就在正中心
                  if (i == 2 && isAutoStop)
                  {
                        isStopUpdatePos = true;
                        Debug.Log("展示奖励界面...");
                        // todo...获取奖励数据维护
                  }
                  return AniPosV3[index];
            }
            else
            {
                  return Vector3.Lerp(AniPosV3[index], AniPosV3[index + 1], progress[i] - index);
            }
      }
      
      /// <summary>
      /// 点击抽奖
      /// </summary>
      void DrawFun()
      {
            isAutoStop = false;
            isStopUpdatePos = false;
            StartCoroutine(SetMoveSpeed(2));
            // DoTween 按钮下拉动画
            // Transform tran = DrowBtn.transform;
            //tran.DOLocalMoveY(-60, 0.2f).OnComplete(() =>
            //{
            //      tran.DOLocalMoveY(50, 0.2f);
            //
            //});
      }
      
      // 抽奖动画速度控制
      IEnumerator SetMoveSpeed(int time)
      {
            AniMoveSpeed = 10;
            yield return new WaitForSeconds(time);
            AniMoveSpeed = 1;
            yield return new WaitForSeconds(time);
            isAutoStop = true;
      }
}

若还有不明白的地方,可以评论咨询,或者点击下面链接查看Demo: Demo链接

相关文章
|
图形学
Unity Shader Graph 制作车流效果(UV滚动)
Unity Shader Graph 制作车流效果(UV滚动)
680 0
Unity Shader Graph 制作车流效果(UV滚动)
unity3d-ngui UIScrollView 滚动方向与滚轮相反
生成一个滚动面板之后发现滚轮向上滚,界面向下;滚轮向下界面向上。在编辑窗口里发现这个选项 本来是-2,修改成正数就可以了。   http://ju.outofmemory.cn/entry/146754
|
Web App开发 测试技术
unity3dText文本组件支持滚动
支持text文本根据内容显示,显示不了的进行滚动显示http://www.cnblogs.com/Cocomo/p/5647405.html 测试.
1088 0
|
4月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
48 0
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
49 0
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
36 0
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
38 0
|
4月前
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
48 0
|
4月前
|
vr&ar 开发工具 图形学
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
83 0