C# 预置是否有不同的实例id,然后游戏对象或转换?尝试获取InstanceID时获取异常

C# 预置是否有不同的实例id,然后游戏对象或转换?尝试获取InstanceID时获取异常,c#,unity3d,C#,Unity3d,gameObjectInstanceID值是我以前保存在保存文件743184中的值 在同一行上,instanceIdToObject的值为:1096884 当我在编辑器中查看预置时,这个ID不属于它的游戏对象或变换 我在porefab的Inspector中也看到了InstanceID: 预置名称是instanceIdToObject中的名称。 这是检查器中游戏对象和变换的预制实例id: 我不知道这个号码是1096884,从哪里来的。 在硬盘上的文件中,ID号与gameObjectInstan

gameObjectInstanceID值是我以前保存在保存文件743184中的值

在同一行上,instanceIdToObject的值为:1096884 当我在编辑器中查看预置时,这个ID不属于它的游戏对象或变换

我在porefab的Inspector中也看到了InstanceID:

预置名称是instanceIdToObject中的名称。 这是检查器中游戏对象和变换的预制实例id:

我不知道这个号码是1096884,从哪里来的。 在硬盘上的文件中,ID号与gameObjectInstanceID中的ID相同。 但ID 1096884根本不存在

这就是为什么我在这一行也会遇到异常,因为字典中不存在id


KeyNotFoundException:给定的键在字典中不存在。

我创建了一个小脚本,运行了层次结构中的所有对象,得到了所有对象的instanceid和所有对象的transforms instanceid和所有对象组件的instanceid,没有任何数字id接近1096884。每个unity对象有自己独特的实例ID。@shingo我知道,但它没有回答我的问题1096884是什么。好的,我找到了问题,但没有解决方案。问题是,当我加载保存的游戏时,首先单击escape键返回主菜单场景,然后单击加载按钮,再次加载游戏场景,然后为对象提供新的实例id,但它们与保存的文件中的不同。我怎么解决呢?你最好再考虑一下保存系统。通常,对象按其类型保存。例如,场景中有狗和猫,狗集合中的每只狗都是相同的,因此可以通过任何保存的数据加载狗的类型。
public void Load()
        {
            Dictionary<int, Transform> instanceIdToObject = objectsToSave
                .ToDictionary(o => o.gameObject.GetInstanceID(), o => o);
            var saveString = SaveSystem.Load();
            if (saveString != null)
            {
                SaveGame saveGame = JsonUtility.FromJson<SaveGame>(saveString);
                foreach (var saveObject in saveGame.saveObjects)
                {
                    List<KeyToValue> loadedComponents = saveObject.componentsState;
                    var objectToSetState = instanceIdToObject[saveObject.gameObjectInstanceID];
    
                    objectToSetState.position = saveObject.transformSaver.position;
                    objectToSetState.rotation = saveObject.transformSaver.rotation;
                    objectToSetState.localScale = saveObject.transformSaver.scaling;
    
                    var y = objectToSetState.GetComponents<Component>();
                    var z = y.Where(component => component is IStateQuery).ToList();
                    Dictionary<string, IStateQuery> zz = z.ToDictionary(sq => (sq as IStateQuery).UniqueId.ToString(), sq => sq as IStateQuery);
    
                    foreach (KeyToValue keyvalue in loadedComponents)
                    {
                        zz[keyvalue.Key].SetState(keyvalue.Value);
                    }
                }
            }
        }
var objectToSetState = instanceIdToObject[saveObject.gameObjectInstanceID];