[ad_1]
我对其进行了编码,以便它显示一张卡片,但它没有,
代码:
public List<card> displayCard = new List<card>(); public int displayId; public int id; public string cardName; public int cost; public int power; public string cardDescription; public Text nameText; public Text costText; public Text powerText; public Text descriptionText; // Start is called before the first frame update void Start() { displayCard[0] = CardDatabase.cardList[displayId]; } // Update is called once per frame void Update() { id = displayCard[0].id; cardName = displayCard[0].cardName; cost = displayCard[0].cost; power = displayCard[0].power; cardDescription = displayCard[0].cardDescription; nameText.text = " " + cardName; costText.text = " " + cost; powerText.text = " " + power; descriptionText.text = " " + cardDescription; } } I have the cards on a different script What I have tried: Changing the card id etc. Rewriting it incase i forgot something, idk what esle to do
解决方案1
这只是您在此处显示的少量代码的猜测。 我假设您的错误发生在方法 Start 中,因为根据您的问题描述,它似乎是第一个调用的方法。 使用调试器并在错误指示行处放置一个断点,以准确查看发生了什么情况。
在代码顶部,您创建了一个新列表(displayCard),它可以容纳一些数字“卡片”对象(默认容量)。 但是,此时它是空的并且里面没有卡片。
在方法 Start(和 Update)中,您尝试使用 displayCard 索引 0 处的卡片对象 – 但其中没有卡片,因此 0 超出范围。 您需要首先将一张卡(添加方法是一种方式)放入列表中。
同样,这只是一个猜测,因为在尝试使用索引 0 之前,我没有看到任何代码将卡对象添加到 displayCard。如果有代码可以执行此操作,请使用调试器来查明发生了什么。 这些调试器是很有价值的工具,是从那些刚开始使用没有调试器的系统的人那里得到的。
解决方案2
只是补充一下 FreedMalloc 所说的,一个数组或 ind3exable 集合,例如 List<T>
含有 N
元素的有效索引值来自 0
到 N - 1
。
所以一个 List<int>
包含三个值
List<int> myNumbers = new List<int>() {10, 20, 30};
将具有三个有效索引: 0
, 1
, 和 2
– 任何其他值(正数或负数)都会给您一个“索引超出范围”异常
由于您的代码明确使用了索引 0
,并且您会收到超出范围的异常,这意味着您的集合为空:它没有元素,因此它没有有效的索引。
解决方案是添加至少一个 card
来收藏吧!
但是……你的代码看起来真的很混乱:我不知道你显示的代码属于哪个类,但有两种可能性:
1)该代码是 card
班级。 如果是这样,那么它不应该访问显示组件,例如 nameText
, costText
, powerText
, 和 descriptionText
因为它们是您表格的一部分,而不是卡片的一部分。
2) 该代码是您表单的一部分。 如果是这样,那么它不应该具有与卡相关的值,例如 cardName
, cost
, power
, 和 cardDescription
因为它们是个体的一部分 card
并且应该包含在那里而不是重复。
想想你想要做什么:我怀疑你对类和实例以及集合的概念有点模糊! :D
[ad_2]
コメント