Unity实现大转盘抽奖效果(可存储数据)
生活随笔
收集整理的這篇文章主要介紹了
Unity实现大转盘抽奖效果(可存储数据)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、演示效果
二、使用工具
Unity:2019.4.36
VS:2019
三、場(chǎng)景搭建
1、總體預(yù)覽
2、Scroll View設(shè)置
3、創(chuàng)建一個(gè)名叫StreamingAssets文件夾,在里面創(chuàng)建一個(gè)TestJson.json文件,用來存儲(chǔ)數(shù)據(jù)
4、如需打包的話,需要將.Net改為4.0
四、代碼(掛載在空物體上)
using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using UnityEngine.UI; using System.IO; using Newtonsoft.Json;public class GameControl : MonoBehaviour {[SerializeField] //強(qiáng)制序列化private List<string> person = new List<string>(); //人物列表[SerializeField]private RectTransform rotateObj; //旋轉(zhuǎn)的物體public Button startBtn; //開始按鈕private int personNums; //人物的總數(shù)private int personAngle; //每個(gè)人物所對(duì)應(yīng)的角度private string filePath; //json文件的路徑public List<Data> datas = new List<Data>();private RectTransform ContentTrans;public GameObject prefab;private string CurrentTime; //當(dāng)前時(shí)間private float[,] TextColors = new float[6, 3] //創(chuàng)建一個(gè)二維數(shù)組,用來存放每個(gè)字體的顏色{{60,141,250},{241,102,151},{203,163,0},{63,199,255},{236,69,63},{55,218,85}};public Button ClearBtn; //一鍵清空按鈕// Start is called before the first frame updatevoid Start(){personNums = person.Count;personAngle = 360 / personNums;startBtn.onClick.AddListener(OnStartBtnClick); //給按鈕綁定事件filePath = Application.streamingAssetsPath + "/TestJson.json";ContentTrans = GameObject.Find("Canvas").transform.GetChild(1).GetChild(0).GetChild(0).GetComponent<RectTransform>();DataInit();ClearBtn.onClick.AddListener(OnClearBtnClick);}private void OnClearBtnClick(){for (int i = 0; i < ContentTrans.childCount; i++){Destroy(ContentTrans.GetChild(i).gameObject);}ContentTrans.sizeDelta = new Vector2(0, 120);string jsonData = File.ReadAllText(filePath);datas = JsonConvert.DeserializeObject<List<Data>>(jsonData);datas.Clear();string dataInfo = JsonConvert.SerializeObject(datas, Formatting.Indented);File.WriteAllText(filePath, dataInfo);}public void OnStartBtnClick(){startBtn.interactable = false; //禁用按鈕int index = Random.Range(0, personNums); //隨機(jī)獲取的人物int rotateNums = Random.Range(10, 20) * 360; //隨機(jī)旋轉(zhuǎn)的圈數(shù)//使用Dotween中的函數(shù),在6秒內(nèi)速度由慢到快再到慢rotateObj.DOLocalRotate(new Vector3(0, 0, rotateNums + index * personAngle), 6, RotateMode.FastBeyond360).SetEase(Ease.InOutCirc).OnComplete(() =>{CurrentTime = System.DateTime.Now.Year + "-" + string.Format("{0:00}", System.DateTime.Now.Month) + "-"+ string.Format("{0:00}", System.DateTime.Now.Day) + " " + string.Format("{0:00}", System.DateTime.Now.Hour)+ ":" + string.Format("{0:00}", System.DateTime.Now.Minute) + ":" + string.Format("{0:00}", System.DateTime.Now.Second);Data data = new Data();data.time = CurrentTime;data.people = person[index];datas.Add(data);AddList(data);string dataInfo = JsonConvert.SerializeObject(datas, Formatting.Indented); //序列化File.WriteAllText(filePath, dataInfo); //寫入文件});Invoke("actStartBtn", 6); //延遲6秒調(diào)用函數(shù)}private void actStartBtn(){startBtn.interactable = true; //激活按鈕}private void DataInit() //數(shù)據(jù)初始化{string jsonData = File.ReadAllText(filePath); //讀取文件中所有內(nèi)容if (jsonData == "[]") //判斷讀取的數(shù)據(jù)是否為空,{return;}datas = JsonConvert.DeserializeObject<List<Data>>(jsonData); //反序列化foreach (Data data in datas){AddList(data);}}private void AddList(Data data) //創(chuàng)建Text組件{int i = 0;if (ContentTrans.childCount > 3){ContentTrans.sizeDelta = new Vector2(0, ContentTrans.rect.height + 30);}GameObject t = Instantiate(prefab); //實(shí)例化t.transform.SetParent(ContentTrans, false); //給剛剛實(shí)例化的物體設(shè)置父物體t.transform.SetSiblingIndex(0); //設(shè)置實(shí)例化物體的索引位置,讓實(shí)例化的物體一直處在第一個(gè)t.GetComponent<Text>().text = data.time + " 恭喜您獲得" + data.people + "!";foreach(string s in person) //循環(huán)遍歷列表,判斷當(dāng)前人物的元素位置{if(s==data.people){break;}i++;}t.GetComponent<Text>().color = new Color(TextColors[i, 0] / 255, TextColors[i, 1] / 255, TextColors[i, 2] / 255); //改變字體的顏色}public class Data{public string time;public string people;} }五、項(xiàng)目鏈接
鏈接:https://pan.baidu.com/s/1QEiqoNtWMUYAEVS0vArKbQ
提取碼:d6xt
總結(jié)
以上是生活随笔為你收集整理的Unity实现大转盘抽奖效果(可存储数据)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客制化键盘编程_【故事汇】客制化键盘讲解
- 下一篇: iOS苹果手机上最好用的3个azw3阅读