├── .gitignore ├── Assets ├── WorkObjectData.cs.meta ├── WorkObjectManager.cs.meta ├── WorkObjectSystem.cs.meta ├── WorkObjectSmarterSystem.cs.meta ├── WorkObjectWithoutUpdate.cs.meta ├── WorkObjectSmarterNoCopySystem.cs.meta ├── Scenes.meta ├── Scenes │ ├── SampleScene.unity.meta │ └── SampleScene.unity ├── Tests.meta ├── NewAssembly.asmdef.meta ├── Resources.meta ├── Tests │ ├── Tests.asmdef.meta │ ├── HybridPerformanceTest.cs.meta │ ├── Tests.asmdef │ └── HybridPerformanceTest.cs ├── InitTestScene637117790264092380.unity.meta ├── WorkObjectData.cs ├── WorkObject.cs.meta ├── WorkObjectManager.cs ├── WorkObject.cs ├── NewAssembly.asmdef ├── WorkObjectSystem.cs ├── WorkObjectSmarterNoCopySystem.cs ├── WorkObjectWithoutUpdate.cs ├── WorkObjectSmarterSystem.cs └── InitTestScene637117790264092380.unity └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | Library 3 | Logs 4 | obj 5 | Packages 6 | ProjectSettings 7 | Temp 8 | *.csproj 9 | *.sln -------------------------------------------------------------------------------- /Assets/WorkObjectData.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4827bc263d0d4350ab8c8f41f7602d47 3 | timeCreated: 1576155431 -------------------------------------------------------------------------------- /Assets/WorkObjectManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e91941bc9bdf415aaa06c3f0186a4b89 3 | timeCreated: 1576151121 -------------------------------------------------------------------------------- /Assets/WorkObjectSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 172ea5e5275f444b93ddbdb0f35e02a5 3 | timeCreated: 1576151749 -------------------------------------------------------------------------------- /Assets/WorkObjectSmarterSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02de5474f6a043038ad77ab9f5d59890 3 | timeCreated: 1576155448 -------------------------------------------------------------------------------- /Assets/WorkObjectWithoutUpdate.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 74a5eea271a9499990d469110d195c5d 3 | timeCreated: 1576150902 -------------------------------------------------------------------------------- /Assets/WorkObjectSmarterNoCopySystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b3bd123333e4026af4c6a40060c7fd4 3 | timeCreated: 1576157316 -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3192b39b2838240d1ae31ddc9115fa7d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ae7d56e45331a448e8290c1aebe4829f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/NewAssembly.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 287f450596e674aada445037ef404919 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2bfc8dba5b7664106ac6b6ff18e62cff 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Tests/Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ded40f3d1ada7450d8109a96c09713eb 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/InitTestScene637117790264092380.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d7deec5405a75472d9a62b2de30037a4 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WorkObjectData.cs: -------------------------------------------------------------------------------- 1 | using Unity.Entities; 2 | 3 | public struct WorkObjectData : IComponentData 4 | { 5 | public int integer; 6 | public int timesUpdated; 7 | public float floating; 8 | public bool boolean; 9 | } -------------------------------------------------------------------------------- /Assets/WorkObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d728c6d1f1ff7457280bb931ed64ded5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Tests/HybridPerformanceTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d297128ffbae14a2393069444d679505 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/WorkObjectManager.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class WorkObjectManager : MonoBehaviour 4 | { 5 | public WorkObjectWithoutUpdate[] workObjects; 6 | 7 | public void Update() 8 | { 9 | for (int i = 0; i < workObjects.Length; i++) 10 | { 11 | workObjects[i].ManualUpdate(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Assets/WorkObject.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class WorkObject : MonoBehaviour 6 | { 7 | public int integer; 8 | public bool boolean; 9 | public float floating; 10 | public int timesUpdated; 11 | 12 | void Update() 13 | { 14 | integer += Mathf.RoundToInt((Random.value * 100)); 15 | boolean = !boolean; 16 | floating += Random.value * 100; 17 | timesUpdated++; 18 | } 19 | } -------------------------------------------------------------------------------- /Assets/NewAssembly.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NewAssembly", 3 | "references": [ 4 | "GUID:734d92eba21c94caba915361bd5ac177", 5 | "GUID:8819f35a0fc84499b990e90a4ca1911f", 6 | "GUID:d8b63aba1907145bea998dd612889d6b" 7 | ], 8 | "includePlatforms": [], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": false, 12 | "precompiledReferences": [], 13 | "autoReferenced": true, 14 | "defineConstraints": [], 15 | "versionDefines": [], 16 | "noEngineReferences": false 17 | } -------------------------------------------------------------------------------- /Assets/WorkObjectSystem.cs: -------------------------------------------------------------------------------- 1 | using Unity.Entities; 2 | using Unity.Jobs; 3 | using UnityEngine; 4 | 5 | [DisableAutoCreation] 6 | public class WorkObjectSystem : JobComponentSystem 7 | { 8 | protected override JobHandle OnUpdate(JobHandle inputDeps) 9 | { 10 | Entities.ForEach((WorkObjectWithoutUpdate wo) => 11 | { 12 | wo.integer += Mathf.RoundToInt((Random.value * 100)); 13 | wo.boolean = !wo.boolean; 14 | wo.floating += Random.value * 100; 15 | wo.timesUpdated++; 16 | }).WithoutBurst().Run(); 17 | return default; 18 | } 19 | } -------------------------------------------------------------------------------- /Assets/Tests/Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tests", 3 | "references": [ 4 | "UnityEngine.TestRunner", 5 | "UnityEditor.TestRunner", 6 | "NewAssembly", 7 | "Unity.PerformanceTesting", 8 | "Unity.Entities", 9 | "Unity.Entities.Hybrid" 10 | ], 11 | "includePlatforms": [], 12 | "excludePlatforms": [], 13 | "allowUnsafeCode": false, 14 | "overrideReferences": true, 15 | "precompiledReferences": [ 16 | "nunit.framework.dll" 17 | ], 18 | "autoReferenced": false, 19 | "defineConstraints": [ 20 | "UNITY_INCLUDE_TESTS" 21 | ], 22 | "versionDefines": [], 23 | "noEngineReferences": false 24 | } -------------------------------------------------------------------------------- /Assets/WorkObjectSmarterNoCopySystem.cs: -------------------------------------------------------------------------------- 1 | using Unity.Entities; 2 | using Unity.Jobs; 3 | using Unity.Mathematics; 4 | 5 | [DisableAutoCreation] 6 | public class WorkObjectSmarterNoCopySystem : JobComponentSystem 7 | { 8 | protected override JobHandle OnUpdate(JobHandle inputDeps) 9 | { 10 | var random = new Unity.Mathematics.Random(1234); 11 | Entities.ForEach((ref WorkObjectData wod) => 12 | { 13 | wod.integer += (int) (math.round((random.NextFloat() * 100))); 14 | wod.boolean = !wod.boolean; 15 | wod.floating += random.NextFloat() * 100; 16 | wod.timesUpdated++; 17 | }).Schedule(inputDeps).Complete(); 18 | 19 | return default; 20 | } 21 | } -------------------------------------------------------------------------------- /Assets/WorkObjectWithoutUpdate.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using Unity.Entities; 4 | using Unity.Entities.Hybrid; 5 | 6 | public class WorkObjectWithoutUpdate : MonoBehaviour, IConvertGameObjectToEntity 7 | { 8 | //`public` for hybrid system to modify. 9 | public int integer; 10 | public bool boolean; 11 | public float floating; 12 | public int timesUpdated; 13 | 14 | /// 15 | /// For the manager to call. 16 | /// 17 | public void ManualUpdate() 18 | { 19 | integer += Mathf.RoundToInt((Random.value * 100)); 20 | boolean = !boolean; 21 | floating += Random.value * 100; 22 | timesUpdated++; 23 | } 24 | 25 | /// 26 | /// For the smarter system. 27 | /// 28 | public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) 29 | { 30 | dstManager.AddComponent(entity); 31 | } 32 | } -------------------------------------------------------------------------------- /Assets/WorkObjectSmarterSystem.cs: -------------------------------------------------------------------------------- 1 | using Unity.Entities; 2 | using Unity.Jobs; 3 | using Unity.Mathematics; 4 | using UnityEngine; 5 | 6 | [DisableAutoCreation] 7 | public class WorkObjectSmarterSystem : JobComponentSystem 8 | { 9 | protected override JobHandle OnUpdate(JobHandle inputDeps) 10 | { 11 | var random = new Unity.Mathematics.Random(1234); 12 | Entities.ForEach((ref WorkObjectData wod) => 13 | { 14 | wod.integer += (int) (math.round((random.NextFloat() * 100))); 15 | wod.boolean = !wod.boolean; 16 | wod.floating += random.NextFloat() * 100; 17 | wod.timesUpdated++; 18 | }).Schedule(inputDeps).Complete(); 19 | 20 | Entities.ForEach((WorkObjectWithoutUpdate wo, in WorkObjectData wod) => 21 | { 22 | wo.integer = wod.integer; 23 | wo.boolean = wod.boolean; 24 | wo.floating = wod.floating; 25 | wo.timesUpdated = wod.timesUpdated; 26 | }).WithoutBurst().Run(); 27 | 28 | return default; 29 | } 30 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hybrid ECS performance test 2 | 3 | Run the PlayMode Test to get result in the test log. You must run one by one as I didn't write a proper cleanup between tests. Inspired by [this thread](https://forum.unity.com/threads/my-hybrid-ecs-performance-test.792585/). 4 | 5 | - A : 250000 game objects with `Update()`. 6 | - B : Manager game object looping 250000 times in one frame to call `Update()` equivalent. 7 | - C : One ECS system iterate on 250000 entities that was generated from `ConvertToEntity` with inject mode, and modify values directly to the `MonoBehaviour` reference like in `Update()` with `Entities.ForEach`. The modified values reflected on the `GameObject`'s inspector on the scene. No Burst, no leak detection. 8 | - D : Like C but with a little more work. Added a dedicated `IComponentData` data storage on conversion for parallel calculation. Apply the calculated value by a copy. Burst on, no safety checks, in editor. No leak detection. 9 | - E : Removed the copy back step from D. 10 | 11 | ## Results 12 | 13 | All tests run on MacBook Pro Early 2015 in editor. All units in milliseconds. 14 | 15 | - A : Median:88.87 Min:83.32 Max:657.38 Avg:113.88 Std:77.03 Zeroes:0 SampleCount: 100 Sum: 11388.47 16 | - B : Median:21.48 Min:18.86 Max:48.13 Avg:23.81 Std:6.50 Zeroes:0 SampleCount: 100 Sum: 2380.65 17 | - C : Median:27.93 Min:23.71 Max:29.69 Avg:27.38 Std:1.46 Zeroes:0 SampleCount: 100 Sum: 2738.49 18 | - D : Median:24.09 Min:23.31 Max:40.47 Avg:25.19 Std:2.54 Zeroes:0 SampleCount: 100 Sum: 2518.88 19 | - E : Median:7.95 Min:6.32 Max:11.36 Avg:8.04 Std:0.57 Zeroes:0 SampleCount: 100 Sum: 804.17 20 | 21 | ## Evaluation 22 | 23 | - `Update()` is expensive. 24 | - There is a cost on using the query to assemble native array for `ForEach` from large amount of entities. Otherwise C must be around the same as B, and D should be a bit faster than B. 25 | - You better design for a one-way hybrid approach. Let `GameObject` use the calculated result stored in ECS via `EntityManager`, instead of expensive setting back value to `MonoBehaviour` that is not as cache friendly. -------------------------------------------------------------------------------- /Assets/Tests/HybridPerformanceTest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using NUnit.Framework; 5 | using Unity.Collections; 6 | using Unity.PerformanceTesting; 7 | using UnityEngine; 8 | using UnityEngine.TestTools; 9 | using Unity.Entities; 10 | 11 | namespace Tests 12 | { 13 | public class HybridPerformanceTest 14 | { 15 | const int amount = 250000; 16 | 17 | [UnityTest,Performance] 18 | public IEnumerator A() 19 | { 20 | GameObject go = null; 21 | for (int i = 0; i < amount; i++) 22 | { 23 | go = new GameObject("test", typeof(WorkObject)); 24 | } 25 | yield return Measure.Frames().WarmupCount(10).MeasurementCount(100).Run(); 26 | Assert.That(go.GetComponent().timesUpdated, Is.EqualTo(110)); 27 | } 28 | 29 | [UnityTest,Performance] 30 | public IEnumerator B() 31 | { 32 | var wos = new WorkObjectWithoutUpdate[amount]; 33 | for (int i = 0; i < amount; i++) 34 | { 35 | var go = new GameObject("test"); 36 | var component = go.AddComponent(); 37 | wos[i] = component; 38 | } 39 | 40 | var manager = new GameObject("manager", typeof(WorkObjectManager)); 41 | manager.GetComponent().workObjects = wos; 42 | 43 | yield return Measure.Frames().WarmupCount(10).MeasurementCount(100).Run(); 44 | Assert.That(wos[amount - 1].GetComponent().timesUpdated, Is.EqualTo(110)); 45 | } 46 | 47 | [UnityTest,Performance] 48 | public IEnumerator C() 49 | { 50 | GameObject go = null; 51 | for (int i = 0; i < amount; i++) 52 | { 53 | go = new GameObject("test", typeof(WorkObjectWithoutUpdate)); 54 | var cte = go.AddComponent(); 55 | cte.ConversionMode = ConvertToEntity.Mode.ConvertAndInjectGameObject; 56 | } 57 | 58 | DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups( 59 | World.DefaultGameObjectInjectionWorld, 60 | new List {typeof(WorkObjectSystem)}); 61 | 62 | yield return Measure.Frames().WarmupCount(10).MeasurementCount(100).Run(); 63 | Assert.That(go.GetComponent().timesUpdated, Is.EqualTo(110-1)); 64 | } 65 | 66 | [UnityTest,Performance] 67 | public IEnumerator D() 68 | { 69 | GameObject go = null; 70 | for (int i = 0; i < amount; i++) 71 | { 72 | go = new GameObject("test", typeof(WorkObjectWithoutUpdate)); 73 | var cte = go.AddComponent(); 74 | cte.ConversionMode = ConvertToEntity.Mode.ConvertAndInjectGameObject; 75 | } 76 | 77 | DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups( 78 | World.DefaultGameObjectInjectionWorld, 79 | new List {typeof(WorkObjectSmarterSystem)}); // <------- 80 | 81 | yield return Measure.Frames().WarmupCount(10).MeasurementCount(100).Run(); 82 | Assert.That(go.GetComponent().timesUpdated, Is.EqualTo(110-1)); 83 | } 84 | 85 | [UnityTest,Performance] 86 | public IEnumerator E() 87 | { 88 | GameObject go = null; 89 | for (int i = 0; i < amount; i++) 90 | { 91 | go = new GameObject("test", typeof(WorkObjectWithoutUpdate)); 92 | var cte = go.AddComponent(); 93 | cte.ConversionMode = ConvertToEntity.Mode.ConvertAndInjectGameObject; 94 | } 95 | 96 | DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups( 97 | World.DefaultGameObjectInjectionWorld, 98 | new List {typeof(WorkObjectSmarterNoCopySystem)}); // <------- 99 | 100 | yield return Measure.Frames().WarmupCount(10).MeasurementCount(100).Run(); 101 | 102 | var cda = World.DefaultGameObjectInjectionWorld.EntityManager.CreateEntityQuery(ComponentType 103 | .ReadOnly()).ToComponentDataArray(Allocator.TempJob); 104 | Assert.That( cda[0].timesUpdated, Is.EqualTo(110-1)); 105 | 106 | cda.Dispose(); 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 705507994} 41 | m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 0 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &705507993 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 705507995} 133 | - component: {fileID: 705507994} 134 | m_Layer: 0 135 | m_Name: Directional Light 136 | m_TagString: Untagged 137 | m_Icon: {fileID: 0} 138 | m_NavMeshLayer: 0 139 | m_StaticEditorFlags: 0 140 | m_IsActive: 1 141 | --- !u!108 &705507994 142 | Light: 143 | m_ObjectHideFlags: 0 144 | m_CorrespondingSourceObject: {fileID: 0} 145 | m_PrefabInstance: {fileID: 0} 146 | m_PrefabAsset: {fileID: 0} 147 | m_GameObject: {fileID: 705507993} 148 | m_Enabled: 1 149 | serializedVersion: 10 150 | m_Type: 1 151 | m_Shape: 0 152 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 153 | m_Intensity: 1 154 | m_Range: 10 155 | m_SpotAngle: 30 156 | m_InnerSpotAngle: 21.802082 157 | m_CookieSize: 10 158 | m_Shadows: 159 | m_Type: 2 160 | m_Resolution: -1 161 | m_CustomResolution: -1 162 | m_Strength: 1 163 | m_Bias: 0.05 164 | m_NormalBias: 0.4 165 | m_NearPlane: 0.2 166 | m_CullingMatrixOverride: 167 | e00: 1 168 | e01: 0 169 | e02: 0 170 | e03: 0 171 | e10: 0 172 | e11: 1 173 | e12: 0 174 | e13: 0 175 | e20: 0 176 | e21: 0 177 | e22: 1 178 | e23: 0 179 | e30: 0 180 | e31: 0 181 | e32: 0 182 | e33: 1 183 | m_UseCullingMatrixOverride: 0 184 | m_Cookie: {fileID: 0} 185 | m_DrawHalo: 0 186 | m_Flare: {fileID: 0} 187 | m_RenderMode: 0 188 | m_CullingMask: 189 | serializedVersion: 2 190 | m_Bits: 4294967295 191 | m_RenderingLayerMask: 1 192 | m_Lightmapping: 1 193 | m_LightShadowCasterMode: 0 194 | m_AreaSize: {x: 1, y: 1} 195 | m_BounceIntensity: 1 196 | m_ColorTemperature: 6570 197 | m_UseColorTemperature: 0 198 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} 199 | m_UseBoundingSphereOverride: 0 200 | m_ShadowRadius: 0 201 | m_ShadowAngle: 0 202 | --- !u!4 &705507995 203 | Transform: 204 | m_ObjectHideFlags: 0 205 | m_CorrespondingSourceObject: {fileID: 0} 206 | m_PrefabInstance: {fileID: 0} 207 | m_PrefabAsset: {fileID: 0} 208 | m_GameObject: {fileID: 705507993} 209 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 210 | m_LocalPosition: {x: 0, y: 3, z: 0} 211 | m_LocalScale: {x: 1, y: 1, z: 1} 212 | m_Children: [] 213 | m_Father: {fileID: 0} 214 | m_RootOrder: 1 215 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 216 | --- !u!1 &963194225 217 | GameObject: 218 | m_ObjectHideFlags: 0 219 | m_CorrespondingSourceObject: {fileID: 0} 220 | m_PrefabInstance: {fileID: 0} 221 | m_PrefabAsset: {fileID: 0} 222 | serializedVersion: 6 223 | m_Component: 224 | - component: {fileID: 963194228} 225 | - component: {fileID: 963194227} 226 | - component: {fileID: 963194226} 227 | m_Layer: 0 228 | m_Name: Main Camera 229 | m_TagString: MainCamera 230 | m_Icon: {fileID: 0} 231 | m_NavMeshLayer: 0 232 | m_StaticEditorFlags: 0 233 | m_IsActive: 1 234 | --- !u!81 &963194226 235 | AudioListener: 236 | m_ObjectHideFlags: 0 237 | m_CorrespondingSourceObject: {fileID: 0} 238 | m_PrefabInstance: {fileID: 0} 239 | m_PrefabAsset: {fileID: 0} 240 | m_GameObject: {fileID: 963194225} 241 | m_Enabled: 1 242 | --- !u!20 &963194227 243 | Camera: 244 | m_ObjectHideFlags: 0 245 | m_CorrespondingSourceObject: {fileID: 0} 246 | m_PrefabInstance: {fileID: 0} 247 | m_PrefabAsset: {fileID: 0} 248 | m_GameObject: {fileID: 963194225} 249 | m_Enabled: 1 250 | serializedVersion: 2 251 | m_ClearFlags: 1 252 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 253 | m_projectionMatrixMode: 1 254 | m_GateFitMode: 2 255 | m_FOVAxisMode: 0 256 | m_SensorSize: {x: 36, y: 24} 257 | m_LensShift: {x: 0, y: 0} 258 | m_FocalLength: 50 259 | m_NormalizedViewPortRect: 260 | serializedVersion: 2 261 | x: 0 262 | y: 0 263 | width: 1 264 | height: 1 265 | near clip plane: 0.3 266 | far clip plane: 1000 267 | field of view: 60 268 | orthographic: 0 269 | orthographic size: 5 270 | m_Depth: -1 271 | m_CullingMask: 272 | serializedVersion: 2 273 | m_Bits: 4294967295 274 | m_RenderingPath: -1 275 | m_TargetTexture: {fileID: 0} 276 | m_TargetDisplay: 0 277 | m_TargetEye: 3 278 | m_HDR: 1 279 | m_AllowMSAA: 1 280 | m_AllowDynamicResolution: 0 281 | m_ForceIntoRT: 0 282 | m_OcclusionCulling: 1 283 | m_StereoConvergence: 10 284 | m_StereoSeparation: 0.022 285 | --- !u!4 &963194228 286 | Transform: 287 | m_ObjectHideFlags: 0 288 | m_CorrespondingSourceObject: {fileID: 0} 289 | m_PrefabInstance: {fileID: 0} 290 | m_PrefabAsset: {fileID: 0} 291 | m_GameObject: {fileID: 963194225} 292 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 293 | m_LocalPosition: {x: 0, y: 1, z: -10} 294 | m_LocalScale: {x: 1, y: 1, z: 1} 295 | m_Children: [] 296 | m_Father: {fileID: 0} 297 | m_RootOrder: 0 298 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 299 | -------------------------------------------------------------------------------- /Assets/InitTestScene637117790264092380.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 512 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 256 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 1 83 | m_PVRDenoiserTypeDirect: 1 84 | m_PVRDenoiserTypeIndirect: 1 85 | m_PVRDenoiserTypeAO: 1 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 1 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &403350796 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 403350799} 133 | - component: {fileID: 403350798} 134 | - component: {fileID: 403350797} 135 | m_Layer: 0 136 | m_Name: Code-based tests runner 137 | m_TagString: Untagged 138 | m_Icon: {fileID: 0} 139 | m_NavMeshLayer: 0 140 | m_StaticEditorFlags: 0 141 | m_IsActive: 1 142 | --- !u!114 &403350797 143 | MonoBehaviour: 144 | m_ObjectHideFlags: 0 145 | m_CorrespondingSourceObject: {fileID: 0} 146 | m_PrefabInstance: {fileID: 0} 147 | m_PrefabAsset: {fileID: 0} 148 | m_GameObject: {fileID: 403350796} 149 | m_Enabled: 1 150 | m_EditorHideFlags: 0 151 | m_Script: {fileID: 11500000, guid: 3cf5cb9e1ef590c48b1f919f2a7bd895, type: 3} 152 | m_Name: 153 | m_EditorClassIdentifier: 154 | --- !u!114 &403350798 155 | MonoBehaviour: 156 | m_ObjectHideFlags: 0 157 | m_CorrespondingSourceObject: {fileID: 0} 158 | m_PrefabInstance: {fileID: 0} 159 | m_PrefabAsset: {fileID: 0} 160 | m_GameObject: {fileID: 403350796} 161 | m_Enabled: 1 162 | m_EditorHideFlags: 0 163 | m_Script: {fileID: 11500000, guid: 102e512f651ee834f951a2516c1ea3b8, type: 3} 164 | m_Name: 165 | m_EditorClassIdentifier: 166 | m_AssembliesWithTests: 167 | - Tests 168 | - Unity.PerformanceTesting 169 | - UnityEngine.TestRunner 170 | testStartedEvent: 171 | m_PersistentCalls: 172 | m_Calls: 173 | - m_Target: {fileID: 403350797} 174 | m_MethodName: TestStarted 175 | m_Mode: 0 176 | m_Arguments: 177 | m_ObjectArgument: {fileID: 0} 178 | m_ObjectArgumentAssemblyTypeName: 179 | m_IntArgument: 0 180 | m_FloatArgument: 0 181 | m_StringArgument: 182 | m_BoolArgument: 0 183 | m_CallState: 2 184 | - m_Target: {fileID: 529358493} 185 | m_MethodName: TestStarted 186 | m_Mode: 0 187 | m_Arguments: 188 | m_ObjectArgument: {fileID: 0} 189 | m_ObjectArgumentAssemblyTypeName: 190 | m_IntArgument: 0 191 | m_FloatArgument: 0 192 | m_StringArgument: 193 | m_BoolArgument: 0 194 | m_CallState: 2 195 | - m_Target: {fileID: 1220940090} 196 | m_MethodName: TestStarted 197 | m_Mode: 0 198 | m_Arguments: 199 | m_ObjectArgument: {fileID: 0} 200 | m_ObjectArgumentAssemblyTypeName: 201 | m_IntArgument: 0 202 | m_FloatArgument: 0 203 | m_StringArgument: 204 | m_BoolArgument: 0 205 | m_CallState: 2 206 | - m_Target: {fileID: 927233561} 207 | m_MethodName: TestStarted 208 | m_Mode: 0 209 | m_Arguments: 210 | m_ObjectArgument: {fileID: 0} 211 | m_ObjectArgumentAssemblyTypeName: 212 | m_IntArgument: 0 213 | m_FloatArgument: 0 214 | m_StringArgument: 215 | m_BoolArgument: 0 216 | m_CallState: 2 217 | testFinishedEvent: 218 | m_PersistentCalls: 219 | m_Calls: 220 | - m_Target: {fileID: 403350797} 221 | m_MethodName: TestFinished 222 | m_Mode: 0 223 | m_Arguments: 224 | m_ObjectArgument: {fileID: 0} 225 | m_ObjectArgumentAssemblyTypeName: 226 | m_IntArgument: 0 227 | m_FloatArgument: 0 228 | m_StringArgument: 229 | m_BoolArgument: 0 230 | m_CallState: 2 231 | - m_Target: {fileID: 529358493} 232 | m_MethodName: TestFinished 233 | m_Mode: 0 234 | m_Arguments: 235 | m_ObjectArgument: {fileID: 0} 236 | m_ObjectArgumentAssemblyTypeName: 237 | m_IntArgument: 0 238 | m_FloatArgument: 0 239 | m_StringArgument: 240 | m_BoolArgument: 0 241 | m_CallState: 2 242 | - m_Target: {fileID: 1220940090} 243 | m_MethodName: TestFinished 244 | m_Mode: 0 245 | m_Arguments: 246 | m_ObjectArgument: {fileID: 0} 247 | m_ObjectArgumentAssemblyTypeName: 248 | m_IntArgument: 0 249 | m_FloatArgument: 0 250 | m_StringArgument: 251 | m_BoolArgument: 0 252 | m_CallState: 2 253 | - m_Target: {fileID: 927233561} 254 | m_MethodName: TestFinished 255 | m_Mode: 0 256 | m_Arguments: 257 | m_ObjectArgument: {fileID: 0} 258 | m_ObjectArgumentAssemblyTypeName: 259 | m_IntArgument: 0 260 | m_FloatArgument: 0 261 | m_StringArgument: 262 | m_BoolArgument: 0 263 | m_CallState: 2 264 | runStartedEvent: 265 | m_PersistentCalls: 266 | m_Calls: 267 | - m_Target: {fileID: 403350797} 268 | m_MethodName: RunStarted 269 | m_Mode: 0 270 | m_Arguments: 271 | m_ObjectArgument: {fileID: 0} 272 | m_ObjectArgumentAssemblyTypeName: 273 | m_IntArgument: 0 274 | m_FloatArgument: 0 275 | m_StringArgument: 276 | m_BoolArgument: 0 277 | m_CallState: 2 278 | - m_Target: {fileID: 529358493} 279 | m_MethodName: RunStarted 280 | m_Mode: 0 281 | m_Arguments: 282 | m_ObjectArgument: {fileID: 0} 283 | m_ObjectArgumentAssemblyTypeName: 284 | m_IntArgument: 0 285 | m_FloatArgument: 0 286 | m_StringArgument: 287 | m_BoolArgument: 0 288 | m_CallState: 2 289 | - m_Target: {fileID: 1220940090} 290 | m_MethodName: RunStarted 291 | m_Mode: 0 292 | m_Arguments: 293 | m_ObjectArgument: {fileID: 0} 294 | m_ObjectArgumentAssemblyTypeName: 295 | m_IntArgument: 0 296 | m_FloatArgument: 0 297 | m_StringArgument: 298 | m_BoolArgument: 0 299 | m_CallState: 2 300 | - m_Target: {fileID: 927233561} 301 | m_MethodName: RunStarted 302 | m_Mode: 0 303 | m_Arguments: 304 | m_ObjectArgument: {fileID: 0} 305 | m_ObjectArgumentAssemblyTypeName: 306 | m_IntArgument: 0 307 | m_FloatArgument: 0 308 | m_StringArgument: 309 | m_BoolArgument: 0 310 | m_CallState: 2 311 | runFinishedEvent: 312 | m_PersistentCalls: 313 | m_Calls: 314 | - m_Target: {fileID: 403350797} 315 | m_MethodName: RunFinished 316 | m_Mode: 0 317 | m_Arguments: 318 | m_ObjectArgument: {fileID: 0} 319 | m_ObjectArgumentAssemblyTypeName: 320 | m_IntArgument: 0 321 | m_FloatArgument: 0 322 | m_StringArgument: 323 | m_BoolArgument: 0 324 | m_CallState: 2 325 | - m_Target: {fileID: 529358493} 326 | m_MethodName: RunFinished 327 | m_Mode: 0 328 | m_Arguments: 329 | m_ObjectArgument: {fileID: 0} 330 | m_ObjectArgumentAssemblyTypeName: 331 | m_IntArgument: 0 332 | m_FloatArgument: 0 333 | m_StringArgument: 334 | m_BoolArgument: 0 335 | m_CallState: 2 336 | - m_Target: {fileID: 1220940090} 337 | m_MethodName: RunFinished 338 | m_Mode: 0 339 | m_Arguments: 340 | m_ObjectArgument: {fileID: 0} 341 | m_ObjectArgumentAssemblyTypeName: 342 | m_IntArgument: 0 343 | m_FloatArgument: 0 344 | m_StringArgument: 345 | m_BoolArgument: 0 346 | m_CallState: 2 347 | - m_Target: {fileID: 927233561} 348 | m_MethodName: RunFinished 349 | m_Mode: 0 350 | m_Arguments: 351 | m_ObjectArgument: {fileID: 0} 352 | m_ObjectArgumentAssemblyTypeName: 353 | m_IntArgument: 0 354 | m_FloatArgument: 0 355 | m_StringArgument: 356 | m_BoolArgument: 0 357 | m_CallState: 2 358 | settings: 359 | filters: 360 | - assemblyNames: [] 361 | groupNames: [] 362 | categoryNames: [] 363 | testNames: 364 | - Tests.HybridPerformanceTest.D 365 | testRepetitions: 1 366 | synchronousOnly: 0 367 | sceneBased: 0 368 | originalScene: Assets/Scenes/SampleScene.unity 369 | bootstrapScene: Assets/InitTestScene637117790264092380.unity 370 | --- !u!4 &403350799 371 | Transform: 372 | m_ObjectHideFlags: 0 373 | m_CorrespondingSourceObject: {fileID: 0} 374 | m_PrefabInstance: {fileID: 0} 375 | m_PrefabAsset: {fileID: 0} 376 | m_GameObject: {fileID: 403350796} 377 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 378 | m_LocalPosition: {x: 0, y: 0, z: 0} 379 | m_LocalScale: {x: 1, y: 1, z: 1} 380 | m_Children: [] 381 | m_Father: {fileID: 0} 382 | m_RootOrder: 0 383 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 384 | --- !u!114 &529358493 385 | MonoBehaviour: 386 | m_ObjectHideFlags: 0 387 | m_CorrespondingSourceObject: {fileID: 0} 388 | m_PrefabInstance: {fileID: 0} 389 | m_PrefabAsset: {fileID: 0} 390 | m_GameObject: {fileID: 0} 391 | m_Enabled: 1 392 | m_EditorHideFlags: 0 393 | m_Script: {fileID: 11500000, guid: d44e6804bc58be84ea71a619b468f150, type: 3} 394 | m_Name: 395 | m_EditorClassIdentifier: 396 | --- !u!114 &927233561 397 | MonoBehaviour: 398 | m_ObjectHideFlags: 0 399 | m_CorrespondingSourceObject: {fileID: 0} 400 | m_PrefabInstance: {fileID: 0} 401 | m_PrefabAsset: {fileID: 0} 402 | m_GameObject: {fileID: 0} 403 | m_Enabled: 1 404 | m_EditorHideFlags: 0 405 | m_Script: {fileID: 11500000, guid: 68f09f0f82599b5448579854e622a4c1, type: 3} 406 | m_Name: 407 | m_EditorClassIdentifier: 408 | --- !u!114 &1220940090 409 | MonoBehaviour: 410 | m_ObjectHideFlags: 0 411 | m_CorrespondingSourceObject: {fileID: 0} 412 | m_PrefabInstance: {fileID: 0} 413 | m_PrefabAsset: {fileID: 0} 414 | m_GameObject: {fileID: 0} 415 | m_Enabled: 1 416 | m_EditorHideFlags: 0 417 | m_Script: {fileID: 11500000, guid: f3e1b3cbf3fac6a459b1a602167ad311, type: 3} 418 | m_Name: 419 | m_EditorClassIdentifier: 420 | --------------------------------------------------------------------------------