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

Unity中ScoreManager的set访问器不可访问问题求助

问题分析与解决方案

嘿,这个错误我太熟悉了!咱们先搞清楚问题出在哪:

你在ScoreManager里把Score属性的set访问器设成了private:

public static int Score { get; private set; }

这就意味着只有ScoreManager内部的代码能修改这个值,外部脚本(比如你的UpgradeMenu)没法直接执行ScoreManager.Score -= upgradeCost这种修改操作——这就是你看到那个错误的原因。

正确的解决思路:用封装方法处理积分扣减

最佳实践是不要直接暴露属性的修改权限,而是在ScoreManager里添加一个专门的方法来处理积分扣减,这样既能控制修改逻辑,还能避免意外的错误。

第一步:给ScoreManager添加扣减积分的方法

在ScoreManager类里新增一个静态方法(因为Score是静态的,这样调用更方便):

public static bool SubtractScore(int amount)
{
    // 先校验积分是否足够扣减,同时确保扣减金额有效
    if (Score >= amount && amount > 0)
    {
        Score -= amount;
        // 别忘了触发积分更新事件,保证UI或其他依赖组件能同步更新
        ScoreUpdated(Score);
        return true; // 返回true表示扣减成功
    }
    // 积分不足或者扣减金额无效时,返回false并给出提示
    Debug.LogWarning("Not enough score to subtract, or invalid amount!");
    return false;
}

第二步:在UpgradeMenu里调用这个方法

把你注释掉的ScoreManager.Score -= upgradeCost替换成调用上面的方法,还能加上积分不足的判断逻辑:

public void UpgradeArmor () {
    // 先尝试扣减积分,成功再执行升级逻辑
    if (ScoreManager.SubtractScore(upgradeCost))
    {
        Health.maxHealth += 2;
        UpdateValues();
    }
    else
    {
        // 这里可以扩展UI提示,比如弹出“积分不足,无法升级!”的弹窗
        Debug.Log("You don't have enough score to upgrade armor!");
    }
}

public void UpgradeSouls () {
    if (ScoreManager.SubtractScore(upgradeCost))
    {
        EnemySlime.ScoreOnDeath += 1;
        EnemySkeleton.ScoreOnDeath += 1;
        UpdateValues();
    }
    else
    {
        Debug.Log("You don't have enough score to upgrade souls!");
    }
}

public void UpgradeDamage () {
    if (ScoreManager.SubtractScore(upgradeCost))
    {
        Projectile.DamageOnHit += 1;
        UpdateValues();
    }
    else
    {
        Debug.Log("You don't have enough score to upgrade damage!");
    }
}

为什么不直接把set改成public?

虽然把Score的set改成public能快速解决错误,但这是不推荐的——直接暴露属性的修改权限会破坏封装性,其他脚本可能会不小心修改积分(比如改成负数),而且没法统一处理积分变化时的逻辑(比如触发ScoreUpdated事件)。用专门的方法来处理,能让你的代码更健壮、更容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:50:06