Unity3d 为什么不能';我不能使用;资源。加载“;直接结果?

Unity3d 为什么不能';我不能使用;资源。加载“;直接结果?,unity3d,Unity3d,Unity手册上说,Resources.Load将请求的资产作为对象返回。我想知道为什么我不能直接使用返回的对象。例如,我有一个文本预设,我想将其实例添加到层次结构中,但下面的代码无法工作 Text prefab; private void Start() { prefab = Resources.Load<Text>("Prefabs/Text"); GameObject canvas = GameObject.Find("Canvas

Unity手册上说,
Resources.Load
将请求的资产作为对象返回。我想知道为什么我不能直接使用返回的
对象
。例如,我有一个文本预设,我想将其实例添加到层次结构中,但下面的代码无法工作

Text prefab;
private void Start()
{
    prefab = Resources.Load<Text>("Prefabs/Text");
    GameObject canvas = GameObject.Find("Canvas");
    prefab.transform.SetParent(canvas.transform);
}
我不知道
实例化
结果和
资源加载
结果之间有什么区别,以及
实例化
做什么,这样它的返回就可以添加到层次结构中


原谅我糟糕的英语

要使用方法
实例化(GameObject)
您需要编写一个新组件,创建GameObject类型的新变量,将组件附加到GameObject,并在inspector中填充变量


要使用方法
实例化(Resource.Load(“object path”)
您只需要预置的名称/路径

如果游戏中有大量生成的部分(因此编辑器中没有放置任何游戏对象),如果您希望避免资源加载,则此功能非常有用。您需要将一些“数据持有者游戏对象”放置在几乎空的场景中。编辑以使我的观点更加清晰

如果您有大量不同的预置,并且您的方法知道它要构建的对象的名称,或者您只是不想将所有这些预置拖放到inspector窗口中,那么这也是很有帮助的

加载,从驱动器加载数据。您的游戏可能是从硬盘上玩的,这意味着加载硬盘需要旋转的预制件,放置读取头,等等


实例化本身很慢,即使不需要资源。加载实例化也没有那么快。如果您经常需要(每秒多次),您应该考虑某种对象池1

,据我所知,您的资产文件夹中应该有一个资源文件夹。
Text prefab;
private void Start()
{
    prefab = Resources.Load<Text>("Prefabs/Text");
    GameObject canvas = GameObject.Find("Canvas");
    Text text = Instantiate(prefab);
    text.transform.SetParent(canvas.transform);
}