原神抽卡模拟器,unity制作(由于没有获得作者的视频授权,不会发布软件,只展示算法与开发等,效果图在个人主页类有资源下载,不会上传视频)

本文介绍了使用Unity制作的原神抽卡模拟器,虽然不会发布软件,但探讨了抽卡机制背后的算法,参考了B站平衡树大佬的研究,提供了简易版算法的效果展示。
摘要由CSDN通过智能技术生成

      

五星效果图

以上为展示,没做优化

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Video;


public class OneGifi : Pond
{
     public void OneGift()
    {
        //抽奖即加一
        wuFloor += 1;
        siFloor += 1;



//五星出货区
        int wuI = 0;
        //默认出奖值
        if (wuFloor < 40)
            Random_rewards = Random.Range(10, 999);
        else if (wuFloor < 73) Random_rewards = Random.Range(8, 1000);
        R = (int)Random_rewards; Debug.Log(R);
        //判断五星是否出了
        if (Withdraw == true)
        {
            wuFloor = 0;
            Withdraw = false;
        }
        if (wuFloor < 73)
        {
            while (wuI < 6)
            {
                if (R == wuRewards[wuI])
                {

                    Withdraw = true;
                    wuFloor = 0;
                }
                wuI++;

            }
        }


        //当五星保底到73后用新算法
   
  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
系统的实现可以分为以下几个步骤: 1. 定义牌属性:包括牌名称、稀有度、片等。 2. 定义池:包括池名称、包含的牌列表、每种牌的出现概率等。 3. 实现逻辑:根据池中每种牌的出现概率,随机生成一张牌并返回给玩家。 下面是一个简单的Unity C#脚本示例: ```csharp using System.Collections.Generic; using UnityEngine; public class Card { public string name; public int rarity; public Sprite image; } public class CardPool { public string name; public List<Card> cards; public List<float> probabilities; } public class GachaSystem : MonoBehaviour { public List<CardPool> pools; public Card DrawCard(string poolName) { CardPool pool = pools.Find(p => p.name == poolName); if (pool == null) { Debug.LogError("Invalid pool name: " + poolName); return null; } float rand = Random.Range(0f, 1f); float probSum = 0; for (int i = 0; i < pool.probabilities.Count; i++) { probSum += pool.probabilities[i]; if (rand <= probSum) { return pool.cards[i]; } } Debug.LogError("Failed to draw card from pool: " + poolName); return null; } } ``` 在上面的脚本中,我们定义了一个Card类来表示牌属性,一个CardPool类来表示池,并实现了一个GachaSystem类来处理逻辑。具体实现中,我们首先在GachaSystem中定义了一个包含多个CardPool的列表pools,用来存储所有的池。然后,我们在GachaSystem中实现了一个DrawCard方法,用来从指定的池中随机取一张牌。在DrawCard方法中,我们首先通过poolName参数找到对应的池,然后根据每种牌的出现概率,随机生成一个0~1的随机数rand,并依次累加每种牌的出现概率,直到rand小于等于累加的概率和probSum,此时返回对应的牌即可。如果遍历完所有的牌后仍未能找到符合条件的牌,则返回null。 当我们需要使用系统时,只需要在场景中添加一个GachaSystem对象,并在Inspector面板中设置对应的池和牌信息即可。例如,下面是一个包含两个池的GachaSystem对象的Inspector设置: ![Unity Inspector设置示例](https://img-blog.csdnimg.cn/20211019102205996.png) 在上中,我们设置了两个池,分别为“普通池”和“精选池”,每个池中包含了若干张牌,并设置了每种牌的出现概率。在实际使用时,我们可以通过调用GachaSystem的DrawCard方法来进行操作,例如: ```csharp GachaSystem gachaSystem = FindObjectOfType<GachaSystem>(); Card card = gachaSystem.DrawCard("普通池"); if (card != null) { Debug.Log("到了一张牌:" + card.name); } ``` 上面的代码从名为“普通池”的池中随机取一张牌,并打印出牌名称。如果池名称无效或失败,则返回null并打印相应的错误信息。 以上是一个简单的Unity仿原神脚本示例,供参考。当然,具体的实现还需要根据实际需求进行调整和优化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值