You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity安卓点击器游戏超大数据存储方案咨询(兼容PlayerPrefs)

解决方案

1. 替换数值存储类型为BigInteger

C#的System.Numerics.BigInteger支持任意长度整数,完全满足100位数值需求,先在代码顶部引入命名空间:

using System.Numerics;

2. 修改主脚本(代码1)

仅替换变量类型、调整PlayerPrefs读写逻辑,保留原有核心功能:

using UnityEngine;
using UnityEngine.UI;
using System.Numerics;

public class MoneyManager : MonoBehaviour
{
    public Text moneyText;
    // 替换为BigInteger类型,支持超大数值
    public BigInteger money;
    public BigInteger moneyPerClick = 1000000;

    void Start()
    {
        // 从PlayerPrefs读取字符串并转为BigInteger,默认值为0
        string savedMoney = PlayerPrefs.GetString("money", "0");
        BigInteger.TryParse(savedMoney, out money);
        
        string savedPerClick = PlayerPrefs.GetString("moneyPerClick", "1000000");
        BigInteger.TryParse(savedPerClick, out moneyPerClick);
    }

    void Update()
    {
        // 调用新增的BigInteger格式化方法
        moneyText.text = FormatNumbers.formatNumber(money);
    }

    public void Click()
    {
        money += moneyPerClick;
        // 将BigInteger转为字符串存入PlayerPrefs
        PlayerPrefs.SetString("money", money.ToString());
    }
}

注:修复了原代码中Clik的拼写错误为Click

3. 最小化修改格式化脚本(代码2)

新增一个接收BigInteger的重载方法,完全复用原有format_name数组和格式化逻辑,几乎不改动原有代码:

using System.Numerics;

public static class FormatNumbers
{
    public static string[] format_name = new[]
    {
        "", "K", "M", "t", "q", "Q", "s", "S", "o", "n", "d", "U", "D", "T", 
        "Qt", "Qd", "Sd", "St", "O", "N", "v", "c"
    };

    // 保留原有float版本,兼容旧逻辑
    public static string formatNumber(float num)
    {
        if (num == 0)
            return "0";

        int i = 0;
        while(i+1 < format_name.Length && num >= 1000f)
        {
            num /= 1000f;
            i++;
        }
        return num.ToString("#.##") + format_name[i];
    }

    // 新增BigInteger版本,复用原有格式化规则
    public static string formatNumber(BigInteger num)
    {
        if (num == 0)
            return "0";

        int i = 0;
        BigInteger temp = num;
        // 复用除以1000的循环逻辑,适配BigInteger计算
        while (i + 1 < format_name.Length && temp >= 1000)
        {
            temp /= 1000;
            i++;
        }
        // 缩小后的数值可安全转为double进行格式化
        return ((double)temp).ToString("#.##") + format_name[i];
    }
}

4. 扩展量级支持(可选)

如果后续需要支持超过现有format_name数组的量级,仅需在数组中添加对应的后缀(如"x", "X", "e"等),无需修改核心逻辑。


内容的提问来源于stack exchange,提问作者Mister Danila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:49:01