团结实现简单抽奖系统

  

这段时间工作比较空闲,想做个抽奖系统,发现网上的抽奖系统看不懂,然后自己做了一个可以随意定义奖品概率,不管什么时候停下来指针最终都会转到指定的奖品哪。

  

废话不多说,动手一步一步来。

  

这个抽奖系统就使用了两张图片,一个指针,一个圆形的图片。

  

团结实现简单抽奖系统

  

然后做一个预制体、图片就是圆形图片、图像类型选择,填充量控制这个图片的面积大小,同时也是该图片的概率,文本组件是该奖品的名称。

  

团结实现简单抽奖系统

  

再接下来就做一下界面布局的工作

  

团结实现简单抽奖系统

  

Bg就是那个灰色的图片,旋转是个空物体,用来挂在脚本的(DialRotate.cs和Slot.cs), cloneParent也是个空物体,作为预制体的父物体,要注意的是cloneParent中心那个蓝色的圆圈要和旋转的蓝色的圈的位置一致,界面布局工作完成。

  

接下来到代码了,Slot.cs脚本,一开始会实例化奖品,K键和L键可以随意修改奖品名称,概率(这里概率做了限制,需要使用的自己修改一下代码即可),空格键会随机抛出物品,并且开始旋转,鼠标右键是停止转动(想什么时候停下来都行,最后都会得到所抛出的物体)DialRotate.cs脚本用于处理旋转的。这两个脚本涉及到一些数学计算,慢慢理解即可。

  

团结实现简单抽奖系统

  

团结实现简单抽奖系统

  

以下是这个工程的脚本,需要的话直接复制黏贴即可使用

  

Slot.cs    

        使用System.Collections.Generic;   使用UnityEngine;   使用UnityEngine.UI;      公共类槽:MonoBehaviour {      私人DialRotate DialRotate;///& lt; summary>///奖品数据///& lt;/summary>   私有类GrifData   {///& lt; summary>///奖品的名称///& lt;/summary>   公共字符串多行文字;///& lt; summary>///图片的数量值///& lt;/summary>   公共浮动点;///& lt; summary>///奖品停留在指针时父物体要旋转的角度///& lt;/summary>   公共浮动角;///& lt; summary>///该奖品对应的UI面板上的名称///& lt;/summary>   公共字符串mtran;///& lt; summary>///该奖品的ID///& lt;/summary>   公共int gID;   }///& lt; summary>///奖品的描述信息///& lt;/summary>   私有类GrifInfo   {   公共文本多行文字;   公共字符串味精;   }      私人ListmListSD=new List ();///& lt; summary>///奖品的id和概率对应///& lt;/summary>   私人DictionarymPoints=new Dictionary ();///& lt; summary>///用于储存奖品信息(顺序排列)(奖品的id,名称,所占的百分比)///& lt;/summary>   私人ListgrigtData=https://www.yisu.com/zixun/new列表 ();>///<总结///这个也是用于储存奖品信息,不过是乱序排列(奖品的id,名称,所占的百分比)>/// randomData=new ();>///<总结///20种奖品的变换,(最多20个不用的奖励)>/// mTransLs=new <变换> ();      私人列表<色调> mColors=new <颜色> ();      私人变换cloneParent;   私人GameObject clonePrefab;>///<总结///抽奖停止时父物体转动的角度>//////<总结///该奖品对应的UI面板上的名称>//////<总结///用于检验概率有没有为100%>/// checkProbability=new <飘> ();      私人空间Start ()   {   cloneParent=transform.Find (“cloneParent”);   clonePrefab=Resources.Load(“克隆”);   dialRotate=GetComponent ();   Init ();   }   无效的更新()   {   #地区测试修改奖品,概率   如果(Input.GetKeyDown (KeyCode.K))   {   ClearData ();   如果(checkProbability。数比;0)   {   checkProbability.Clear ();   }   如果(mPoints。数比;0)   {   mPoints.Clear ();   }   AddData (“111”, 0.3 f, 1);   AddData (“222”, 0.1 f, 2);   AddData (“333”, 0.2 f, 4);   AddData (“444”, 0.05 f, 5);   AddData (“555”, 0.15 f, 6);   AddData (“666”, 0.2 f, 7);   SetPriceRange ();   }   如果(Input.GetKeyDown (KeyCode.J))   {   ClearData ();   如果(checkProbability。数比;0)   {   checkProbability.Clear ();   }   如果(mPoints。数比;0)   {   mPoints.Clear ();   }   AddData(“薯条”,0.3度,1);   AddData(“汉堡”,0.1度,2);   AddData(“炸鸡”,0.2度,4);   AddData(“啤酒”,0.05度,5);   AddData(“可乐”,0.15度,6);   AddData(“烤的肉”,0.2度,7);   SetPriceRange ();   }   # endregion   如果(Input.GetKeyDown (KeyCode.Space))   {   StartRotate ();   }   }   私人空间Init ()   {   for (int i=0;我& lt;20;我+ +)   {   GameObject GameObject=去实例化(clonePrefab);   go.transform.SetParent (cloneParent);   go.transform。localScale=Vector3.one;   go.transform。localPosition=Vector3.zero;   go.name=" + i;   mTransLs.Add (go.transform);   }   foreach (mTransLs变换tr)   {   tr.GetComponent

团结实现简单抽奖系统