C# 预置是否有不同的实例id,然后游戏对象或转换?尝试获取InstanceID时获取异常
gameObjectInstanceID值是我以前保存在保存文件743184中的值 在同一行上,instanceIdToObject的值为:1096884 当我在编辑器中查看预置时,这个ID不属于它的游戏对象或变换 我在porefab的Inspector中也看到了InstanceID: 预置名称是instanceIdToObject中的名称。 这是检查器中游戏对象和变换的预制实例id: 我不知道这个号码是1096884,从哪里来的。 在硬盘上的文件中,ID号与gameObjectInstanceID中的ID相同。 但ID 1096884根本不存在 这就是为什么我在这一行也会遇到异常,因为字典中不存在idC# 预置是否有不同的实例id,然后游戏对象或转换?尝试获取InstanceID时获取异常,c#,unity3d,C#,Unity3d,gameObjectInstanceID值是我以前保存在保存文件743184中的值 在同一行上,instanceIdToObject的值为:1096884 当我在编辑器中查看预置时,这个ID不属于它的游戏对象或变换 我在porefab的Inspector中也看到了InstanceID: 预置名称是instanceIdToObject中的名称。 这是检查器中游戏对象和变换的预制实例id: 我不知道这个号码是1096884,从哪里来的。 在硬盘上的文件中,ID号与gameObjectInstan
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];