public void SectionMetadata() { using (var world = TestWorldSetup.CreateEntityWorld("World", false)) { var resolveParams = new SceneSystem.LoadParameters { Flags = SceneLoadFlags.BlockOnImport | SceneLoadFlags.DisableAutoLoad }; var sceneSystem = world.GetOrCreateSystem <SceneSystem>(); var sceneEntity = sceneSystem.LoadSceneAsync(SceneGUID, resolveParams); world.Update(); var manager = world.EntityManager; var sectionEntities = manager.GetBuffer <ResolvedSectionEntity>(sceneEntity); Assert.AreEqual(3, sectionEntities.Length); Assert.IsTrue(manager.HasComponent <TestMetadata>(sectionEntities[0].SectionEntity)); Assert.IsFalse(manager.HasComponent <TestMetadata>(sectionEntities[1].SectionEntity)); Assert.IsTrue(manager.HasComponent <TestMetadata>(sectionEntities[2].SectionEntity)); Assert.IsTrue(manager.HasComponent <TestMetadataTag>(sectionEntities[0].SectionEntity)); Assert.IsFalse(manager.HasComponent <TestMetadataTag>(sectionEntities[1].SectionEntity)); Assert.IsTrue(manager.HasComponent <TestMetadataTag>(sectionEntities[2].SectionEntity)); // These components should not be added, instead an error is logged that meta info components can't contain entities or blob assets var filteredTypes = new[] { typeof(TestMetadataWithEntity), typeof(TestMetadataWithBlobAsset), typeof(EcsTestSharedComp), typeof(EcsIntElement), typeof(EcsState1), #if !UNITY_DISABLE_MANAGED_COMPONENTS typeof(EcsTestManagedComponent) #endif }; foreach (var type in filteredTypes) { var componentType = ComponentType.FromTypeIndex(TypeManager.GetTypeIndex(type)); Assert.IsFalse(manager.HasComponent(sectionEntities[0].SectionEntity, componentType)); } Assert.AreEqual(0, manager.GetComponentData <TestMetadata>(sectionEntities[0].SectionEntity).SectionIndex); Assert.AreEqual(13, manager.GetComponentData <TestMetadata>(sectionEntities[0].SectionEntity).Value); Assert.AreEqual(42, manager.GetComponentData <TestMetadata>(sectionEntities[2].SectionEntity).SectionIndex); Assert.AreEqual(100, manager.GetComponentData <TestMetadata>(sectionEntities[2].SectionEntity).Value); var hash = EntityScenesPaths.GetSubSceneArtifactHash(SceneGUID, sceneSystem.BuildConfigurationGUID, true, ImportMode.Synchronous); Assert.IsTrue(hash.IsValid); AssetDatabaseCompatibility.GetArtifactPaths(hash, out var paths); var logPath = EntityScenesPaths.GetLoadPathFromArtifactPaths(paths, EntityScenesPaths.PathType.EntitiesConversionLog); Assert.NotNull(logPath); var log = System.IO.File.ReadAllText(logPath); Assert.IsTrue(log.Contains("The component type must contains only blittable/basic data types")); Assert.IsFalse(log.Contains("entities in the scene 'TestSubSceneWithSectionMetadata' had no SceneSection and as a result were not serialized at all.")); } }
bool CheckConversionLog(SubScene subScene) { var pendingWork = false; foreach (var world in World.All) { var sceneSystem = world.GetExistingSystem <SceneSystem>(); if (sceneSystem is null) { continue; } if (!m_ConversionLogLoaded.TryGetValue(sceneSystem.BuildConfigurationGUID, out var loaded)) { m_ConversionLogLoaded.Add(sceneSystem.BuildConfigurationGUID, false); } else if (loaded) { continue; } var hash = EntityScenesPaths.GetSubSceneArtifactHash(subScene.SceneGUID, sceneSystem.BuildConfigurationGUID, ImportMode.Asynchronous); if (!hash.IsValid) { pendingWork = true; continue; } m_ConversionLogLoaded[sceneSystem.BuildConfigurationGUID] = true; AssetDatabaseCompatibility.GetArtifactPaths(hash, out var paths); var logPath = EntityScenesPaths.GetLoadPathFromArtifactPaths(paths, EntityScenesPaths.PathType.EntitiesConversionLog); if (logPath == null) { continue; } var log = File.ReadAllText(logPath); if (log.Trim().Length != 0) { if (m_ConversionLog.Length != 0) { m_ConversionLog += "\n\n"; } m_ConversionLog += log; } } return(pendingWork); }
//TODO: There is too much code duplication here, refactor this to send general artifacts to the editor unsafe void SendSubScene(Unity.Entities.Hash128 subSceneGuid, Unity.Entities.Hash128 buildSettingsGuid, int playerId) { LiveLinkMsg.LogInfo($"Sending SubScene: 'GUID: {subSceneGuid}' with 'BuildSettings: {buildSettingsGuid}' to playerId: {playerId}"); var hash = EntityScenesPaths.GetSubSceneArtifactHash(subSceneGuid, buildSettingsGuid, AssetDatabaseExperimental.ImportSyncMode.Block); AssetDatabaseExperimental.GetArtifactPaths(hash, out var paths); var sceneHeaderPath = EntityScenesPaths.GetLoadPathFromArtifactPaths(paths, EntityScenesPaths.PathType.EntitiesHeader); if (!File.Exists(sceneHeaderPath)) { Debug.LogError("Send Entity Scene failed because the entity header file could not be found: " + sceneHeaderPath); return; } if (!BlobAssetReference <SceneMetaData> .TryRead(sceneHeaderPath, SceneMetaDataSerializeUtility.CurrentFileFormatVersion, out var sceneMetaDataRef)) { Debug.LogError("Send Entity Scene failed because the entity header file was an old version: " + sceneHeaderPath); return; } ref var sceneMetaData = ref sceneMetaDataRef.Value;