public SyncObjectBinding CreateInstance(StreamKey objectKey) { // Did we already instantiate an instance for the same? if (m_Originals.TryGetValue(objectKey, out var original) && original.ObjectBinding != null) { ++original.NbActiveInstances; m_Originals[objectKey] = original; TrackExistingDependencies(original.Dependencies); return(Object.Instantiate(original.ObjectBinding)); } // Did we receive the SyncObject? var syncObject = m_SyncObjects[objectKey]; var configs = new SyncObjectImportConfig { settings = new SyncObjectImportSettings { defaultMaterial = ReflectMaterialManager.defaultMaterial, importLights = true }, materialCache = m_MaterialCache, meshCache = m_MeshCache, lightImport = m_SyncLightImporter }; var importer = new SyncObjectImporter(); var(dependencies, gameObject) = importer.ImportAndGetDependencies(objectKey.source, syncObject, configs); var comp = gameObject.AddComponent <SyncObjectBinding>(); TrackDependencies(dependencies); m_Originals[objectKey] = new OriginalInstance(1, comp, dependencies); return(comp); }
public override void OnImportAsset(AssetImportContext ctx) { var sceneElement = PlayerFile.Load <SyncObject>(ctx.assetPath); Init(sceneElement.Name); var defaultMaterial = ReflectMaterialManager.defaultMaterial; var syncedData = new SyncedData <SyncObject>(StreamKey.FromSyncId <SyncObject>(EditorSourceId, sceneElement.Id), sceneElement); var elementImporter = new SyncObjectImporter(); var root = elementImporter.Import(syncedData, new SyncObjectImportConfig { settings = new SyncObjectImportSettings { defaultMaterial = defaultMaterial, importLights = m_ImportLights }, materialCache = this, meshCache = this }); SetUniqueNames(root.transform); // TODO Find a deterministic way to avoid name collisions. ctx.AddObjectToAsset("root", root); ctx.SetMainObject(root); }