C# 错误集合访问器不可访问-扣除用户';s分数作为货币

C# 错误集合访问器不可访问-扣除用户';s分数作为货币,c#,unity3d,C#,Unity3d,我有一个分数管理器,可以跟踪你的分数。有了这些要点,我希望用户能够为他的角色购买升级 但每次我试图访问用户的当前分数时,我都会收到相同的错误消息 如果您查看下面的Upgrademenu文档,您可以看到我正在尝试执行以下操作“//ScoreManager.Score-=upgradeCost;”,因为当我激活它时,会收到错误消息:// 无法在此上下文中使用属性或索引器“ScoreManager.Score”,因为集合访问器不可访问 记分经理 using UnityEngine; using Sy

我有一个分数管理器,可以跟踪你的分数。有了这些要点,我希望用户能够为他的角色购买升级

但每次我试图访问用户的当前分数时,我都会收到相同的错误消息

如果您查看下面的Upgrademenu文档,您可以看到我正在尝试执行以下操作“//ScoreManager.Score-=upgradeCost;”,因为当我激活它时,会收到错误消息://

无法在此上下文中使用属性或索引器“ScoreManager.Score”,因为集合访问器不可访问

记分经理


using UnityEngine;
using System;
using System.Collections;

public class ScoreManager : MonoBehaviour
{
    public static ScoreManager Instance { get; private set; }

    public static int Score { get; private set; }

    public int HighScore { get; private set; }

    public bool HasNewHighScore { get; private set; }

    public static event Action<int> ScoreUpdated = delegate {};
    public static event Action<int> HighscoreUpdated = delegate {};

    private const string HIGHSCORE = "HIGHSCORE";
    // key name to store high score in PlayerPrefs

    void Awake()
    {
        if (Instance)
        {
            DestroyImmediate(gameObject);
        }
        else
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
    }

    void Start()
    {
        Reset();
    }

    public void Reset()
    {
        // Initialize score
        Score = 0;

        // Initialize highscore
        HighScore = PlayerPrefs.GetInt(HIGHSCORE, 0);
        HasNewHighScore = false;
    }

    public void AddScore(int amount)
    {
        Score += amount;

        // Fire event
        ScoreUpdated(Score);

        if (Score > HighScore)
        {
            UpdateHighScore(Score);
            HasNewHighScore = true;
        }
        else
        {
            HasNewHighScore = false;
        }
    }

    public void UpdateHighScore(int newHighScore)
    {
        // Update highscore if player has made a new one
        if (newHighScore > HighScore)
        {
            HighScore = newHighScore;
            PlayerPrefs.SetInt(HIGHSCORE, HighScore);
            HighscoreUpdated(HighScore);
        }
    }
}


如果类的set访问器设置为private,则不能从类外部为Score赋值。将其设置为
public
或在
ScoreManager
类上创建一个方法来执行扣减。

如果其Set访问器设置为private,则不能从类外部为分数赋值。将其设置为
public
或在
ScoreManager
类上创建一个方法来执行推断。

我理解这一点,但即使我将代码更改为“public static int Score{get;protected Set;}”,并尝试从其他文档访问它。我仍然收到相同的错误消息。@mafiaf
protected
不是
public
并且不起作用。我知道,通过删除整个“protected”部分,我不再收到错误消息。但是它似乎没有从scoreManager中扣除分数。@mafiaf这是一个单独的问题。我理解这一点,但即使我将代码更改为“public static int Score{get;protected set;}”,并尝试从另一个文档访问它。我仍然收到相同的错误消息。@mafiaf
protected
不是
public
并且不起作用。我知道,通过删除整个“protected”部分,我不再收到错误消息。但这似乎并没有从得分经理那里扣减分数。@mafiaf这是另一个问题。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UpgradeMenu : MonoBehaviour
{
    [SerializeField]
    private Text accuracyText;

    [SerializeField]
    private Text speedText;

    [SerializeField]
    private Text damageText;

  [SerializeField]
  private Weapon weapon;

  [SerializeField]
  public Projectile projectile;

  [SerializeField]
  private Player player;

  [SerializeField]
  private int upgradeCost = 50;

    void start ()
    {

    }

    void OnEnable()
    {
        UpdateValues();
    }

    void UpdateValues ()
    {

    }

    public void UpgradeArmor ()
    {
      Health.maxHealth += 2;

    //  ScoreManager.Score -= upgradeCost;

      UpdateValues();
    }

    public void UpgradeSouls ()
    {
      EnemySlime.ScoreOnDeath += 1;
      EnemySkeleton.ScoreOnDeath += 1;

    //  ScoreManager.Score -= upgradeCost;
      UpdateValues();
    }

    public void UpgradeDamage ()
    {
      Projectile.DamageOnHit += 1;

    //  ScoreManager.Score -= upgradeCost;

      UpdateValues();
    }
}