【问题标题】:Unity instantiation not working at all, no errors in code but still not workingUnity 实例化根本不起作用,代码中没有错误但仍然不起作用
【发布时间】:2020-05-19 15:18:01
【问题描述】:

我试图在循环中实例化一个预制件,但是第一次调用实例化函数时,代码无缘无故地脱离了函数。我在 Visual Studio 中使用了步进工具,但无法弄清楚它为什么这样做。我认为这可能是因为我的 Unity 版本,但我刚刚更新到 2019.3.0f6 并且问题仍然存在。有人有什么建议吗?

public void GotTickets(FBTicket[] tickets)
{
    if (ticketHolders.Count < tickets.Length)
    {
        int amountNeeded = tickets.Length - ticketHolders.Count;
        for (int i = 0; i < amountNeeded; i++)
        {
            TicketHolder ticketHolder = Instantiate(ticketHolderPrefab, ticketHolderParent).GetComponent<TicketHolder>();
            ticketHolders.Add(ticketHolder);
        }
    }
    for (int i = 0; i < ticketHolders.Count; i++)
    {
        ticketHolders[i].gameObject.SetActive(false);
    }
    for (int i = 0; i < tickets.Length; i++)
    {
        ticketHolders[i].SetTicket(tickets[i].jackpot, tickets[i].numbers);
    }
}

【问题讨论】:

  • 我没有答案,但您的代码的第一部分可以大大简化:while (ticketHolders.Count &lt; tickets.Length) ticketHolders.Add(Instantiate(etc...))
  • 不确定您在说哪个“循环”。在你最后一个for 循环之前,你能用一些 Debug.Log 命令显示ticketHolders.Counttickets.Length 的值是什么吗?
  • 另请注意,虽然ticketHolders 可能已经有一些元素,但您确定它们都不是null?这肯定会打破if 块之后的第一个循环
  • 最后两个循环无关紧要,超过实例化点的代码不会运行。但是门票的长度是不同的,测试它的长度为 13,ticketHolders 的计数为 0。
  • 如何引用ticketPrefab?您是否在检查器中设置了公共财产?总是让我明白的是,我制作了该属性,但忘记在检查器中将预制件拖入其中。此外,如果您将实例化从 GetComponent 调用中分离出来,它是否会通过实例化?

标签: c# for-loop unity3d instantiation


【解决方案1】:

是否已启用所有第一次机会例外?在 VS 2019 中,转到调试 > Windows > 异常设置。检查所有公共语言运行时异常。

再试一次,你可能会得到一个有用的例外。

【讨论】:

  • 感谢您的回答,但我刚刚尝试过,恐怕它仍然无法正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多