我正在创建一个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()方法。但是,如果那是唯一的方法,那么我想它必须这样做。在这个问题上的任何帮助,将不胜感激。

c# - System.Serializable在Unity中的List &lt;MyClass&gt;上不起作用?-LMLPHP

最佳答案

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/

10-10 13:47