【发布时间】:2018-04-07 02:13:20
【问题描述】:
我正在制作食物/水系统,所以当你在食物或水上为 0 时,你会失去一些健康,当你在两者上都为 0 时,这会更快。但我不断收到此错误“错误:无法在此上下文中使用属性或索引器“CharacterStats.currentHealth”,因为设置访问器不可访问。”这是我的脚本,你们能帮帮我吗,下面是我的脚本。
public class PlayerStats : CharacterStats
{
public string ID{get;protected set;}
public Texture healthIcon;
public Texture waterIcon;
public Texture foodIcon;
public float water = 100;
public float food = 100;
// Use this for initialization
void Start()
{
EquipmentManager.instance.onEquipmentChanged += OnEquipmentChanged;
}
void OnEquipmentChanged(Equipment newItem, Equipment oldItem)
{
if (newItem != null)
{
armor.AddModifier(newItem.armorModifier);
damage.AddModifier(newItem.damageModifier);
}
if (oldItem != null)
{
armor.RemoveModifier(oldItem.armorModifier);
damage.RemoveModifier(oldItem.damageModifier);
}
}
public override void Die()
{
base.Die();
//Kill the player in some way
PlayerManager.instance.KillPlayer();
}
public void OnGUI()
{
//GUIStyle style = "box";
GUIStyle style = "box";
var healthstring = currentHealth.ToString("0");
var waterstring = water.ToString("0");
var foodstring = food.ToString("0");
//Health
GUI.Label(new Rect(10, 10, 100, 30), healthstring, style);
GUI.DrawTexture(new Rect(15, 12, 100 / 4, 25), healthIcon, ScaleMode.StretchToFill, true, 10f);
//Water
GUI.Label(new Rect(240, 10, 100, 30), waterstring, style);
GUI.DrawTexture(new Rect(245, 12, 100 / 4, 25), waterIcon, ScaleMode.StretchToFill, true, 10f);
//Food
GUI.Label(new Rect(355, 10, 100, 30), foodstring, style);
GUI.DrawTexture(new Rect(360, 12, 100 / 4, 25), foodIcon, ScaleMode.StretchToFill, true, 10f);
}
public void Update()
{
if(water <= 0)
{
Debug.Log("Losing food");
currentHealth = currentHealth - 1;
}
}
}
第 2---------------------------------- -------------------------------------------
public class CharacterStats : MonoBehaviour {
public int maxHealth = 100;
public float currentHealth { get; private set; }
public Stat damage;
public Stat armor;
void Awake()
{
currentHealth = maxHealth;
}
public void TakeDamage(int damage)
{
damage -= armor.GetValue();
damage = Mathf.Clamp(damage, 0, int.MaxValue);
currentHealth -= damage;
Debug.Log(transform.name + " takes " + damage + " damage");
if(currentHealth <= 0)
{
Die();
}
}
public virtual void Die()
{
Debug.Log(transform.name + " died.");
}
}
【问题讨论】:
-
呃...您是否考虑过不为
currentHealth设置访问器private? -
public float currentHealth { get; private set; }应该是public float currentHealth { get; protected set; }如果您希望派生类能够修改它。 -
我是编码和 c# 的新手,所以如果出现这样的错误,我通常不知道如何解决,所以谢谢大家!