日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity实现大转盘抽奖效果(可存储数据)

發(fā)布時(shí)間:2024/1/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity实现大转盘抽奖效果(可存储数据) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、演示效果

二、使用工具

Unity:2019.4.36
VS:2019

三、場景搭建

1、總體預(yù)覽

2、Scroll View設(shè)置


3、創(chuàng)建一個(gè)名叫StreamingAssets文件夾,在里面創(chuàng)建一個(gè)TestJson.json文件,用來存儲數(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è)人物所對應(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。