Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }