unity3d实现水果机(随机)跑马灯效果
初次发文,多多谅解。美工没做,都是网上的图片。
思路!
一、随机产生不等页面布局【跑马灯】(目前可实现22个和18个…)
二、随机在跑马灯上产生不一样的图片【不同于现实中固定的大奖】
三、图片会逐步变大变小变色
四、随机产生跑马效果时长
五、结算分值。
图一
整体效果

第一步解决生成图片

注意每个grid的位置 做到上下左右对其的标准,因为生成的图片会用grid自动排序所以要摆放好位置才能起到连贯性。
图二添加ugui ,用grid的形式存储图片
导入需要变换的图片


图四、grid的参数设置

图五、制作预制图片(因为这个图片是生成的所以要预制)
**实现的效果:**运行脚本每个预制体增加脚本(运行时产生大、变色的效果)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class tu_jiaoben : MonoBehaviour {
Vector2 tu_daxiao;
// Use this for initialization
void Start () {
tu_daxiao = this.gameObject.transform.localScale;
}
public bool ji_huo=false;
public float TimeA;
float DTime = 0;
// Update is called once per frame
void Update () {

    if (ji_huo){this.gameObject.transform.localScale = new Vector2(tu_daxiao.x * 1.2f, tu_daxiao.y * 1.2f);this.GetComponent<Image>().color = Color.red;DTime += Time.deltaTime;if (DTime > TimeA){DTime = 0;this.gameObject.transform.localScale = tu_daxiao;this.GetComponent<Image>().color = Color.white;//赢得积分ji_huo = false;}}
}
public string wen_ben="";
/// <summary>
/// 变大的操作
/// </summary>
public void da()
{this.gameObject.transform.localScale = new Vector2(tu_daxiao.x * 1.2f, tu_daxiao.y * 1.2f);this.GetComponent<Image>().color = Color.red;wen_ben = this.GetComponentInChildren<Text>().text;
}

}
第二步、脚本生成页面布局
有了预制图片、页面布局Grid那么就要生成布局了
以下代码中包含生成布局、点击旋转(跑马)、投注、得分显示、总分显示、投注button、计算…我就不一一分开了 因为这是一个脚本。
实现的效果:
点击下方跑【投注按钮】、点击中间【水果转转】运行。
图片会变大、变色、恢复,进行到下一个图片…然后依次,直到停止旋转。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
///
/// 转盘
///
public class ZhuanPan : MonoBehaviour {
///
/// 脚本单例模式
///
public static ZhuanPan _insert;
///
/// 用于保存 图片的大小
///
Vector2 tu_daxiao;
///
/// 存储 4个模块
///
public GridLayoutGroup []Grid;
///
/// 预制体(图片)
///
public Image Tu;

void Start () {_insert = this;PanDuan();
}
void Update () {
}
/// <summary>
/// 总共是四组
/// </summary>
int diji_zu=0;
/// <summary>
/// 随机产生滚动的的时间长短
/// </summary>
float suiji_shijian;/// <summary>
/// 生成横的格子数
/// </summary>
int heng_shu;
/// <summary>
/// 生成竖的格子数
/// </summary>
int Shu_Shu;
/// <summary>
/// 用于变换 【难易度】多少格子
/// </summary>
int Gao_Di=1;
/// <summary>
/// 时停止还是运行
/// </summary>
bool S_P = false;/// <summary>
/// 中奖得分
/// </summary>
public Text D_JiFenText;
/// <summary>
/// 点击后  将 获得的积分 跳到 总积分中
/// </summary>
public void GouMaiJiFen()
{Z_jifen_value = 10;Z_jifen_value += DeFenValue;DeFenValue = 0;D_JiFenText.text = "0";Z_JiFenText.text = Z_jifen_value.ToString();
}
/// <summary>
/// 投注 多少
/// </summary>
int LingV = 0;
int MangV = 0;
int PingV = 0;
int XiV = 0;
int XingV = 0;
int ChengV = 0;
/// <summary>
/// 点击谁 投注的text 传过来
/// </summary>
Text LingT;
Text MangT;
Text PingT;
Text XiT;
Text XingT;
Text ChengT;/// <summary>
/// 押注的函数(点击哪个button 就现将  button名称,点击的值,button下的显示文本)
/// </summary>
public void YaZhu(string aaa,int value,Text txt)
{///通过判断将点击的button中的值类型重新赋予switch (aaa){ case "Button (0)":LingV=value;LingT = txt;break;case "Button (1)":MangV = value;MangT = txt;break;case "Button (2)":PingV = value;PingT = txt;break;case "Button (3)":XiV = value;XiT = txt;break;case "Button (4)":XingV = value;XingT = txt;break;default:ChengV = value;ChengT = txt;break;}
}
/// <summary>
/// 得分值
/// </summary>
int DeFenValue;
/// <summary>
/// 得分
/// </summary>
/// <param name="ii"></param>
public void GetJiang(string ii)
{print(ii);int aa = int.Parse(ii);int deFen = 0;switch (ii){case "1":deFen = ChengV * aa;break;case "2":deFen = MangV * aa;break;case "10":deFen = PingV * aa;break;case "30":deFen = LingV * aa;break;case "50":deFen = XingV * aa;break;case "100":deFen = XiV * aa;break;default:deFen = 0;break;}DeFenValue += deFen;print(DeFenValue);D_JiFenText.text = DeFenValue.ToString();XingV = 0;LingV = 0;MangV = 0;PingV = 0;XiV = 0;ChengV = 0;if (LingT != null){LingT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;LingT.text = "0";}if (MangT != null){MangT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;MangT.text = "0";}if (PingT != null){PingT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;PingT.text = "0";} if (XiT != null){XiT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;XiT.text = "0";} if (XingT != null){XingT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;XingT.text = "0";} if (ChengT != null){ChengT.gameObject.transform.parent.gameObject.GetComponent<YaZhu_JiaoBen>().textV = 0;ChengT.text = "0";}}#region 生成
/// <summary>
/// 生成图片  这里决定生成多少格子,布局的大小
/// </summary>
public void PanDuan()
{if (Gao_Di == 1){ShengCheng(6, 0, 0.8f);ShengCheng(6, 2, 0.8f);ShengCheng(5, 1, 0.8f);ShengCheng(5, 3, 0.8f);}else{ShengCheng(5, 0,1f);ShengCheng(5, 2, 1);ShengCheng(4, 1, 1);ShengCheng(4, 3, 1);}LiPin();
}
/// <summary>
/// 所有图片
/// </summary>
public List<GameObject> All_Tu;
/// <summary>
/// 循环生成
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
public void ShengCheng(int a,int b,float c)
{for (int i = 0; i < a; i++){GameObject IGa = Instantiate(Tu.gameObject);///生成图片IGa.gameObject.transform.parent = Grid[b].gameObject.transform;///图片位置IGa.gameObject.transform.localScale = new Vector3(c, c, c);//图片大小All_Tu.Add(IGa);}
}
/// <summary>
/// 存储 图片(这些图片用于 生成随机的图片显示)
/// </summary>
public Sprite Xing;
public Sprite Ling;
public Sprite Ping;
public Sprite Mang;
public Sprite Xi;
public Sprite Knob;
public Sprite Cheng;/// <summary>
/// 积分
/// </summary>
public Text Z_JiFenText;
/// <summary>
/// 总积分
/// </summary>
public int Z_jifen_value;
/// <summary>
/// 判断积分
/// </summary>
/// <returns></returns>
public bool JiFen()
{Z_jifen_value = int.Parse(Z_JiFenText.text);if (Z_jifen_value > 0){Z_jifen_value--;Z_JiFenText.text = Z_jifen_value.ToString();return true;}else{TiShi_Txt.gameObject.transform.parent.gameObject.SetActive(true);TiShi_Txt.text = "已经没有积分";Invoke("TiShi_Cang", 2f);return false;}}
/// <summary>
/// 判断是否 投注
/// </summary> 购买积分
/// <returns></returns>
public bool Pan_YaZhu()
{if(LingV>0||MangV>0||PingV>0||XiV>0||XingV>0||ChengV>0){return true;}return false;
}
/// <summary>
/// 生成礼品图标
/// </summary>
public void LiPin()
{DaLuan_shuzi();for (int i = 0; i < luan_value.Count; i++){switch (luan_value[i]){ case 1:All_Tu[i].GetComponentInChildren<Text>().text = "50";All_Tu[i].GetComponent<Image>().sprite = Xing;break;case 2:All_Tu[i].GetComponentInChildren<Text>().text = "30";All_Tu[i].GetComponent<Image>().sprite = Ling;break;case 3:All_Tu[i].GetComponentInChildren<Text>().text = "10";All_Tu[i].GetComponent<Image>().sprite = Ping;break;case 4:All_Tu[i].GetComponentInChildren<Text>().text = "2";All_Tu[i].GetComponent<Image>().sprite = Mang;break;case 5:All_Tu[i].GetComponentInChildren<Text>().text = "100";All_Tu[i].GetComponent<Image>().sprite = Xi;break;case 6:YiBanJiang(i);break;case 7:YiBanJiang(i);break;case 8:YiBanJiang(i);break;case 9:YiBanJiang(i);break;case 10:YiBanJiang(i);break;default:All_Tu[i].GetComponentInChildren<Text>().text = "0";All_Tu[i].GetComponent<Image>().sprite = Knob;break;}}}
void YiBanJiang(int aa)
{All_Tu[aa].GetComponentInChildren<Text>().text = "1";All_Tu[aa].GetComponent<Image>().sprite = Cheng;
}
List<int> luan_value;
/// <summary>
/// 随机判断数字重复
/// </summary>
public void DaLuan_shuzi()
{luan_value = new List<int>();while (luan_value.Count < All_Tu.Count){int aa = Random.Range(0, All_Tu.Count);if (!luan_value.Contains(aa)){luan_value.Add(aa);}}}#endregion
#region 点击
/// <summary>
/// 提示 文本
/// </summary>
public Text TiShi_Txt;
/// <summary>
/// 点击开始
/// </summary>
public void PlayerButton()
{if (Pan_YaZhu()){if (S_P == false){//Z_jifen_value--;//Z_JiFenText.text = Z_jifen_value.ToString();suiji_shijian = Random.Range(0.3f, 0.6f);//随机生成滚动的时长diji_zu = 0;//确定是第几组图片sudu = 0.1f;//起始速度S_P = true;//运行跑状态FenPei();}}else{TiShi_Txt.gameObject.transform.parent.gameObject.SetActive(true);TiShi_Txt.text = "没有进行投注";Invoke("TiShi_Cang", 2f);}}
/// <summary>
/// 提示隐藏
/// </summary>
public void TiShi_Cang()
{TiShi_Txt.gameObject.transform.parent.gameObject.SetActive(false);
}
/// <summary>
/// 开始跑 到每一个照片组内一次奔跑
/// </summary>
public void FenPei()
{if (S_P){switch (diji_zu){case 0:StartCoroutine(showA(Grid[0], true));break;case 1:StartCoroutine(showA(Grid[1], true));break;case 2:StartCoroutine(showA(Grid[2], false));break;case 3:StartCoroutine(showA(Grid[3], false));break;}diji_zu++;//跑完一个这里增加一个 转回来就到下一组if (diji_zu >= 4)//如果大于4 就是跑完了  那么就是0要重头跑{diji_zu = 0;}}}
/// <summary>
/// 中奖的图片
/// </summary>
public tu_jiaoben zhong_obj;
/// <summary>
/// 跑的起始速度 会慢慢增加,也会慢慢慢下来
/// </summary>
float sudu = 0.2f;
/// <summary>
/// 携程  父对象Grid  正排序还是反排序
/// </summary>
/// <returns></returns>
IEnumerator showA(GridLayoutGroup gas,bool oo)
{if (oo){for (int i = 0; i < gas.transform.childCount; i++){//gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().TingLiu = false;gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().TimeA = sudu;gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().ji_huo = true;//gas[i].gameObject.GetComponent<tu_jiaoben>().ji_huo = true;sudu += 0.005f;//内部循环计算//在这里的yield会让改内部循环计算每帧执行一次,而不会等待10000次循环结束后再跳出yield return new WaitForSeconds(sudu);if (sudu >= suiji_shijian){gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().da();zhong_obj = gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>();sudu = 0;GetJiang(gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().wen_ben);S_P = false;}}}else{int jiji = gas.transform.childCount;for (int i = jiji-1; i >=0; i--){//gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().TingLiu = false;gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().TimeA = sudu;gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().ji_huo = true;//gas[i].gameObject.GetComponent<tu_jiaoben>().ji_huo = true;sudu += 0.005f;//内部循环计算//在这里的yield会让改内部循环计算每帧执行一次,而不会等待10000次循环结束后再跳出yield return new WaitForSeconds(sudu);if (sudu >= suiji_shijian){gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().da();zhong_obj = gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>();sudu = 0;GetJiang(gas.transform.GetChild(i).gameObject.GetComponent<tu_jiaoben>().wen_ben);S_P = false;}}}FenPei();//如果取消内部的yield操作,仅在for循环外边写yield操作,则会执行完10000次循环后再结束,相当于直接调用了一个函数,而非协程。}
#endregion

}
第三步、制作投注效果

图六、制作投注按钮
**实现效果:**点一下加一分、总分减少一分。
购买积分按钮、对总分增加10分、得分转移到总分。
以下脚本挂在 下注button上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class YaZhu_JiaoBen : MonoBehaviour {

// Use this for initialization
void Start () {transform.gameObject.GetComponentInChildren<Text>().text = textV.ToString();
}// Update is called once per frame
void Update () {}
public int textV = 0;
/// <summary>
/// 点击压住
/// </summary>
public void DianJi()
{if (ZhuanPan._insert.JiFen()){textV++;transform.gameObject.GetComponentInChildren<Text>().text = textV.ToString();ZhuanPan._insert.YaZhu(transform.gameObject.name, textV, transform.gameObject.GetComponentInChildren<Text>());}
}

}
未完善的功能
1.背景音乐没有
2.在运转中依然可以点击【水果转转】和【下注button】,不过这两个很好解决。
3.充值界面需要服务器,这里服务器功能脚本就不展示了。
4.不能做假。想实现这个功能,初步的想法是增加随机旋转的时长来跳过大奖

unity3d实现水果机(随机)跑马灯效果相关推荐

  1. 原生js的图片.文字.小框的跑马灯效果及弹幕效果

    笔者在最近的一个点上项目中使用原生js遇到一个跑马灯效果,需要图片循环播放,可以根据图片的多少改变一定的样式,从而实现跑马灯效果.于是把图片的,文字的和另一种小框的都整合了一下,顺便基于小框的跑马灯增 ...

  2. 圣诞节祝福小Demo:JingleBells背景音乐+礼物闪烁下落+跑马灯效果

    源码已经上传至我的github上:https://github.com/junmei520/MyChristmas 同时我在微博上也以视频的形式展示了Demo的运行效果:http://weibo.co ...

  3. html5视频播放器带ID跑马灯效果(视频防录屏)

    通过接口配置获取观看者信息,将观看者信息随机显示于视频播放界面(可自定义位置.时间.时长.及颜色等),在不影响观看体验的同时,让视频具备指纹信息. ID跑马灯可快速追踪被盗视频出处,方便第一时间对录屏 ...

  4. HarmonyOS 实现跑马灯效果

    跑马灯效果实现效果图 注意事项: HarmonyOS里面Text由于multiple_lines默认为false 所以我们可以直接来设置跑马灯效果,当想设置Text换行的时候设置multiple_li ...

  5. Android 使用 ellipsize 实现文字横向移动效果(跑马灯效果)

    实现的效果图如下 ellipsize 可以设置跑马灯效果 具体代码设置如下 <TextViewandroid:layout_width="match_parent"andro ...

  6. TextView实现跑马灯效果

    经常使用TextView会出现这样的情况,有限的空间内只能写一行,然后导致好多文字被"..."表示了,如图: 而且有可能是重要信息被隐藏了,于是就有了跑马灯效果. 实现方式很简单: ...

  7. 单行文字垂直/水平跑马灯效果

    需求描述 接到的需求是这样的:跑马灯效果 一次展示一行文字 循环滚动 文字滚动到视野中停留一秒后滚出. 静态效果如下图,文字从下往上或者从右往左滚动,滚动到此位置时停留一秒(不会传动图... 网络上有 ...

  8. c语言小程序跑马灯,微信小程序实现文字跑马灯效果

    本文实例为大家分享了微信小程序实现文字跑马灯的具体代码,供大家参考,具体内容如下 wxml 1 显示完后再显示 Box"> 2 出现白边后即显示 Box"> {{tex ...

  9. c语言小程序跑马灯,微信小程序实现跑马灯效果(完整代码)

    在微信小程序 里实现跑马灯效果,类似滚动字幕或者滚动广告之类的,使用简单的CSS样式控制,没用到JS,效果如下图: Wxml代码:一个人活着就是为了让更多的人更好的活着! Wxss代码:/*首页跑马灯 ...

  10. js实现横向跑马灯效果

    首先我们需要一个html代码的框架如下: <div style="position: absolute; top: 0px; left: 168px; width: 100%; mar ...

最新文章

  1. 智能连接:5G与人工智能、物联网等技术的超级融合
  2. DOM概述 选取文档元素
  3. 【01】网页中清除历史浏览记录能不能彻底删除浏览记录?
  4. JavaScript操作表格进行拖拽排序
  5. C++堆和栈详解(转)
  6. 使用WIM格式进行WES 7 (windows embedded standard )的安装
  7. 疑似苹果iPhone SE2手机最新渲染图曝光:后置单摄
  8. 司机行为识别_台州交警上线“闯红灯抓拍神器”人脸识别+4米大屏,拍到违章直接曝光...
  9. 如何正确使用日志Log
  10. ‮女的样么什‬人赚不到钱?͏
  11. 千年虫← 2000, 2020→千年虫现身Splunk 平台,立即修复!
  12. uboot驱动模型(DM)分析(二)
  13. 黑马python培训靠谱吗-黑马程序员的Python怎么样?
  14. 常用心理学实验刺激呈现软件介绍
  15. html按钮位置设置吗,html改变button按钮位置
  16. esp32-Arduino开发学习
  17. treemap倒叙_java对map进行排序(对日期倒叙)
  18. 使用Dockerfile集成python3 docker基础镜像
  19. 北京华宇南航宣讲面试
  20. 使用openSSL制作SSL证书

热门文章

  1. 输入年份和月份输出该月有多少天python_输入一个年份和月份,打印出该月份有多少天(考虑闰年),用switch语句编程...
  2. CUDA Occupancy Calculator中计算占用率
  3. PM、PO、PO、PMO、PMP的区别和介绍
  4. Mybatis一对一、一对多、多对多查询。+MYSQL
  5. 群晖 VMM虚拟机安装openwrt软路由做单臂旁路由
  6. python向量运算_Python线性代数学习笔记——向量的基本运算,以及Python代码的实现...
  7. 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
  8. c51单片机外部中断汇编语言,51单片机汇编语言外部中断笔记
  9. 51中断编程c语言,有关51单片机中断的形式和C语言编程格式[精选5篇]
  10. 关于peer‘s certificate issuer is not recognized问题的解决方法