统一C#再生预制件

统一C#再生预制件,c#,unity3d,2d,C#,Unity3d,2d,根据本教程,我目前正在开发一款愤怒的小鸟风格的游戏。我已经成功地完成了它,并按预期工作,但现在我正在尝试实现一个重生功能,让球一次又一次地被抛出去。我把球做成了预制件,并把它叫做预制件。球成功地重新出现,但它没有刚体连接或线渲染器(弹簧),因此不应用物理。有什么想法吗?谢谢 预设设置检查器:您可以尝试删除预设并从场景中的游戏对象中重新创建它 但是,除非你在给定的时间需要不止一个球在现场,否则我建议你采用不同的方法 您可以简单地使用gameObject.SetActive(false)来停用球,重

根据本教程,我目前正在开发一款愤怒的小鸟风格的游戏。我已经成功地完成了它,并按预期工作,但现在我正在尝试实现一个重生功能,让球一次又一次地被抛出去。我把球做成了预制件,并把它叫做预制件。球成功地重新出现,但它没有刚体连接或线渲染器(弹簧),因此不应用物理。有什么想法吗?谢谢


预设设置检查器:

您可以尝试删除预设并从场景中的游戏对象中重新创建它

但是,除非你在给定的时间需要不止一个球在现场,否则我建议你采用不同的方法

您可以简单地使用
gameObject.SetActive(false)
来停用球,重置球组件中的值,并将球移回起始位置,而不是销毁和重新实例化预置。然后重新激活它并假装它是另一个

实例化
销毁
是缓慢的方法,通常建议尽量减少它们的使用


即使场景中需要多个球,也有避免实例化的方法。如果您感兴趣,请尝试在Unity中查找对象池。

您确定正在使用的预制件具有刚体和弹簧吗?如果您只是检查@CNuts所说的内容,答案可能是按下预制件中的“应用”按钮;有时,您在预置中进行更改,但由于此按钮,这些更改尚未完成。我知道这听起来是怎么回事,但我以前也遇到过。似乎找不到“应用”按钮。刚体和弹簧组件包含在预设中,但与游戏对象本身不同,它们总是空的。我试试那种方法。您知道线渲染器是否也将与球一起重新实例化吗?因为到目前为止,当你停用一个游戏对象时,它仍然在场景中,它只是不可见的,Unity不会对它的组件调用更新。但该对象及其所有组件仍然存在。一旦您重新激活它,Unity将调用OnEnable,然后在所有组件上重新调用Update every frame。是的,线渲染器将在禁用时停止绘制,并在重新启用时再次开始绘制。让我看看我是否正确理解您的意思。首先,在启动时,它被设置为true。我拖动并扔掉它,一旦它离开相机视图,它就会设置为false,并重新定位为true。调用
gameObject.SetActive(false)
调用每个组件上的
OnDisable
。调用
gameObject.SetActive(true)
调用每个组件上的
OnEnable
。这意味着您必须将初始化逻辑放在这两种方法中。这就是Unity希望你怎么做的。因此,您可以在禁用中设置位置,每当您停用游戏对象并在那里等待直到再次激活它时,它将自己重新定位到启动位置<代码>开始仅在第一次调用OnEnable时执行。哦,我明白了。所以当调用gameObject.SetActive(false)时,然后gameObject.SetActive(true)会自动将对象重新定位到起始位置,对吗?