基于Unity编写一个九宫格抽奖软件

目录
  • 一、前言
  • 二、效果图
  • 三、案例制作
    • 1.界面搭建
    • 2.代码编写
    • 3.效果演示
  • 四、后言

一、前言

本博文标题和内容参考:基于原生JS实现H5转盘游戏

博主将改编成Unity版本。

二、效果图

三、案例制作

1.界面搭建

使用了9个图片作为奖品栏,然后一个chooseBox作为蒙版,一个StartBtn开始按钮放在中间

2.代码编写

新建脚本goLuckyDraw.cs

使用DoTween插件做动画,没有导入这个插件的下载导入一下

实现抽奖,主要有两个方面,一个是概率的设置,一个是动画

动画

我使用一个蒙版用来表示当前选中的奖品,然后不断将蒙版移动到下一个奖品的位置,就这样形成一个动画的效果:

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

public class goLuckyDraw : MonoBehaviour
{
    public Image transparentBox;//蒙版
    public List<Transform> boxList = new List<Transform>();//所有的位置对象
    private Transform chooseBox;//蒙版要到达的位置
    public Button button;//开始按钮

    void Start()
    {
        transparentBox.gameObject.SetActive(false);
        //获取需要监听的按钮对象
        button.onClick.AddListener(() =>
        {
                StartLuckyDraw();
        });
    }

    private void StartLuckyDraw()
    {
        chooseBox = boxList[_index];

        transparentBox.gameObject.SetActive(true);
        StartCoroutine(Move());
    }

    IEnumerator Move()
    {
        float time = 0.2f;
        //下次开始旋转的位置等于上次旋转到的位置
        for (int i = 0; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        //旋转两圈
        for (int i = 0; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        for (int i = 0; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        //当旋转到指定的位置的时候结束
        for (int i = 0; i < boxList.Count; i++)
        {
            if (transparentBox.transform.localPosition == chooseBox.localPosition)
            {
                transparentBox.transform.DOLocalMove(chooseBox.localPosition, time);
                continue;
            }
            else
            {
                transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
                yield return new WaitForSeconds(time);
            }
        }
    }
}

然后将这个脚本挂载到一个游戏对象上:

BoxList里面的对象,按照顺序拖进去。

效果图:

概率设置

代码:

    //控制概率
    //rate:几率数组(%),  total:几率总和(100%)
    private int randomNum(int[] rate, int total=100)
    {
        if (rate == null)
        {
            int r = Random.Range(1, 7);
            return r;
        }
        else
        {
            int r = Random.Range(1, total + 1);
            int t = 0;
            for (int i = 0; i < rate.Length; i++)
            {
                t += rate[i];
                if (r < t)
                {
                    return i;
                }
            }
            return 0;
        }
    }

这个将一个概率数组传递进去,就可以控制概率了:

int[] AA = { 10, 10, 10, 10, 10, 10, 10, 30 };
int _index = randomNum(AA);
//获得得奖的下标数字
Debug.Log(_index);

算法理解:

然后代码修改一下,解决两个问题:

1、点击频率问题

2、下一次转的时候不从当前位置转的问题

完整代码如下:

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

public class goLuckyDraw : MonoBehaviour
{
    public Image transparentBox;//蒙版
    public List<Transform> boxList = new List<Transform>();//所有的位置对象
    private Transform chooseBox;//蒙版要到达的位置
    public Button button;//开始按钮
    private bool isRotate = false;//控制点击频率
    int index = 0;//转盘转到的位置记录

    void Start()
    {
        transparentBox.gameObject.SetActive(false);
        //获取需要监听的按钮对象
        button.onClick.AddListener(() =>
        {
            if (!isRotate)
            {
                StartLuckyDraw();
            }
        });
    }

    private void StartLuckyDraw()
    {
        isRotate = true;
        //随机概率可控制
        int[] AA = { 10, 10, 10, 10, 10, 10, 10, 30 };
        int _index = randomNum(AA);
        Debug.Log(_index);
        chooseBox = boxList[_index];
        transparentBox.gameObject.SetActive(true);
        StartCoroutine(Move(_index));
    }

    //控制概率
    //rate:几率数组(%),  total:几率总和(100%)
    private int randomNum(int[] rate, int total=100)
    {
        if (rate == null)
        {
            int r = Random.Range(0, 7);
            return r;
        }
        else
        {
            int r = Random.Range(1, total + 1);
            int t = 0;
            for (int i = 0; i < rate.Length; i++)
            {
                t += rate[i];
                if (r < t)
                {
                    return i;
                }
            }
            return 0;
        }
    }

    IEnumerator Move(int _index)
    {
        float time = 0.2f;
        //下次开始旋转的位置等于上次旋转到的位置
        for (int i = index; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        index = _index;
        //旋转两圈
        for (int i = 0; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        for (int i = 0; i < boxList.Count; i++)
        {
            transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
            yield return new WaitForSeconds(time);
        }
        //当旋转到指定的位置的时候结束
        for (int i = 0; i < boxList.Count; i++)
        {
            if (transparentBox.transform.localPosition == chooseBox.localPosition)
            {
                transparentBox.transform.DOLocalMove(chooseBox.localPosition, time);
                continue;
            }
            else
            {
                transparentBox.transform.DOLocalMove(boxList[i].localPosition, time);
                yield return new WaitForSeconds(time);
            }
        }
        isRotate = false;
    }
}

3.效果演示

四、后言

这是一个简单的抽奖系统,可以控制概率,也可以不传递概率数组,就会返回一个随机值。

也可以设置一下概率,比如:

{10, 20, 0, 20, 20, 0, 20, 10 }

也就是:

反正加起来概率不要超过100就行。

以上就是基于Unity编写一个九宫格抽奖软件的详细内容,更多关于Unity抽奖的资料请关注我们其它相关文章!

(0)

相关推荐

  • Unity实现跑马灯抽奖效果

    Unity 跑马灯抽奖效果实现代码,供大家参考,具体内容如下 这边用到插件是NGUI+Dotween,思路简单说下:先排版,通过移动图片蒙版来实现效果. 下面是排版和文件目录. 代码部分是通过余数去确认停的位置,boxlist通过unity拖拉加入数据,chooseBoxList直接通过余数判断添加. 代码量很少,稍微看下就明白了. 直接上代码了: using System; using System.Collections; using System.Collections.Generic;

  • Unity之跑马灯抽奖效果单抽与连抽(附demo)

    本文主要介绍了Unity之跑马灯抽奖效果单抽与连抽,分享给大家,具体如下: 效果图 单次抽奖效果 跳过动画抽奖效果 三连抽抽奖效果 设计思路 点击按钮 ,根据需求(概率)计算本次抽奖获得物品模拟转动 (先加速后减速), 一段时间后停止连抽的情况下等所有奖品动画都表演完成才结束跳过动画设计,有跳过时抽奖速度直接到最大,并进入可中奖 场景搭建 一个按钮,一个组奖品放到一个父物体上. 奖品元素,有两种状态,一种旋转状态,一种中奖状态. 代码 using System; using System.Col

  • Unity实现老虎机滚动抽奖效果的示例代码

    直接看下效果图吧: 制作思路: 设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环. 场景搭建: 创建Image命名为Bg作为电视框背景: 创建Image命名Mask并添加Mask组件作为电视框内容显示遮罩框: 创建四个Image作为滚动图片: 创建开始抽奖按钮: PS:实际项目中可以根据需求来动态修改图片显示,以达到的控制每次抽奖奖品内容. 源码分享: using System.Collections; using UnityEngine; using Unit

  • unity实现简单抽奖系统

    这段时间工作比较空闲,想做个抽奖系统,发现网上的抽奖系统看不懂,然后自己做了一个可以随意定义奖品概率,不管什么时候停下来指针最终都会转到指定的奖品哪. 废话不多说,动手一步一步来. 这个抽奖系统就使用了两张图片,一个指针,一个圆形的图片. 然后做一个预制体,图片就是圆形图片,image type选择filled,fill amount控制这个图片的面积大小,同时也是该图片的概率,Text组件是该奖品的名称. 再接下来就做一下界面布局的工作 Bg就是那个灰色的图片,Rotate是个空物体,用来挂在

  • Unity 2017使用UGUI实现大转盘抽奖

    本文实例为大家分享了Unity 2017实现大转盘抽奖的具体代码,供大家参考,具体内容如下 涉及到的插件:Dotween 在"Hierarchy"面板创建一个Image,这个Image用来显示大转盘的那个圆盘,我用的UGUI里默认的那个圆圆的图片,放大后很模糊,不过不打紧 接着创建一个Panel名字改成"奖品组",这个是奖品的父物体,记得吧Panel里的Image,Canvas Renderer组件删了 然后在创建一个Panel名字改成"Awar"

  • 基于Unity编写一个九宫格抽奖软件

    目录 一.前言 二.效果图 三.案例制作 1.界面搭建 2.代码编写 3.效果演示 四.后言 一.前言 本博文标题和内容参考:基于原生JS实现H5转盘游戏 博主将改编成Unity版本. 二.效果图 三.案例制作 1.界面搭建 使用了9个图片作为奖品栏,然后一个chooseBox作为蒙版,一个StartBtn开始按钮放在中间 2.代码编写 新建脚本goLuckyDraw.cs 使用DoTween插件做动画,没有导入这个插件的下载导入一下 实现抽奖,主要有两个方面,一个是概率的设置,一个是动画 动画

  • 基于Python编写一个微博抽奖小程序

    目录 导语 开发工具 环境搭建 先睹为快 原理简介 导语 带大家写个微博自动抽奖小程序吧,motivation和之前的B站自动抽奖小程序一样: 不想内卷了,整个B站全自动抽奖的小程序吧,万一不小心暴富了呢~ 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: DecryptLoginExamples模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 首先,

  • 基于Python编写一个B站全自动抽奖的小程序

    目录 导语 开发工具 环境搭建 原理简介 导语 应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.写完之后感觉这个想法还是挺有意思的,于是上来分享一波. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原

  • 基于VUE实现的九宫格抽奖功能

    先给大家展示下效果图: HTML代码: <template> <div class="luckDraw"> <title-bar :title="title"></title-bar> <div class="container"> <div class="turntable-wrapper"> <div class="luck-wrapp

  • 基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算

    方法一: 结合lambda表达式.函数调用运算符.标准库函数对象.C++11标准新增的标准库function类型,编写一个简单的计算器,可实现简单的加.减.乘.除.取余二元运算.代码如下: #include "pch.h" #include <iostream> #include <functional> #include <map> #include <string> using namespace std; int add(int i

  • 基于Python编写一个宝石消消乐小游戏

    目录 开发工具 环境搭建 原理简介 开发工具 python版本:3.6.4 相关模块: pygame:以及一些python自带的模块. 环境搭建 安装python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分.玩家需要在规定时间内获取尽可能高的得分. 实现过程: 首先加载一些必要的游戏素材: 加载背景音乐: py

  • 基于Python编写一个自动关机程序

    目录 1.实现效果 2.实现步骤 3.全部代码 1.实现效果 2.实现步骤 模块导入 import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui 窗口设置 def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 page.setWindowTitle('Window shutdown') #设置窗口的图标 #page.setWindo

  • 如何用python编写一个生成春联软件

    目录 前言 效果展示 代码 打包exe可执行文件 总结 前言 最近不是快过年了,Python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联.横批,然后自动生成春联保存在代码文件夹,如果要打印出来也是可以的. 效果展示 输入对联,选择路径后点击开始生成春联即可. 代码 需要导入的模块 # 网络数据获取相关模块 import io # python IO 处理模块 from PIL import Image # 图像处理模块 import requ

  • 基于Unity制作一个简易的计算器

    目录 一.前言 二.效果图及源工程 三.实现 1.界面搭建 2.代码实现 四.后记 一.前言 Hello,又见面了,今天分享如何使用Unity制作计算器,难度中等,可以用来学习,或者当成其他项目的小组件导入. 当然,也可以导出来,发布到网页端,来做一个嵌入式工具也可以. 二.效果图及源工程 效果图: 源工程 三.实现 1.界面搭建 所有的按钮摆放到Background下面. 2.代码实现 首先找到所有的按钮,添加到事件: //结果显示 TextComputeProcess = GameObjec

  • 基于Python编写一个根据姓名测性别的小程序

    目录 导语 一.准备环节 1.1安装环境 二.准备素材 三.开始敲代码 3.1导入模块 3.2定义界面 3.3预测性别 3.4读取数据 3.5附完整的源码 四.效果展示 总结 导语 以前上英语课老师都会教哪些名字一听就知道是男生的,比如David.Tom.Jerry,然后Angela.Sophia一听就是女生的名字.当你以为所有名字一听就可以辨别男女的时候,你就想错了~就像中文里面“贾凡”,你以为是男生,其实是女生也说不定.这种难分性别的名字 其实很多呢~为了避免宝宝的性别和提前取好的名字冲突,

随机推荐