微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c#-System.Serializable无法在Unity中的列表上工作?

我正在创建一个Loot系统.我快要结束了,剩下的就是在Enemy脚本的Inspector中填写DropTable.由于某种原因,我的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
 }
}
@H_404_8@

LootDrop类:

[System.Serializable]
public class LootDrop
{
    public string itemSlug { get; set; }
    public int Chance { get; set; }
}
@H_404_8@

本质上,我的DropTable仅包含一个LootDrop列表.但是,我无法访问List< LootDrop>内部的各个LootDrop实例.从检查员那里.我要做的就是在我的敌人脚本上创建一个公共的DropTable变量.我觉得我以前做过类似的事情,没有问题.我在这里做错什么了吗?我真的希望DropTable与我的敌人分开,因为敌人不应该真正在意GetDrop()方法.但是,如果那是唯一的方法,那么我想它必须这样做.在这个问题上的任何帮助,将不胜感激.

inspector

解决方法:

Unity将序列化字段,而不是属性.要么切换到字段:

[Serializable]
public class LootDrop
{
    public int Chance;
}
@H_404_8@

或使用序列化的后备字段:

[Serializable]
public class LootDrop
{
    public int Chance
    {
        get { return _chance; }
        set { _chance = value; }
    }

    [Serializefield]
    private int _chance;
}
@H_404_8@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐