在 Unity 中,通过编辑器删除另一个组件时,如何通过脚本删除一个组件?
Posted
技术标签:
【中文标题】在 Unity 中,通过编辑器删除另一个组件时,如何通过脚本删除一个组件?【英文标题】:In Unity, how to delete a component via script when deleting another component via the editor? 【发布时间】:2021-11-01 12:35:57 【问题描述】:上下文:我正在编辑一个预制件,上面有两个组件,都是自定义脚本。
编辑预制件时,我想在删除组件容器同步的同时删除编辑器中的组件容器描述符,方法是右键单击它并单击删除组件。见下图。
在 ContainerDescriptor 中,我参考了 ContainerSync 脚本。
public class ContainerDescriptor : MonoBehaviour
public ContainerSync containerSync;
我尝试使用 ContainerDescriptor 脚本的 OnDestroy() 方法,但是以这种方式删除 ContainerDescriptor 时不会调用它。
【问题讨论】:
【参考方案1】:On this thread 至少有一个解决方案,如果您像您一样通过上下文菜单删除该组件。
使用[ExecuteAlways]
,通常仅在 PlayMode 中调用的事件消息调用也会在 Edit 和 Prefab 模式中调用!
你可以做类似的事情,例如
[ExecuteAlways]
public class ContainerDescriptor : MonoBehaviour
public ContainerSync containerSync;
#if UNITY_EDITOR
private void OnDestroy ()
if(containerSync)
if(Application.isPlaying)
Destroy(containerSync);
else
DestroyImmediate (containerSync);
#endif
请注意,尽管专门针对预制件,这可能仍然会失败,因为 afaik 既不能在预制件内部使用 Destroy
也不能使用 DestroyImmediate
(请参阅 here)
【讨论】:
它似乎也适用于预制件,至少 DestroyImmediate 可以。以上是关于在 Unity 中,通过编辑器删除另一个组件时,如何通过脚本删除一个组件?的主要内容,如果未能解决你的问题,请参考以下文章