场景重新加载后不保存对象名称

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

【讨论】:

谢谢,但它不起作用,它仍然会在场景重新加载后生成一个新名称。

以上是关于场景重新加载后不保存对象名称的主要内容,如果未能解决你的问题,请参考以下文章

重新加载页面复选框后不应重置

UITableView 中的 UIView 动画在重新加载数据后不起作用

Rails 控制器方法在 Ajax 调用后不重新加载页面

CoreData 更新后不保存信息

python对象保存和重新加载

当我重新加载网格和存储时,extjs 缓存具有相同名称的图片