首页 > 解决方案 > 如何在运行时实例化不在资源层次结构中的给定文件夹中的预制件?

问题描述

我有一个预制件(MyPrefab.prefab),它位于“Assets/Scripts/MyPrefab.prefab”。

我怎样才能在运行时实例化它?

我尝试了这个代码片段,但它在运行时抛出了异常。

var myGO = Instantiate(Resources.Load ("Assets/Scripts/MyPrefab") as GameObject);

和这个:

var myGO = Instantiate(Resources.Load ("Assets/Scripts/MyPrefab.prefab") as GameObject);

他们都没有为我工作。Unity 抛出异常: ArgumentNullException: The Object you want to instantiate is null

PS:我不允许将预制件移动到另一个文件夹。

标签: c#unity3d

解决方案


一般来说,根本不要使用资源

如果由于某种原因您仍想使用它,您的资产必须放在一个名为的文件夹中,因为系统Resources只会跟踪这些资产Resources

可以通过 Resources.Load 函数访问 Assets 文件夹中任何位置名为“Resources”的文件夹中的所有资产。可能存在多个“资源”文件夹,并且在加载对象时将检查每个文件夹。


但正如所说,宁愿有一个

public GameObject prefab;

或者也

[SerializeField] private GameObject prefab;

场地。这现在出现在相应组件的检查器中。只需将您的预制件拖放到此插槽中,然后执行

var myGo = Instantiate(prefab);

尤其是在运行时查看Instantiate Prefabs


推荐阅读