有一次我在Unity中使用Resouce系统时发现了这个:
假设您只加载但不实例化预制件:
GameObject testObj = Resource.Load("testPrefab");
您有一个名为" TestScript
"的脚本,您将此脚本添加到testObj
testObj.AddComponent<TestScript>();
您运行它并关闭它,此TestScript仍将位于Resource文件夹内的testPrefab
内,如果再次运行它,Resource文件夹中的testPrefab
将有两个TestScript
成分
我知道Resouce.Load()
只是指向资源文件夹中的预制件,没有发生任何副本。
但这是一个好主意说,在这个预制件中添加一个CleanPrefab()
功能,以确保它首先恢复到原始配置,然后根据需要添加其他配件?
答案 0 :(得分:2)
不要修改预制件。预制件可用作可重复使用的物体。您不应该尝试修改它的原因有很多。其中之一是它会影响预制的实例化对象引用。通过对预制件进行修改,无法保证您的等级将以他们应该开始的方式开始。这会搞砸你的游戏。
你运行它并关闭它,这个TestScript仍然在里面 在Resource文件夹中的testPrefab,如果你再次运行它, Resource文件夹中的testPrefab将有两个TestScript组件。
您描述的行为仅在编辑器中为真。一个你建立它,行为是完全不同的。在独立版本中,一旦重新启动程序,预制件将自动重置。你真正修改的是内存中加载的预制件而不是存储在磁盘上的预制件。另请注意, Resources 文件夹中的所有内容都是只读的。它们无法修改。
如果直接修改预制件,即使重新加载场景,它也会保留在内存中。修改将消失的唯一时间是重新启动应用程序。不要修改预制件。