我正在创建一个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
}
}
LootDrop类:
[System.Serializable]
public class LootDrop
{
public string itemSlug { get; set; }
public int Chance { get; set; }
}
本质上,我的DropTable仅包含一个LootDrop列表.但是,我无法访问List< LootDrop>内部的各个LootDrop实例.从检查员那里.我要做的就是在我的敌人脚本上创建一个公共的DropTable变量.我觉得我以前做过类似的事情,没有问题.我在这里做错什么了吗?我真的希望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;
}
原文地址:https://codeday.me/bug/20191025/1926814.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。