unity开发 宝箱掉落与产出
生活随笔
收集整理的這篇文章主要介紹了
unity开发 宝箱掉落与产出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面展示 寶箱掉落與產出。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; namespace MR_LBS.Client.Unity3D {public class CardFall{private string sort;private int count;public string Sort { get => sort; set => sort = value; }public int Count { get => count; set => count = value; }}/// <summary>/// 戰斗掉落寶箱類型/// </summary>public enum BoxFallType{Unkonw = 0,woodBox_D = 1,//木寶箱woodBox_C = 2,//木寶箱woodBox_B = 3,//木寶箱woodBox_A = 4,//木寶箱silverBox = 5,//銀寶箱goldBox = 6,//金寶箱DiamondsBox = 7,//鉆石寶箱CoinBox = 8,//財神寶箱Box_S = 9//S寶箱}public class BoxFall{private BoxFallType boxFallType;private List<BoxFallCard> cardList;private int coinNum;private string iocnName;public BoxFallType BoxFallType { get => boxFallType; set => boxFallType = value; }public int CoinNum { get => coinNum; set => coinNum = value; }public List<BoxFallCard> CardList { get => cardList; set => cardList = value; }public string IocnName { get => iocnName; set => iocnName = value; }}public class BoxFallCard{private Monster monster;private int count;public int Count { get => count; set => count = value; }public Monster Monster { get => monster; set => monster = value; }}public class BattleSplitController : MonoBehaviour{public static BattleSplitController instance;/// <summary>/// 掉落卡牌列表/// </summary>public List<CardFall> cardFallList = new List<CardFall>();public List<BoxFall> boxFallList = new List<BoxFall>();/// <summary>/// 玩家不同等級解鎖的靈獸類型/// 前6個是1級,7-12是2級,其余是3級/// 3001代表建筑卡001/// </summary>private int[] unlockCardList = { 1, 2, 4, 7, 11, 15, 3, 5, 6, 8, 13, 14, 9, 10, 12, 3001 };/// <summary>/// 使用的列表下標,根據玩家等級控制/// </summary>private int unlockCardList_index = 5;/// <summary>/// 寶箱預設體/// </summary>private GameObject fallBoxPrefab;/// <summary>/// 卡牌預設體/// </summary>private GameObject fallcardPrefab;BattleController battleCon;private void Awake(){instance = this;fallBoxPrefab = Resources.Load<GameObject>("Objects/FallBoxPrefab");fallcardPrefab = Resources.Load<GameObject>("Objects/FallCardPrefab");}void Start(){}/// <summary>/// 玩家不同等級解鎖的靈獸類型/// </summary>public void UnlockCardList(){if (battleCon.petMonsterType.Level == 1){unlockCardList_index = 6;}else if (battleCon.petMonsterType.Level == 2){unlockCardList_index = 12;}else if (battleCon.petMonsterType.Level >= 3){unlockCardList_index = unlockCardList.Length - 1;}}/// <summary>/// 對戰時,對方靈獸死亡掉落卡牌和寶箱幾率的最大積數,5即代表1/5/// </summary>private int cardFallProbability = 5;private int cardNumLimit_Min = 17;//卡牌掉落數量限制private int cardNumLimit_Max = 32;private int coinNumLimit_Min = 360;//寶箱金幣掉落數量限制private int coinNumLimit_Max = 1700;/// <summary>/// 敵方非S靈獸死亡掉落物品事件/// </summary>public void DieFallControl(string sort, Vector3 initPos){if (Random.Range(0, cardFallProbability) == 1){FallCard_MonsterDie(sort, initPos);}}/// <summary>/// 敵方S靈獸死亡掉落寶箱事件/// </summary>/// <param name="initPos">寶箱生成位置</param>public void DieFallControl(Vector3 initPos){FallBox_MonsterDie(initPos);//if (Random.Range(0, cardFallProbability) == 1)//{// FallBox_MonsterDie(initPos);//}}public void FallCard_MonsterDie(string sort, Vector3 initPos){GameObject tempFall = Instantiate(fallcardPrefab, initPos, fallcardPrefab.transform.rotation);//tempFall.GetComponent<SpriteRenderer>().sprite = //tempFall.transform.Find("Icon").GetComponent<SpriteRenderer>().sprite =//tempFall.transform.Find("Num").GetComponent<Text>().text =StartCoroutine(FallMoveControl(tempFall));bool getSign = false;foreach (var temp in cardFallList){if (temp.Sort == sort){temp.Count++;getSign = true;break;}}if (!getSign){CardFall cardFalls = new CardFall();cardFalls.Sort = sort;cardFalls.Count = 1;cardFallList.Add(cardFalls);}}public void FallBox_MonsterDie(Vector3 initPos){BoxFall boxFalls = new BoxFall();BoxAddEvent(boxFalls);//GameObject tempFall = Instantiate(fallBoxPrefab, initPos, fallBoxPrefab.transform.rotation);//tempFall.transform.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("UserInterface/" + boxFalls.IocnName);//StartCoroutine(FallMoveControl(tempFall));}public void FallBox_Result(){BoxFall boxFalls = new BoxFall();BoxAddEvent(boxFalls);//結算面板展示//GameObject tempFall = Instantiate(fallBoxPrefab, initPos, fallBoxPrefab.transform.rotation);//tempFall.transform.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("UserInterface/" + boxFalls.IocnName);//StartCoroutine(FallMoveControl(tempFall));}IEnumerator FallMoveControl(GameObject fallPrefab){yield return new WaitForSeconds(1);fallPrefab.transform.DOMove(MainView.instance.fallRewardImage.position, 1);}/// <summary>/// 隨機寶箱,添加到結算列表/// </summary>public void BoxAddEvent(BoxFall boxFalls){//隨機寶箱類型int randomTemp = Random.Range(1, 1001);if (randomTemp < 800){boxFalls.BoxFallType = BoxFallType.woodBox_D;BoxToReward(boxFalls, 20, 100, 7, 19, 5, 6, 3, 4, 2, 3, 0, 0);boxFalls.IocnName = "ic_chest_wood1";}else if (randomTemp >= 800 && randomTemp < 883){boxFalls.BoxFallType = BoxFallType.woodBox_C;BoxToReward(boxFalls, 20, 100, 0, 0, 17, 32, 0, 0, 0, 0, 0, 0);boxFalls.IocnName = "ic_chest_c1";}else if (randomTemp >= 883 && randomTemp < 936){boxFalls.BoxFallType = BoxFallType.woodBox_B;BoxToReward(boxFalls, 20, 100, 0, 0, 0, 0, 17, 32, 0, 0, 0, 0);boxFalls.IocnName = "ic_chest_b1";}else if (randomTemp >= 936 && randomTemp < 959){boxFalls.BoxFallType = BoxFallType.woodBox_A;BoxToReward(boxFalls, 20, 100, 0, 0, 0, 0, 0, 0, 17, 32, 0, 0);boxFalls.IocnName = "ic_chest_a1";}else if (randomTemp >= 959 && randomTemp < 979){boxFalls.BoxFallType = BoxFallType.silverBox;BoxToReward(boxFalls, 101, 200, 13, 26, 10, 12, 7, 9, 3, 5, 0, 0);boxFalls.IocnName = "ic_chest_silver1";}else if (randomTemp >= 979 && randomTemp < 989){boxFalls.BoxFallType = BoxFallType.goldBox;BoxToReward(boxFalls, 201, 300, 21, 31, 16, 19, 11, 14, 5, 8, 0, 0);boxFalls.IocnName = "ic_chest_gold1";}else if (randomTemp >= 989 && randomTemp < 994){boxFalls.BoxFallType = BoxFallType.DiamondsBox;BoxToReward(boxFalls, 301, 400, 29, 36, 22, 26, 15, 19, 7, 11, 0, 0);boxFalls.IocnName = "ic_chest_jewel1";}else if (randomTemp >= 994 && randomTemp < 999){boxFalls.BoxFallType = BoxFallType.CoinBox;BoxToReward(boxFalls, 360, 1700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);boxFalls.IocnName = "ic_chest_wealth1";}else{boxFalls.BoxFallType = BoxFallType.Box_S;BoxToReward(boxFalls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);boxFalls.IocnName = "ic_chest_s1";}Debug.Log(boxFalls);boxFallList.Add(boxFalls);}/// <summary>/// 寶箱轉化成獎勵/// </summary>public void BoxToReward(BoxFall boxFalls, int coinMin, int coinMax, int numMin_D, int numMax_D, int numMin_C, int numMax_C, int numMin_B, int numMax_B, int numMin_A, int numMax_A, int numMin_S, int numMax_S){List<BoxFallCard> boxFallCard = new List<BoxFallCard>();boxFalls.CardList = boxFallCard;boxFalls.CoinNum = Random.Range(coinMin / 10, (coinMax / 10) + 1);//拆分的對戰無地雷,金幣除以10RandomReward(boxFallCard, RareGrade.D, numMin_D, numMax_D);RandomReward(boxFallCard, RareGrade.C, numMin_C, numMax_C);RandomReward(boxFallCard, RareGrade.B, numMin_B, numMax_B);RandomReward(boxFallCard, RareGrade.A, numMin_A, numMax_A);RandomReward(boxFallCard, RareGrade.S, numMin_S, numMax_S);}/// <summary>/// 戰斗結束寶箱結算/// </summary>public void OpenBoxEvent(){}/// <summary>/// 戰斗結束寶箱結算/// </summary>public void BoxResult(){}public void CardFallUpdate(){}/// <summary>/// 隨機寶箱獎勵/// </summary>/// <param name="rareGrade"></param>/// <param name="numMin"></param>/// <param name="numMax"></param>private void RandomReward(List<BoxFallCard> boxFallCardList, RareGrade rareGrade, int numMin, int numMax){int num = Random.Range(numMin, numMax);for (int i = 0; i < num; i++){//從解鎖池中隨機拿一個sortstring sort = GetSort(rareGrade);Debug.Log(sort);//判斷此寶箱中是否已有當前卡牌bool have = false;foreach (var temp in boxFallCardList){if (temp.Monster.Sort == sort){temp.Count++;have = true;break;}}if (!have){BoxFallCard boxFallCard = new BoxFallCard();Monster monster = new Monster();boxFallCard.Monster = monster;monster.Sort = sort;monster.RareGrade = rareGrade;boxFallCard.Count = 1;boxFallCardList.Add(boxFallCard);}}}/// <summary>/// 隨機生成一張卡牌/// </summary>/// <param name="rareGrade"></param>/// <returns></returns>public string GetSort(RareGrade rareGrade){int sortTemp = unlockCardList[Random.Range(0, unlockCardList_index)];string sort = "";if (rareGrade != RareGrade.S){if (sortTemp < 1000){sort = (sortTemp * 4 + 1 - rareGrade).ToString();if (sort.Length == 1)sort = "10100100" + sort;else if (sort.Length == 2)sort = "1010010" + sort;elsesort = "101001" + sort;}//建筑else{sort = (sortTemp * 4 + 1 - rareGrade).ToString();if (sort.Length == 1)sort = "10100300" + sort;else if (sort.Length == 2)sort = "1010030" + sort;elsesort = "101003" + sort;}}else{if (sortTemp < 1000){//sort = (sortTemp * 4 -1).ToString();if (sort.Length == 1)sort = "10100200" + sort;else if (sort.Length == 2)sort = "1010020" + sort;elsesort = "101002" + sort;}//建筑else{//sort = (sortTemp * 4 -1).ToString();if (sort.Length == 1)sort = "10100400" + sort;else if (sort.Length == 2)sort = "1010040" + sort;elsesort = "101004" + sort;}}return sort;}} }總結
以上是生活随笔為你收集整理的unity开发 宝箱掉落与产出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android10代码开启横幅通知,An
- 下一篇: 谷歌聘请 macOS 老兵操盘新操作系统