📢前言
🎬转盘抽奖小程序制作
首先来说一下转盘抽奖小程序 的组成。
转盘抽奖 主要是由两部分组成,一个是转盘,另一个是指针。
旋转的逻辑也有两种,一个是指针不动,转盘旋转;另一个则是转盘不动,指针旋转。
不论是哪种情况,其实原理都是一样的,我们只需要把旋转的物体改成我们想要的那个即可。
所以这里采用一个 指针固定,转盘旋转 的思路整起!
下面就来一步一步的介绍一下这个转盘抽奖小程序的制作过程吧!
🏳??🌈第一步:打开UnityHub新建一个Unity工程
新建工程这一步就不做过多解释了,要做饭先买菜! 打开UnityHub 新建一个工程,Unity版本随意,然后等待工程加载完毕。 然后在Assets 下新建一个Scene场景 和一个Scripts脚本 。 准备过程完毕,下面开始制作这个转盘抽奖的小项目!
🏳??🌈第二步:搭建一个简单的转盘抽奖UI
既然是转盘抽奖,那么我们首先来搭建一个简单的抽奖UI画面!
来看一下我简单搭建的一个UI,有一个转盘 和 指针,和一个开始抽奖和停止抽奖的按钮。 看起来很简陋没关系!我们先把架子搭建起来,然后后面可以找素材一键换上即可!
只要把转盘抽奖的关键元素添加上即可,这里的关键元素就是指的 转盘 和 指针
🏳??🌈第三步:写转盘抽奖的脚本代码
既然是小项目,那自然代码是必不可少的一部分。
下面我们就来写一下这个转盘抽奖的脚本代码怎么写吧。
直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class zDemo : MonoBehaviour
{
public enum RollState
{
None,
SpeedUp,
SpeedDown,
End
}
public Transform RollPanel;
public Button startButton;
RollState curState;
float allTime = 0;
#region 变速段
float MaxSpeed = 1000;
float factor;
float accelerateTime = 1;
float speedUpTime = 3;
float bufferSpeed=1;
#endregion
void Start()
{
startButton.onClick.AddListener(StartTurnWheel);
}
void Update()
{
if (curState == RollState.None)
{
return;
}
allTime += Time.deltaTime;
if (curState == RollState.SpeedUp)
{
factor = allTime / accelerateTime;
factor = factor > 1 ? 1 : factor;
Debug.Log("在加速中:" + factor);
RollPanel.Rotate(new Vector3(0, 0, -1) * factor * MaxSpeed * Time.deltaTime, Space.Self);
}
if (allTime >= speedUpTime && curState == RollState.SpeedUp)
{
bufferSpeed -= Time.deltaTime;
bufferSpeed = bufferSpeed > 0 ? bufferSpeed : 0;
Debug.Log("在减速中:"+ bufferSpeed);
RollPanel.Rotate(new Vector3(0, 0, -1) * bufferSpeed * 500 * Time.deltaTime, Space.Self);
if (bufferSpeed <= 0)
{
curState = RollState.SpeedDown;
}
}
if (curState == RollState.SpeedDown)
{
Debug.Log("转盘停止了!");
curState = RollState.None;
bufferSpeed = 1;
}
}
public void StartTurnWheel()
{
if (curState != RollState.None)
{
return;
}
allTime = 0;
curState = RollState.SpeedUp;
}
}
将脚本挂在场景中的Canvas上,然后将开始抽奖的Button赋值。
还有转盘的游戏对象也要拖到脚本中去,然后就可以运行程序看一下效果了!
效果演示如下: 上面这个脚本代码已经可以对转盘进行转动了。
但是他只是随机进行一个转动,我们并不能控制它的旋转角度。
也就是说在转盘的各个角度的概率都是相同的。
但是这咋行呢!这也太公平了,大奖岂不是都要被别人拿走了!
所以请看下一步改进代码,增加抽奖概率!
🏳??🌈第四步:改进抽奖机制,增加可控抽奖概率
我们对脚本代码进行改进,必须增加一个任务控制的概率才可以!
顺便找一个转盘的素材给他换上,只需要更改转盘和指针即可!
改进后的脚本代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewLuckyRoll : MonoBehaviour
{
public enum RollState
{
None,
SpeedUp,
SpeedDown,
End
}
public GameObject ResultUI;
public Text resultTxt;
public Transform RollPanel;
public Button startBtn;
RollState curState;
int rollID;
float allTime = 0;
float endAngle;
#region 变速段
float MaxSpeed = 1500;
float factor;
float accelerateTime = 1;
float speedUpTime = 3;
float tempAngle;
float k = 2f;
#endregion
void Start()
{
rollID = 0;
ResultUI.SetActive(false);
startBtn.onClick.AddListener(StartTurnWheel);
}
void Update()
{
if (curState == RollState.None)
{
return;
}
allTime += Time.deltaTime;
if (curState == RollState.SpeedUp)
{
factor = allTime / accelerateTime;
factor = factor > 1 ? 1 : factor;
RollPanel.Rotate(new Vector3(0, 0, -1) * factor * MaxSpeed * Time.deltaTime, Space.Self);
}
if (allTime >= speedUpTime && curState == RollState.SpeedUp)
{
curState = RollState.SpeedDown;
tempAngle = GetTempAngle();
Debug.Log("tempAngle:" + tempAngle);
}
if (curState == RollState.SpeedDown)
{
tempAngle = Mathf.Lerp(tempAngle, endAngle, Time.deltaTime * k);
RollPanel.rotation = Quaternion.Euler(0, 0, tempAngle);
if (Mathf.Abs(tempAngle - endAngle) <= 1)
{
curState = RollState.None;
ResultUI.SetActive(true);
}
}
}
public void StartTurnWheel()
{
ResultUI.SetActive(false);
if (curState != RollState.None)
{
return;
}
allTime = 0;
tempAngle = 0;
rollID = GetRandomID();
Debug.Log("rollID: " + rollID);
endAngle = (-1) * rollID * 55;
curState = RollState.SpeedUp;
}
private float GetTempAngle()
{
Debug.Log("RollPanel.eulerAngles.z: " + RollPanel.eulerAngles.z);
return (360 - RollPanel.eulerAngles.z) % 360;
}
private int GetRandomID()
{
int id = 0;
int a = Random.Range(0, 100);
if (a <= 1)
{
id = 6;
resultTxt.text = "恭喜你获得1G流量";
}
else if (1 < a && a <= 3)
{
id = 5;
resultTxt.text = "恭喜你获得500M流量";
}
else if (3 < a && a <= 10)
{
id = 4;
resultTxt.text = "恭喜你获得100M流量";
}
else if (10 < a && a <= 30)
{
id = 10;
resultTxt.text = "恭喜你获得50M流量";
}
else if (30 < a && a <= 60)
{
id =9;
resultTxt.text = "恭喜你获得30M流量";
}
else
{
id = 8;
resultTxt.text = "恭喜你获得10M流量";
}
return id;
}
}
效果如下:
好咧,一个简单的抽奖旋转就写好了,换上一个简单的UI之后还是有模有样的!
代码增加了一个抽奖概率 ,在我们点击抽奖的那一刻,其实奖品就已经有结果了。
只不过是增加了一个转圈的过程耽误我们的时间罢了。
而且在抽奖的角度来说,每一个奖项的概率应该都是一样的,毕竟是六等分!
但是我们在代码中早已经加了一个概率,抽中最大奖项的概率只有1%
所以说我们有时候表面上看到的公平其实都是假象 !
在背地里的概率早都已经写好了,就等着你入坑呢。
🎁源码工程下载
这个转盘抽奖的小程序就算写完了,源码工程在这里,有需要的下载体验即可。
转盘抽奖小项目下载地址:https://download.csdn.net/download/zhangay1998/68820401
👥总结
- 本篇文章制作了一个简单的
《大转盘抽奖》 小程序 - 只需要一个脚本就可以搞定了,是不是很简单又实用呢!
- 有了这个转盘抽奖的小项目,我们就可以在抽奖的时候进行使用了。
- 可以将UI换上我们自己的奖品,然后使用代码自定义抽奖概率。
- 这样一个简单的转盘小程序就完成了,抽奖概率还可以自己掌控。
- 那本篇文章就到这里结束了,喜欢的话记得点一波
三连 哦!
🚀往期优质文章分享
- 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
- 🎄比如以下几个专栏:Unity基础知识学习专栏、Unity游戏制作专栏、Unity实战类项目 和 算法学习专栏
- 🎄可以学习更多的关于Unity引擎的相关内容哦!直接点击下面颜色字体就可以跳转啦!
?? 游戏制作专栏 ??
🧡 Unity系统学习专栏 🧡
💛 Unity实战类项目 💛
💚 算法千题案例 💚
💙 Python零基础到入门 💙
【游戏开发爱好者社区】活动进行中,每周打卡送书籍等礼品,期待你的加入
【游戏开发爱好者社区】在本周重磅新推出【每日打卡】活动
🎁 新玩法,奖励升级!游戏开发爱好者社区:https://bbs.csdn.net/forums/unitygame
社区中心思想:今天你学到了什么?
在社区你可以做些什么: 每日强化知识点,白嫖书籍礼品!
一个人可以走的很快,一群人才能走的更远!🔥爆C站的游戏开发爱好者社区欢迎您的加入!
本期送书如下: 《Unity 实战(第2版)》京东链接:https://item.jd.com/12498427.html
- 介绍如何使用Unity编写游戏。有经验的程序员可以把它当成Unity的入门书籍。本书的目标十分明确:带领有一些编程经验但没有Unity经验的读者使用Unity开发游戏。
- 讲授开发1好的方式是完成示例项目,学生通过制作示例来学习,这正是本书采用的方式。本书的各个主题展现为构建游戏示例的步骤,当浏览本书时,鼓励读者在Unity中构建这些游戏。每几章挑选不同的项目来讲解,而不是整本书只开发一个项目。其他有些书籍采用“一个完整项目”的方法讲解,不足之处是如果对前面的章节不感兴趣,就很难跳到中间的章节。
- 《Unity 实战(第2版)》比大多数Unity书籍(特别是入门书籍)有更严格的编程内容。如果不知道如何编写计算机程序,1好先使用Codecademy之类的资源学习,在学会如何编写程序之后再回到本书。
- 不要担心具体的编程语言,本书大量使用了C#,也可以使用其他语言的技能。本书的第Ⅰ部分会花时间介绍新的概念,会小心谨慎、一步一步地在Unity中开发第1款游戏,但剩下的章节将更快速地推进,让读者了解多个游戏类型。本书1后会描述部署到各种平台(如Web和移动平台),但本书的主旨不会提及1终的部署目标,因为Unity与平台无关。
- 至于游戏开发的其他方面,广泛覆盖的美术学科会稀释本书涵盖的Unity知识,加大Unity外部软件(例如,所使用的动画软件)的比重。关于美术任务的讨论将仅限于Unity或所有游戏开发者都应该知道的方面。
《Python爬虫与反爬虫开发从入门到精通 》京东链接:https://item.jd.com/13345900.html
- 学爬虫:知原理,抓数据,做分析,用自动化解放双手
- 会反爬:懂框架,会部署,见招拆招,攻防兼备
- 在攻与防的对立统一中寻求爬虫技术突破
更多白嫖活动详情:https://bbs.csdn.net/forums/unitygame?typeId=19603
温馨提示: 点击下面卡片可以获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!
|