为了账号安全,请及时绑定邮箱和手机立即绑定

System.Serializable在Unity中的List <MyClass>上不起作用?

System.Serializable在Unity中的List <MyClass>上不起作用?

C#
慕丝7291255 2021-05-11 09:22:36
我正在创建一个Loot系统。我几乎快结束了,只剩下DropTable在Enemy脚本中的Inspector中填写了。由于某种原因,我的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()方法。但是,如果那是唯一的方法,那么我想它必须这样做。在这个问题上的任何帮助将不胜感激。
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

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;

}


查看完整回答
反对 回复 2021-05-23
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您应loot在尝试添加项目之前初始化变量。


[System.Serializable]

public class DropTable

{

    public List<LootDrop> Loot;


    public DropTable()

    {

        Loot = new List<LootDrop>();

    }

}

另外,请谨慎使用名称约定。


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 246 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信