场景重新加载后不保存对象名称
Posted
技术标签:
【中文标题】场景重新加载后不保存对象名称【英文标题】:object name is not saved after scene reload 【发布时间】:2021-12-24 06:20:49 【问题描述】:我有一个更改对象名称的简单脚本,但更改场景时不会记住更改的名称。
public class MyBehaviour : MonoBehaviour
#if UNITY_EDITOR
private void OnValidate()
if (!this.name.Contains("_"))
this.name = $"this.name_this.GenUID()";
#endif
如何在Edit-Mode
中保存通过脚本所做的更改?
【问题讨论】:
这可能会回答你的问题:***.com/questions/57124570/… @edtheprogrammerguy 不,不是 【参考方案1】:您必须将对象标记为脏,以便在按下 CTRL+S 时将其保存
EditorUtility.SetDirty
当您想修改对象而不创建撤消条目时,可以使用 SetDirty,但仍要确保更改已注册且不会丢失。如果对象是场景的一部分,则场景被标记为脏。
public class MyBehaviour : MonoBehaviour
#if UNITY_EDITOR
private void OnValidate()
if (!this.name.Contains("_"))
this.name = $"this.name_this.GenUID()";
EditorUtility.SetDirty(this);
#endif
另请注意
如果对象可能是 Prefab 实例的一部分,您还需要调用
PrefabUtility.RecordPrefabInstancePropertyModifications
以确保创建 Prefab 覆盖。
如果你还想支持撤消/重做
如果您确实想支持撤消,则不应调用
SetDirty
,而应在更改对象之前使用Undo.RecordObject
,因为这会将对象标记为脏(或对象的场景,如果它是一部分场景)并在编辑器中提供撤消条目。如果对象可能是 Prefab 实例的一部分,您仍然应该调用PrefabUtility.RecordPrefabInstancePropertyModifications
。
【讨论】:
谢谢,但它不起作用,它仍然会在场景重新加载后生成一个新名称。以上是关于场景重新加载后不保存对象名称的主要内容,如果未能解决你的问题,请参考以下文章