我正在创建一个Loot系统。我离开的最近几乎就是在DropTable
脚本上填写检查器中的Enemy
。出于某种原因,我的DropTable
脚本正在序列化,但我的LootDrop
类不是。我的课程基本上是这样设置的:
DropTable
上课:
[System.Serializable]
public class DropTable
{
public List<LootDrop> loot = new List<LootDrop>();
public Item GetDrop()
{
int roll = Random.Range(0, 101);
int chanceSum = 0;
foreach (LootDrop drop in loot)
{
chanceSum += drop.Chance;
if (roll < chanceSum)
{
return ItemDatabase.Instance.GetItem(drop.itemSlug); //return the item here
}
}
return null; //Didn't get anything from the roll
}
}
LootDrop
上课:
[System.Serializable]
public class LootDrop
{
public string itemSlug { get; set; }
public int Chance { get; set; }
}
基本上,我的DropTable
只包含LootDrop
列表。但是,我无法从检查器访问LootDrop
内的各个List<LootDrop>
实例。我正在做的就是在我的public DropTable
脚本上创建一个Enemy
变量。我觉得我之前做过类似的事,没有问题。我在这里做错了吗?我真的希望DropTable
成为与敌人分开的一个类,因为敌人不应该真正关心GetDrop()
方法。但是,如果这是唯一的方式,那么我猜它必须这样做。任何有关此事的帮助将不胜感激。
答案 0 :(得分:4)
Unity将序列化字段,而不是属性。切换到字段:
[Serializable]
public class LootDrop
{
public int Chance;
}
或使用序列化后备字段:
[Serializable]
public class LootDrop
{
public int Chance
{
get { return _chance; }
set { _chance = value; }
}
[SerializeField]
private int _chance;
}
答案 1 :(得分:0)
在尝试添加项目之前,您应该初始化F
变量。
loot
另外,请注意名称约定。