private void OnLoadCompleted(AssetItem rootItem, AssetItem[] assetItems, PersistentObject[] persistentObjects, ProjectEventHandler <UnityObject> callback) { for (int i = 0; i < assetItems.Length; ++i) { AssetItem assetItem = assetItems[i]; if (!m_assetDB.IsMapped(assetItem.ItemID)) { if (m_assetDB.IsStaticResourceID(assetItem.ItemID)) { int ordinal = m_assetDB.ToOrdinal(assetItem.ItemID); if (m_assetDB.IsLibraryRefLoaded(ordinal)) { m_assetDB.RemoveLibrary(ordinal); } if (!m_assetDB.IsLibraryLoaded(ordinal)) { AssetLibraryReferenceInfo reference = m_projectInfo.References.FirstOrDefault(r => r.Ordinal == ordinal); if (reference != null) { m_assetDB.LoadLibrary(reference.AssetLibrary, reference.Ordinal); } } } else if (m_assetDB.IsDynamicResourceID(assetItem.ItemID)) { PersistentObject persistentObject = persistentObjects[i]; if (persistentObject != null) { if (persistentObject is PersistentPrefab) { PersistentPrefab persistentPrefab = (PersistentPrefab)persistentObject; Dictionary <int, UnityObject> idToObj = new Dictionary <int, UnityObject>(); List <GameObject> createdGameObjects = new List <GameObject>(); persistentPrefab.CreateGameObjectWithComponents(m_typeMap, persistentPrefab.Descriptors[0], idToObj, createdGameObjects); m_assetDB.RegisterDynamicResources(idToObj); for (int j = 0; j < createdGameObjects.Count; ++j) { GameObject createdGO = createdGameObjects[i]; createdGO.transform.SetParent(createdGO.transform, false); m_dynamicResources.Add(unchecked ((int)m_assetDB.ToID(createdGO)), createdGO); } } else { Type type = m_typeMap.ToType(assetItem.TypeGuid); UnityObject instance = m_factory.CreateInstance(type); m_assetDB.RegisterDynamicResource(unchecked ((int)assetItem.ItemID), instance); m_dynamicResources.Add(unchecked ((int)assetItem.ItemID), instance); } } } } } for (int i = 0; i < persistentObjects.Length; ++i) { PersistentObject persistentObject = persistentObjects[i]; if (persistentObject != null) { if (m_assetDB.IsSceneID(assetItems[i].ItemID)) { persistentObject.WriteTo(SceneManager.GetActiveScene()); } else { UnityObject obj = m_assetDB.FromID <UnityObject>(assetItems[i].ItemID); Debug.Assert(obj != null); if (obj != null) { persistentObject.WriteTo(obj); } } } } UnityObject result = m_assetDB.FromID <UnityObject>(rootItem.ItemID); callback(new Error(Error.OK), result); }