You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity编辑模式下脚本修改的物体名场景重载后未保存如何解决

问题根因

Unity编辑器仅会对用户手动操作的修改自动标记为待保存状态,脚本在编辑模式下直接修改GameObject属性时,若未主动通知编辑器有改动,修改内容不会被写入场景的序列化数据,切换场景、重启编辑器时改动就会丢失。

修复方案

调整OnValidate逻辑,完成名称修改后主动标记对象和所属场景为脏状态,完整代码如下:

using UnityEditor;
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
#if UNITY_EDITOR
    private void OnValidate()
    {
        // 过滤运行时状态,避免进入播放模式时触发非预期逻辑
        if (EditorApplication.isPlayingOrWillChangePlaymode) return;
        
        if (!name.Contains("_")) 
        {
            name = $"{name}_{GenUID()}";
            // 标记当前组件关联的GameObject已修改
            EditorUtility.SetDirty(this);
            // 标记GameObject所属场景为待保存状态
            UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(gameObject.scene);
        }
    }

    // 此处为GenUID的示例实现,可替换为你自身的UID生成逻辑
    private string GenUID()
    {
        return Random.Range(1000, 9999).ToString();
    }
#endif
}
注意事项
  • 如果该脚本挂载在预制体实例上,需额外添加PrefabUtility.RecordPrefabInstancePropertyModifications(this),才能将修改同步到预制体实例的属性覆写
  • 代码修改后,按Ctrl+S(Mac为Command+S)保存场景,即可将名称改动永久写入场景文件
  • 避免在OnValidate中编写高频执行的复杂逻辑,防止编辑器出现卡顿

内容的提问来源于stack exchange,提问作者user12653758

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:24:03