unity卡池十连抽卡有限定概率的脚本
时间: 2023-09-04 18:11:43 浏览: 53
以下是一个简单的Unity卡池十连抽卡有限定概率的脚本,您可以根据自己的需求进行修改和优化。
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GachaSystem : MonoBehaviour
{
// 所有卡牌的列表
public List<Card> allCards;
// 当前卡池的列表
private List<Card> currentPool;
// 限定卡牌的列表
public List<Card> limitedCards;
// 十连抽的概率
public float tenDrawProbability;
// 当前已经抽到的卡牌数量
private int drawCount;
// 初始化当前卡池
private void InitializePool()
{
currentPool = new List<Card>();
currentPool.AddRange(allCards);
}
// 抽卡逻辑
public List<Card> DrawCards()
{
List<Card> drawnCards = new List<Card>();
// 在当前卡池中随机选择一张卡牌
Card drawnCard = currentPool[Random.Range(0, currentPool.Count)];
// 判断是否为限定卡牌
if(limitedCards.Contains(drawnCard))
{
Debug.Log("恭喜你抽到了限定卡牌!");
}
// 将抽到的卡牌添加到已抽到的卡牌列表中
drawnCards.Add(drawnCard);
// 抽卡次数加1
drawCount++;
// 如果抽卡次数达到10次,则进行十连抽概率的判断
if(drawCount % 10 == 0)
{
// 随机生成一个0-1之间的概率值
float probability = Random.Range(0f, 1f);
// 如果生成的概率值小于等于十连抽概率,则进行十连抽
if(probability <= tenDrawProbability)
{
for(int i = 0; i < 9; i++)
{
drawnCard = currentPool[Random.Range(0, currentPool.Count)];
drawnCards.Add(drawnCard);
drawCount++;
}
// 将十连抽的概率重置为初始值
tenDrawProbability = 0.1f;
}
else
{
// 如果没有进行十连抽,则将十连抽概率逐步增加,最大值为1
tenDrawProbability = Mathf.Min(tenDrawProbability + 0.1f, 1f);
}
}
// 从当前卡池中移除抽到的卡牌
currentPool.Remove(drawnCard);
return drawnCards;
}
}
// 卡牌类
[System.Serializable]
public class Card
{
public string name;
public int rarity;
public Sprite image;
}
```
在此脚本中,我们有一个包含所有卡牌的列表`allCards`,一个限定卡牌的列表`limitedCards`,以及一个表示十连抽概率的变量`tenDrawProbability`。
我们首先在`InitializePool`函数中初始化当前卡池,即将所有卡牌添加到当前卡池中。
当我们调用`DrawCards`函数进行抽卡时,首先在当前卡池中随机选择一张卡牌,判断是否为限定卡牌,并将抽到的卡牌添加到已抽到的卡牌列表中。然后判断是否达到十连抽次数,如果达到,则进行十连抽概率的判断。如果进行了十连抽,则将十连抽的概率重置为初始值;否则将十连抽概率逐步增加,最大值为1。最后从当前卡池中移除抽到的卡牌,并返回已抽到的卡牌列表。
请注意,此脚本仅提供了一个简单的抽卡逻辑,您需要根据自己的需求进行修改和优化。