我正在创建一个Loot系统。我几乎快结束了,只剩下在DropTable
脚本中的Inspector中填写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()
方法。但是,如果那是唯一的方法,那么我想它必须这样做。在这个问题上的任何帮助,将不胜感激。最佳答案
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;
}
关于c# - System.Serializable在Unity中的List <MyClass>上不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50119178/