unity抽卡保底算法
时间: 2023-07-10 14:10:07 浏览: 230
Unity抽奖系统Demo
抽卡保底算法是在抽卡时,保证在一定次数内必定得到指定物品的算法。以下是一个简单的抽卡保底算法脚本:
```
using UnityEngine;
using System.Collections.Generic;
public class DrawCard : MonoBehaviour
{
public List<Card> cards;
public int drawCount;
public float baseProbability;
public float probabilityIncrease;
public int guaranteeCount; //保底次数
public Card guaranteeCard; //保底卡牌
private int drawCountSinceLastGuarantee; //上一次保底以来抽卡次数
private float currentProbability;
void Start()
{
drawCountSinceLastGuarantee = 0;
currentProbability = baseProbability;
}
public List<Card> Draw()
{
List<Card> result = new List<Card>();
for (int i = 0; i < drawCount; i++)
{
if (Random.Range(0f, 1f) <= currentProbability)
{
//随机抽到一张卡
Card card = cards[Random.Range(0, cards.Count)];
result.Add(card);
//重置概率和计数器
currentProbability = baseProbability;
drawCountSinceLastGuarantee = 0;
//如果抽到了保底卡牌,直接返回结果
if (card == guaranteeCard)
{
return result;
}
}
else
{
//没有抽到卡,增加概率和计数器
currentProbability += probabilityIncrease;
drawCountSinceLastGuarantee++;
//如果达到了保底次数,强制抽到保底卡牌
if (drawCountSinceLastGuarantee >= guaranteeCount)
{
result.Add(guaranteeCard);
currentProbability = baseProbability;
drawCountSinceLastGuarantee = 0;
}
}
}
return result;
}
}
[System.Serializable]
public class Card
{
public string name;
public int rarity;
}
```
在这个脚本中,我们新增了两个属性:保底次数和保底卡牌。在每次抽卡之前,我们会将上一次保底以来抽卡次数和当前概率重置为0。在每次抽卡时,如果抽到了保底卡牌,我们直接返回结果。如果没有抽到保底卡牌,我们会增加当前概率和抽卡次数,并检查是否达到了保底次数。如果达到了保底次数,我们会强制抽到保底卡牌并重置计数器和概率。
使用这个脚本,你需要将所有可抽取的卡存储在cards列表中,并设置保底次数和保底卡牌。然后调用Draw方法来进行抽卡。例如,你可以在一个按钮的OnClick事件中调用Draw方法,并将结果显示在UI中。
阅读全文