Unity3d,在资源

时间:2018-03-08 21:10:58

标签: unity3d

有一次我在Unity中使用Resouce系统时发现了这个:

假设您只加载但不实例化预制件:

GameObject testObj = Resource.Load("testPrefab");

您有一个名为" TestScript"的脚本,您将此脚本添加到testObj

testObj.AddComponent<TestScript>();

您运行它并关闭它,此TestScript仍将位于Resource文件夹内的testPrefab内,如果再次运行它,Resource文件夹中的testPrefab将有两个TestScript成分

我知道Resouce.Load()只是指向资源文件夹中的预制件,没有发生任何副本。

但这是一个好主意说,在这个预制件中添加一个CleanPrefab()功能,以确保它首先恢复到原始配置,然后根据需要添加其他配件?

1 个答案:

答案 0 :(得分:2)

不要修改预制件。预制件可用作可重复使用的物体。您不应该尝试修改它的原因有很多。其中之一是它会影响预制的实例化对象引用。通过对预制件进行修改,无法保证您的等级将以他们应该开始的方式开始。这会搞砸你的游戏。

  

你运行它并关闭它,这个TestScript仍然在里面   在Resource文件夹中的testPrefab,如果你再次运行它,   Resource文件夹中的testPrefab将有两个TestScript组件。

您描述的行为仅在编辑器中为真。一个你建立它,行为是完全不同的。在独立版本中,一旦重新启动程序,预制件将自动重置。你真正修改的是内存中加载的预制件而不是存储在磁盘上的预制件。另请注意, Resources 文件夹中的所有内容都是只读的。它们无法修改。

如果直接修改预制件,即使重新加载场景,它也会保留在内存中。修改将消失的唯一时间是重新启动应用程序。不要修改预制件。