Unity简单实现老虎机抽奖效果

这篇具有很好参考价值的文章主要介绍了Unity简单实现老虎机抽奖效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、演示效果

unity ui抽奖,Unity,unity,游戏引擎

二、使用工具

Unity:2019.4.36
VS:2017

三、场景搭建

1、右键—>UI—>RawImage
(自己摆好位置并设置好大小,然后选择图片,挂载RawImageTest脚本。本案例需要创建6个RawImage,分别是一个背景图片、三列水果和两块遮板,背景图片必须放在最上面)
unity ui抽奖,Unity,unity,游戏引擎
2、右键—>UI—>Button
(同样自己摆好位置并修改大小,然后修改一下自己需要显示的字。这两个按钮是用来控制游戏的开始和暂停的,具体逻辑是当没有按下开始按钮时,暂停按钮不允许被点击;当按下开始按钮后,暂停按钮就被激活,同时开始按钮就不允许被点击了;当按下暂停按钮,暂停按钮立即不允许被点击,开始按钮必须等老虎机停止才被激活)
unity ui抽奖,Unity,unity,游戏引擎
3、创建一个空物体,用来挂载游戏控制脚本
4、总体预览
unity ui抽奖,Unity,unity,游戏引擎

四、代码

1、RawImageTest.cs

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

public class RawImageTest : MonoBehaviour
{
    static int totalNum;  // 场景里该脚本的总数
    static int stopNum;  // 当前已经停止的数量
    bool selfIsStop = true;  // 自己是否停止

    RawImage raw;
    Rect r;
    public float speed;
    float[] a = new float[] { 0, 0.2f, 0.4f, 0.6f, 0.8f };  //每个图片的位置
    int n;
    float m;

    public GameControl gameControl;

    // Start is called before the first frame update
    void Start()
    {
        totalNum++;
        raw = GetComponent<RawImage>();
        r = raw.uvRect;
        n = Random.Range(0, 5);
        r.y = a[n];
        raw.uvRect = r;
        gameControl = GameObject.Find("GameObject").GetComponent<GameControl>();
        speed = Random.Range(0.5f, 2f);
        m = Random.Range(0.001f, 0.004f);
    }

    // Update is called once per frame
    void Update()
    {
        if (gameControl.state == GameState.Start)  //当按下开始键
        {
            stopNum = 0;  //重置停止的脚本数量
            selfIsStop = false;
            r.y += Time.deltaTime * speed;
            raw.uvRect = r;
        }
        else if (gameControl.state == GameState.Pause)
        {
            if (!selfIsStop)
            {
                if (speed > 0)
                {
                    speed -= m;
                    r.y += Time.deltaTime * speed;
                    raw.uvRect = r;
                }
                else
                {
                    selfIsStop = true;
                    speed = Random.Range(0.5f, 2f);
                    m = Random.Range(0.001f, 0.004f);
                    r.y = a[GetPos(r.y)];
                    raw.uvRect = r;
                    stopNum++;
                    if (stopNum >= totalNum)
                    {
                        gameControl.state = GameState.Stop;
                    }
                }
            }
        }
    }

    //获取将要停止的位置
    private int GetPos(float num)
    {
        float t = num - Mathf.Floor(num);  //获取小数部分
        for (int i = 0; i < 4; i++)
        {
            if (t >= a[i] && t <= a[i + 1])
            {
                return i + 1;
            }
        }
        return 0;
    }
}

2、GameControl.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //引入命名空间

public enum GameState  //用来记录三种状态
{
    Start,
    Pause,
    Stop
}

public class GameControl : MonoBehaviour
{
    public Button StartBtn;  //通过Unity中拖拽获得
    public Button PauseBtn;
    public GameState state;
    bool isStart = false;

    // Start is called before the first frame update
    void Start()
    {
        StartBtn.interactable = true;
        PauseBtn.interactable = false;
        StartBtn.onClick.AddListener(StartGame);  //给按钮添加事件
        PauseBtn.onClick.AddListener(PauseGame);

        state = GameState.Stop;
    }

    // Update is called once per frame
    void Update()
    {
        if (isStart && state == GameState.Stop)
        {
            StartBtn.interactable = true;
        }
    }

    public void StartGame()
    {
        isStart = false;
        StartBtn.interactable = false;
        PauseBtn.interactable = true;

        state = GameState.Start;
    }

    public void PauseGame()
    {
        isStart = true;
        PauseBtn.interactable = false;

        state = GameState.Pause;
    }
}

五、项目链接

链接:https://pan.baidu.com/s/1tDwAbKd4zHEO0ySXXTY7_w
提取码:pjqm文章来源地址https://www.toymoban.com/news/detail-599267.html

到了这里,关于Unity简单实现老虎机抽奖效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity实现简单的摄像机震动效果(包括普通摄像机和虚拟摄像机)

    用代码实现摄像机简单的震动效果

    2024年02月12日
    浏览(44)
  • 【Unity】超简单特效 - 子弹拖尾效果

    前言: 游戏中往往少不了 “子弹 ”,子弹常常需要带着小尾巴,今天我们就来了解并简单在Unity中实现子弹拖尾效果。 初步实现: 第一步我们还是新建一个场景,这里我们选择2D与黑底摄像机方便观察。 然后创建一个空对象作为子弹的父级,再新建2个子对象作为子弹本体

    2023年04月08日
    浏览(35)
  • unity中实现碰撞效果(无废话),不用代码,简单好抄

     1.首先建立2个物理静态精灵并设置他们的颜色。 2.给两个物体添加碰撞器组件     3.给物体添加刚体属性将静态的改为Dynamic,这里可以两个都添加,也可以只添加其中一个物体的  4.将重力大小设置为0,不然运行的时候物体会直接掉下去  5.运行游戏并随便选择旁边刚刚创

    2024年01月17日
    浏览(77)
  • 【Unity项目】Unity实现 双屏显示效果

        需求:两个屏显示项目,一个屏显示列表,一个屏显示列表按钮点击后的效果。 最近在修改一个项目,是要求分屏显示项目,一个一体机,一个大屏,一体机当作目录界面,大屏当作模型显示界面,如下图: 列表界面:  展示界面:    这次是拿之前的项目修改的,所

    2024年02月13日
    浏览(48)
  • unity组件LineRenderer Unity LineRenderer 实现闪电效果

    这是一个好玩的组件 主要作用划线,像水果忍者中的刀光,还有一些涂鸦的小游戏,包括让鼠标划线然后让对象进行跟踪导航也可通过此插件完成 附注:unity版本建议使用稳定一些的版本,有些api可能已经发生变化,请参考unity官方文档 此组件: 线渲染器用于在 3D 空间中绘

    2024年02月03日
    浏览(46)
  • 【实现100个unity特效之7】unity 3d实现各种粒子效果

    直接调整为【Stretched Billboard拉伸/延伸渲染】 控制雨的大小 创建个材质 材质设置 挂载材质 设置延申效果 第一个叫做Speed Scale:通过比较每个粒子的速度,来去决定每个粒子拉伸/延伸的长度 而Length Scale:通过粒子的宽度,来决定粒子的长度 3d粒子大小随机化 颜色也可以设置随

    2024年01月19日
    浏览(51)
  • unity实现子弹散射效果和闪电链效果

    实现爆炸散射效果可以按照以下步骤进行: 1.准备子弹模型和爆炸特效模型,可以使用粒子特效或者模型。 2.创建子弹和敌人模型,同时添加刚体组件。 3.创建子弹的脚本,绑定到子弹上。 4.在脚本中,对子弹的 OnTriggerEnter 或 OnCollisionEnter 函数做出响应,检测敌人碰撞事件发

    2024年02月16日
    浏览(38)
  • 【Unity Shader】Unity中利用GrabPass实现玻璃效果

    《入门精要》中模拟玻璃是用了Unity里的一个特殊的Pass来实现的,这个Pass就是 GrabPass ,比起上一篇博客实现镜子的方法,这个方法我认为相对复杂,因此在实现之前需要对GrabPass及实现原理做一个更加详细的介绍。 场景物体拜访和贴图完全参考《入门精要》: 以及当前场景

    2024年02月09日
    浏览(50)
  • Unity 实现贴花/投影效果

    【核心思路】 实现投影效果有以下几种思路: 一是对处理渲染到相机的最终画面,将想投影的贴图修改上去。 二是对被投影的物体的Shader加上,开启的时候用想投影的贴图。 三是在一个物体上渲染想投影的贴图,让这个物体最后绘制,且只绘制那些被遮挡的部

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包