C# 错误集合访问器不可访问-扣除用户';s分数作为货币
我有一个分数管理器,可以跟踪你的分数。有了这些要点,我希望用户能够为他的角色购买升级 但每次我试图访问用户的当前分数时,我都会收到相同的错误消息 如果您查看下面的Upgrademenu文档,您可以看到我正在尝试执行以下操作“//ScoreManager.Score-=upgradeCost;”,因为当我激活它时,会收到错误消息:// 无法在此上下文中使用属性或索引器“ScoreManager.Score”,因为集合访问器不可访问 记分经理C# 错误集合访问器不可访问-扣除用户';s分数作为货币,c#,unity3d,C#,Unity3d,我有一个分数管理器,可以跟踪你的分数。有了这些要点,我希望用户能够为他的角色购买升级 但每次我试图访问用户的当前分数时,我都会收到相同的错误消息 如果您查看下面的Upgrademenu文档,您可以看到我正在尝试执行以下操作“//ScoreManager.Score-=upgradeCost;”,因为当我激活它时,会收到错误消息:// 无法在此上下文中使用属性或索引器“ScoreManager.Score”,因为集合访问器不可访问 记分经理 using UnityEngine; using Sy
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;}”,并尝试从其他文档访问它。我仍然收到相同的错误消息。@mafiafprotected
不是public
并且不起作用。我知道,通过删除整个“protected”部分,我不再收到错误消息。但是它似乎没有从scoreManager中扣除分数。@mafiaf这是一个单独的问题。我理解这一点,但即使我将代码更改为“public static int Score{get;protected set;}”,并尝试从另一个文档访问它。我仍然收到相同的错误消息。@mafiafprotected
不是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();
}
}