这从来没有发生在我身上,所以我有点困惑。
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
这将引发错误,但实际上已实例化该对象,并且一切都按预期工作。无论我重现此错误几次,该错误都不会停止程序。
我可以忽略此错误,还是没有看到一些问题?
这从来没有发生在我身上,所以我有点困惑。
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
这将引发错误,但实际上已实例化该对象,并且一切都按预期工作。无论我重现此错误几次,该错误都不会停止程序。
我可以忽略此错误,还是没有看到一些问题?
Answers:
如果尽管该Intantiate()
行引发了异常,但该对象仍被正确实例化,则该错误来自脚本的另一个实例-您可能不小心在场景中有了第二个副本。
一个实例已正确配置,并且Instantiate()
按预期执行且没有错误,因此可以根据需要创建对象。
另一个实例配置错误,并引发错误。但是,如果您只是在查看正确配置的实例,则该错误似乎无处不在并且没有可见的结果。
您可以在“开始”处打印出对象的路径,也可以在违规行之前以空检查的形式打印出该对象的路径,以帮助跟踪不需要的场景重复项。
您绝对不应忽略此错误。
充其量,它不必要地消耗了计算周期。在最坏的情况下,这表明您的游戏正在做您尚不完全了解的事情,这可能是造成更大问题的根源。
首先让我直接回答您的问题:
它有效,我可以忽略该错误吗?
你可以的。您不应该这样做,因为这意味着出了点问题。您会习惯此错误,但是它可能会“隐藏”或引起另一个错误。
当前,您有一条错误消息,它仍然可以正常工作。周围的其他方法,它不工作,没有(或者说:不承认)反馈的原因,是差远了!
为了找出问题的根源,请将整个过程分成几行。
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
错误只会告诉您发生在哪一行。如果此代码中发生错误,则行号将告诉您更多有关此处哪部分出错的信息。另外,我建议您使用的通用版本Resources.Load
,这实际上可以使我们减少担心的几步:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Instantiate()
。 prefab
是null
。 Resources.Load
回报null
。 Resources.Load
说:“ 如果找到资产,path
则返回资产,否则返回null。 ”resourceLocation
)此路径有问题,因此显而易见的第一步是使用Debug.Log查看其最终结果。由于“一切都按预期工作”,一个版本可能在工作上发生重复,而另一个版本会出现此错误。
在这种情况下,最好使用Debug.Log的2参数版本Debug.Log(resourceLocation, gameObject);
。现在,如果您在Unity编辑器中单击日志消息,它将选择GameObject
其来源。