diff --git a/Viagg-io/Assets/SceneProfiler.meta b/Viagg-io/Assets/SceneProfiler.meta new file mode 100644 index 00000000..9d4b8f7a --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e9de99891353f047bfc293d0de6b9fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Demo.meta b/Viagg-io/Assets/SceneProfiler/Demo.meta new file mode 100644 index 00000000..599befb6 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fa52901a83eb5948a65c9837a1590fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity b/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity new file mode 100644 index 00000000..19c97df9 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity @@ -0,0 +1,885 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &307962993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 307962995} + - component: {fileID: 307962994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &307962994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 307962993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &307962995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 307962993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1214143739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1214143742} + - component: {fileID: 1214143741} + - component: {fileID: 1214143740} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1214143740 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214143739} + m_Enabled: 1 +--- !u!20 &1214143741 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214143739} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1214143742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214143739} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1498584708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1498584712} + - component: {fileID: 1498584711} + - component: {fileID: 1498584710} + - component: {fileID: 1498584709} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1498584709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498584708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1498584710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498584708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1498584711 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498584708} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1498584712 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498584708} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1643728717} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1643728716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643728717} + - component: {fileID: 1643728720} + - component: {fileID: 1643728719} + - component: {fileID: 1643728718} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1643728717 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643728716} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1498584712} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1643728718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643728716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1643728719} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1643728719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643728716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1643728720 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643728716} + m_CullTransparentMesh: 1 +--- !u!1 &1954325613 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1954325619} + - component: {fileID: 1954325618} + - component: {fileID: 1954325617} + - component: {fileID: 1954325614} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!82 &1954325614 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954325613} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!65 &1954325617 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954325613} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 2, y: 2, z: 2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &1954325618 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954325613} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!4 &1954325619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954325613} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0026460872, y: -0.017538406, z: -0.013090232} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2059176174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059176177} + - component: {fileID: 2059176176} + - component: {fileID: 2059176175} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2059176175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059176174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &2059176176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059176174} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &2059176177 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059176174} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2140946533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140946537} + - component: {fileID: 2140946536} + - component: {fileID: 2140946535} + - component: {fileID: 2140946534} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &2140946534 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140946533} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 2, y: 2, z: 2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2140946535 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140946533} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2140946536 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140946533} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2140946537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140946533} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0026460872, y: -0.017538406, z: -0.013090232} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity.meta b/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity.meta new file mode 100644 index 00000000..b05587da --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Demo/TestScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cea2d3a219a6e874ea94c6a8429b627a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Documentation.meta b/Viagg-io/Assets/SceneProfiler/Documentation.meta new file mode 100644 index 00000000..f197816a --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9abfc7197cb58a44580c0b3d6cc74d5d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf b/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf new file mode 100644 index 00000000..447f95a2 Binary files /dev/null and b/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf differ diff --git a/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf.meta b/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf.meta new file mode 100644 index 00000000..95d8c23e --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Documentation/SceneProfilerToolDocumentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3b1288a3b080c504189b7bdaff6fe754 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Editor.meta b/Viagg-io/Assets/SceneProfiler/Editor.meta new file mode 100644 index 00000000..cf43367e --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24dcc9709443c854bad681b97c28d767 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs new file mode 100644 index 00000000..6da2c183 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectAudioClipData + { + private SceneProfiler _sceneProfiler; + + public CollectAudioClipData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CheckSelectedFolder() + { + if (!_sceneProfiler.IncludeSelectedFolder || Selection.objects.Length == 0) return; + + var folders = new List(); + foreach (var obj in Selection.objects) + { + if (obj.GetType() != typeof(DefaultAsset)) continue; + var path = AssetDatabase.GetAssetPath(obj); + folders.Add(path); + } + + if (folders.Count != 0) + { + var guids = AssetDatabase.FindAssets("t:AudioClip", folders.ToArray()); + if (guids.Length != 0) + { + foreach (var guid in guids) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + var item = AssetDatabase.LoadAssetAtPath(path); + var tClipDetails = FindClipDetails(item); + if (tClipDetails == null) + { + tClipDetails = new AudioClipDetails { clip = item }; + _sceneProfiler.ActiveClipDetails.Add(tClipDetails); + } + } + } + } + } + + AudioClipDetails FindClipDetails(AudioClip tClip) + { + foreach (AudioClipDetails tClipDetails in _sceneProfiler.ActiveClipDetails) + { + if (tClipDetails.clip == tClip) return tClipDetails; + } + return null; + } + + public void CheckAudioSources() + { + AudioSource[] AudioSources = _sceneProfiler.FindObjects(); + + foreach (AudioSource tAudioSource in AudioSources) + { + AudioClip tClip = tAudioSource.clip; + if (tClip != null) + { + AudioClipDetails tClipDetails = FindClipDetails(tClip); + if (tClipDetails == null) + { + tClipDetails = new AudioClipDetails { clip = tClip }; + _sceneProfiler.ActiveClipDetails.Add(tClipDetails); + } + tClipDetails.FoundInAudioSources.Add(tAudioSource); + } + else + { + Missing tMissing = new Missing + { + Object = tAudioSource.transform, + type = "audio clip", + name = tAudioSource.transform.name + }; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + } + } + + public void CheckAudioClipReferences(FieldInfo field, MonoBehaviour script) + { + if (field.FieldType == typeof(AudioClip)) + { + AudioClip tClip = field.GetValue(script) as AudioClip; + if (tClip != null) + { + AudioClipDetails tClipDetails = FindClipDetails(tClip); + if (tClipDetails == null) + { + tClipDetails = new AudioClipDetails { clip = tClip }; + _sceneProfiler.ActiveClipDetails.Add(tClipDetails); + } + } + } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs.meta new file mode 100644 index 00000000..2ac74675 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectAudioClipData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c325a9bb57aa25d4193e3fe4e6dfe6ec +timeCreated: 1720311294 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs new file mode 100644 index 00000000..494f1692 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs @@ -0,0 +1,92 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectExpensiveObject + { + private SceneProfiler _sceneProfiler; + private const int HierarchyDepthThreshold = 7; + private const int ComponentCountThreshold = 5; + + public CollectExpensiveObject(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CollectData() + { + _sceneProfiler.ActiveExpensiveObjects.Clear(); + List allObjects = _sceneProfiler.FindAllGameObjects(); + + foreach (GameObject obj in allObjects) + { + if (obj == null) continue; + + if (obj.transform.localScale != Vector3.one) + { + AddExpensiveObjectDetails(obj, "Scale"); + } + } + + foreach (GameObject obj in allObjects) + { + if (obj == null) continue; + + if (GetHierarchyDepth(obj.transform) > HierarchyDepthThreshold) + { + AddExpensiveObjectDetails(obj, "Hierarchy"); + } + } + + foreach (GameObject obj in allObjects) + { + if (obj == null) continue; + + if (obj.GetComponents().Length > ComponentCountThreshold) + { + AddExpensiveObjectDetails(obj, "Components"); + } + } + } + + private void AddExpensiveObjectDetails(GameObject obj, string type) + { + ExpensiveObjectDetails details = new ExpensiveObjectDetails(obj); + switch (type) + { + case "Scale": + details.scaleType = IsUniformScale(obj.transform.localScale) ? "Uniform" : "NonUniform"; + details.scale = obj.transform.localScale; + break; + case "Hierarchy": + details.hierarchyDepth = GetHierarchyDepth(obj.transform); + break; + case "Components": + details.componentCount = obj.GetComponents().Length; + break; + } + + if (!_sceneProfiler.ActiveExpensiveObjects.Contains(details)) + { + _sceneProfiler.ActiveExpensiveObjects.Add(details); + } + } + + private bool IsUniformScale(Vector3 scale) + { + return Mathf.Approximately(scale.x, scale.y) && Mathf.Approximately(scale.y, scale.z); + } + + private int GetHierarchyDepth(Transform transform) + { + int depth = 0; + while (transform.parent != null) + { + depth++; + transform = transform.parent; + } + return depth; + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs.meta new file mode 100644 index 00000000..0b8ac326 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectExpensiveObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 514c097f73434943a73f5c56b63d1802 +timeCreated: 1720990995 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs new file mode 100644 index 00000000..dc908dda --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs @@ -0,0 +1,60 @@ +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectLightData + { + private SceneProfiler _sceneProfiler; + + public CollectLightData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CheckLights() + { + Light[] lights = _sceneProfiler.FindObjects(); + + foreach (Light light in lights) + { + if (!_sceneProfiler.ActiveLights.Any(l => l.light == light)) + { + LightDetails lightDetails = new LightDetails + { + light = light, + isEnabled = light.enabled, + shadowType = light.shadows, + isActive = light.gameObject.activeInHierarchy + }; + + _sceneProfiler.ActiveLights.Add(lightDetails); + } + } + } + + public void CheckLightReferences(FieldInfo field, MonoBehaviour script) + { + if (field.FieldType == typeof(Light)) + { + Light tLight = field.GetValue(script) as Light; + if (tLight != null) + { + LightDetails tLightDetails = new LightDetails + { + light = tLight, + isEnabled = tLight.enabled, + shadowType = tLight.shadows, + isActive = tLight.gameObject.activeInHierarchy + }; + + if (!_sceneProfiler.ActiveLights.Any(l => l.light == tLight)) + { + _sceneProfiler.ActiveLights.Add(tLightDetails); + } + } + } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs.meta new file mode 100644 index 00000000..c9c45ad0 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectLightData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 92feb30e3e103ce48b181a06940a1bc5 +timeCreated: 1720314016 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs new file mode 100644 index 00000000..7ae9c352 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs @@ -0,0 +1,102 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace SceneProfiler.Editor +{ + public class CollectMaterialsData + { + private SceneProfiler _sceneProfiler; + + public CollectMaterialsData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + MaterialDetails FindMaterialDetails(Material tMaterial) + { + foreach (MaterialDetails tMaterialDetails in _sceneProfiler.ActiveMaterials) + { + if (tMaterialDetails.material == tMaterial) return tMaterialDetails; + } + return null; + } + + public void CheckRenderers() + { + Renderer[] renderers = _sceneProfiler.FindObjects(); + + AddSkyboxMaterial(); + + foreach (Renderer renderer in renderers) + { + AddMaterialDetails(renderer); + } + } + + private void AddSkyboxMaterial() + { + MaterialDetails skyMat = new MaterialDetails + { + material = RenderSettings.skybox, + isSky = true + }; + _sceneProfiler.ActiveMaterials.Add(skyMat); + } + + private void AddMaterialDetails(Renderer renderer) + { + foreach (Material material in renderer.sharedMaterials) + { + MaterialDetails tMaterialDetails = FindMaterialDetails(material); + if (tMaterialDetails == null) + { + tMaterialDetails = new MaterialDetails + { + material = material + }; + _sceneProfiler.ActiveMaterials.Add(tMaterialDetails); + } + tMaterialDetails.FoundInRenderers.Add(renderer); + } + } + + public void CheckGUIElements() + { + if (!_sceneProfiler.IncludeGuiElements) return; + + Graphic[] graphics = _sceneProfiler.FindObjects(); + + foreach (Graphic graphic in graphics) + { + + if (graphic.materialForRendering) + { + MaterialDetails tMaterialDetails = FindMaterialDetails(graphic.materialForRendering); + if (tMaterialDetails == null) + { + tMaterialDetails = new MaterialDetails(); + tMaterialDetails.material = graphic.materialForRendering; + tMaterialDetails.isgui = true; + _sceneProfiler.ActiveMaterials.Add(tMaterialDetails); + } + tMaterialDetails.FoundInGraphics.Add(graphic); + } + } + } + + public void AddMaterialDetails(Material tMaterial) + { + MaterialDetails tMatDetails = FindMaterialDetails(tMaterial); + if (tMatDetails == null) + { + tMatDetails = new MaterialDetails(); + tMatDetails.instance = true; + tMatDetails.material = tMaterial; + if (!_sceneProfiler.ActiveMaterials.Contains(tMatDetails)) + { + _sceneProfiler.ActiveMaterials.Add(tMatDetails); + } + } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs.meta new file mode 100644 index 00000000..e81ae257 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectMaterialsData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: db2818977c3239a4e832391ae76f9b07 +timeCreated: 1720308073 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs new file mode 100644 index 00000000..226c664a --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs @@ -0,0 +1,156 @@ +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectMeshData + { + private SceneProfiler _sceneProfiler; + + public CollectMeshData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CheckMeshFilters() + { + MeshFilter[] meshFilters = _sceneProfiler.FindObjects(); + + foreach (MeshFilter tMeshFilter in meshFilters) + { + Mesh tMesh = tMeshFilter.sharedMesh; + if (tMesh != null) + { + MeshDetails tMeshDetails = FindMeshDetails(tMesh); + if (tMeshDetails == null) + { + tMeshDetails = new MeshDetails(); + tMeshDetails.mesh = tMesh; + _sceneProfiler.ActiveMeshDetails.Add(tMeshDetails); + } + tMeshDetails.FoundInMeshFilters.Add(tMeshFilter); + + if (GameObjectUtility.AreStaticEditorFlagsSet(tMeshFilter.gameObject, StaticEditorFlags.BatchingStatic)) + { + tMeshDetails.StaticBatchingEnabled.Add(tMeshFilter.gameObject); + } + + } + else if (tMesh == null && tMeshFilter.transform.GetComponent("TextContainer") == null) + { + Missing tMissing = new Missing(); + tMissing.Object = tMeshFilter.transform; + tMissing.type = "mesh"; + tMissing.name = tMeshFilter.transform.name; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + + var meshRenderrer = tMeshFilter.transform.GetComponent(); + + if (meshRenderrer == null || meshRenderrer.sharedMaterial == null) + { + Missing tMissing = new Missing(); + tMissing.Object = tMeshFilter.transform; + tMissing.type = "material"; + tMissing.name = tMeshFilter.transform.name; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + } + } + + public void CheckSkinnedMeshRenderers() + { + SkinnedMeshRenderer[] skinnedMeshRenderers = _sceneProfiler.FindObjects(); + + foreach (SkinnedMeshRenderer tSkinnedMeshRenderer in skinnedMeshRenderers) + { + Mesh tMesh = tSkinnedMeshRenderer.sharedMesh; + if (tMesh != null) + { + MeshDetails tMeshDetails = FindMeshDetails(tMesh); + if (tMeshDetails == null) + { + tMeshDetails = new MeshDetails(); + tMeshDetails.mesh = tMesh; + _sceneProfiler.ActiveMeshDetails.Add(tMeshDetails); + } + tMeshDetails.FoundInSkinnedMeshRenderer.Add(tSkinnedMeshRenderer); + } + else if (tMesh == null) + { + Missing tMissing = new Missing(); + tMissing.Object = tSkinnedMeshRenderer.transform; + tMissing.type = "mesh"; + tMissing.name = tSkinnedMeshRenderer.transform.name; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + if (tSkinnedMeshRenderer.sharedMaterial == null) + { + Missing tMissing = new Missing(); + tMissing.Object = tSkinnedMeshRenderer.transform; + tMissing.type = "material"; + tMissing.name = tSkinnedMeshRenderer.transform.name; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + } + } + + public void CheckLODGroups() + { + LODGroup[] lodGroups = _sceneProfiler.FindObjects(); + if (lodGroups != null) + { + foreach (var group in lodGroups) + { + var lods = group.GetLODs(); + for (int i = 0, l = lods.Length; i < l; i++) + { + if (lods[i].renderers.Length == 0) + { + Missing tMissing = new Missing(); + tMissing.Object = group.transform; + tMissing.type = "lod"; + tMissing.name = group.transform.name; + _sceneProfiler.MissingObjects.Add(tMissing); + _sceneProfiler.thingsMissing = true; + } + } + } + } + } + + public void CheckMeshReferences(FieldInfo field, MonoBehaviour script) + { + if (field.FieldType == typeof(Mesh)) + { + Mesh tMesh = field.GetValue(script) as Mesh; + if (tMesh != null) + { + MeshDetails tMeshDetails = FindMeshDetails(tMesh); + if (tMeshDetails == null) + { + tMeshDetails = new MeshDetails(); + tMeshDetails.mesh = tMesh; + tMeshDetails.instance = true; + _sceneProfiler.ActiveMeshDetails.Add(tMeshDetails); + } + } + } + } + + MeshDetails FindMeshDetails(Mesh tMesh) + { + foreach (MeshDetails tMeshDetails in _sceneProfiler.ActiveMeshDetails) + { + if (tMeshDetails.mesh == tMesh) return tMeshDetails; + } + return null; + } + + } +} diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs.meta new file mode 100644 index 00000000..aa6ec397 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectMeshData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 187312d40d8d09b42ac7110b61d091f0 +timeCreated: 1720313934 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs new file mode 100644 index 00000000..45da5b36 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs @@ -0,0 +1,70 @@ +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectParticleSystemData + { + private SceneProfiler _sceneProfiler; + + public CollectParticleSystemData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CheckParticleSystems() + { + ParticleSystem[] particleSystems = _sceneProfiler.FindObjects(); + + foreach (ParticleSystem ps in particleSystems) + { + if (ps == null) continue; + + if (!_sceneProfiler.ActiveParticleSystems.Any(p => p.particleSystem == ps)) + { + ParticleSystemDetails psDetails = new ParticleSystemDetails + { + particleSystem = ps + }; + + psDetails.FoundInGameObjects.Add(ps.gameObject); + + var renderer = ps.GetComponent(); + if (renderer != null) + { + psDetails.material = renderer.sharedMaterial; + } + + var main = ps.main; + psDetails.maxParticles = main.maxParticles; + psDetails.activeParticles = ps.particleCount; + + _sceneProfiler.ActiveParticleSystems.Add(psDetails); + } + } + + _sceneProfiler.ActiveParticleSystems.Sort((a, b) => b.activeParticles.CompareTo(a.activeParticles)); + } + + public void CheckParticleSystemReferences(FieldInfo field, MonoBehaviour script) + { + if (field.FieldType == typeof(ParticleSystem)) + { + ParticleSystem tParticleSystem = field.GetValue(script) as ParticleSystem; + if (tParticleSystem != null) + { + if (!_sceneProfiler.ActiveParticleSystems.Any(p => p.particleSystem == tParticleSystem)) + { + ParticleSystemDetails tParticleSystemDetails = new ParticleSystemDetails + { + particleSystem = tParticleSystem + }; + + _sceneProfiler.ActiveParticleSystems.Add(tParticleSystemDetails); + } + } + } + } + } +} diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs.meta new file mode 100644 index 00000000..d22b34fd --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectParticleSystemData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d5f0b0a5daf9d8d4583a188fcae57a97 +timeCreated: 1720314048 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs new file mode 100644 index 00000000..37a48c61 --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs @@ -0,0 +1,48 @@ +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace SceneProfiler.Editor +{ + public class CollectPhysicsData + { + private SceneProfiler _sceneProfiler; + + public CollectPhysicsData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + public void CheckPhysicsObjects() + { + Rigidbody[] rigidbodies = _sceneProfiler.FindObjects(); + + foreach (var rb in rigidbodies) + { + if (rb != null) + { + if (!_sceneProfiler.ActivePhysicsObjects.Any(p => p.rigidbody == rb)) + { + _sceneProfiler.ActivePhysicsObjects.Add(new PhysicsObjectDetails(rb)); + } + } + } + } + + public void CheckRigidbodyReferences(FieldInfo field, MonoBehaviour script) + { + if (field.FieldType == typeof(Rigidbody)) + { + Rigidbody tRigidbody = field.GetValue(script) as Rigidbody; + if (tRigidbody != null) + { + if (!_sceneProfiler.ActivePhysicsObjects.Any(r => r.rigidbody == tRigidbody)) + { + PhysicsObjectDetails tPhysicsObjectDetails = new PhysicsObjectDetails(tRigidbody); + _sceneProfiler.ActivePhysicsObjects.Add(tPhysicsObjectDetails); + } + } + } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs.meta b/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs.meta new file mode 100644 index 00000000..c349206a --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectPhysicsData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b107f598f38069c49883a6dbd40867e8 +timeCreated: 1720314064 \ No newline at end of file diff --git a/Viagg-io/Assets/SceneProfiler/Editor/CollectTextureData.cs b/Viagg-io/Assets/SceneProfiler/Editor/CollectTextureData.cs new file mode 100644 index 00000000..6ab24b0e --- /dev/null +++ b/Viagg-io/Assets/SceneProfiler/Editor/CollectTextureData.cs @@ -0,0 +1,514 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; +using Object = UnityEngine.Object; + +namespace SceneProfiler.Editor +{ + public class CollectTextureData + { + private SceneProfiler _sceneProfiler; + + public CollectTextureData(SceneProfiler sceneProfiler) + { + _sceneProfiler = sceneProfiler; + } + + float GetBitsPerPixel(TextureFormat format) + { + switch (format) + { + case TextureFormat.Alpha8: return 8; + case TextureFormat.ARGB4444: return 16; + case TextureFormat.RGBA4444: return 16; + case TextureFormat.RGB24: return 24; + case TextureFormat.RGBA32: return 32; + case TextureFormat.ARGB32: return 32; + case TextureFormat.RGB565: return 16; + case TextureFormat.DXT1: return 4; + case TextureFormat.DXT1Crunched: return 4; + case TextureFormat.DXT5: return 8; + case TextureFormat.DXT5Crunched: return 8; + case TextureFormat.BC4: return 4; + case TextureFormat.BC7: return 8; + case TextureFormat.PVRTC_RGB2: return 2; + case TextureFormat.PVRTC_RGBA2: return 2; + case TextureFormat.PVRTC_RGB4: return 4; + case TextureFormat.PVRTC_RGBA4: return 4; + case TextureFormat.ETC_RGB4: return 4; + case TextureFormat.ETC_RGB4Crunched: return 4; + case TextureFormat.ETC2_RGBA8: return 8; + case TextureFormat.ETC2_RGB: return 4; + case TextureFormat.ETC2_RGBA8Crunched: return 4; + case TextureFormat.EAC_R: return 4; + case TextureFormat.BGRA32: return 32; + case TextureFormat.ASTC_4x4: return 8; + case TextureFormat.ASTC_5x5: return 5.12f; + case TextureFormat.ASTC_6x6: return 3.56f; + case TextureFormat.ASTC_8x8: return 2; + case TextureFormat.ASTC_10x10: return 1.28f; + case TextureFormat.ASTC_12x12: return 0.89f; + } + return 0; + } + + float CalculateTextureSizeBytes(Texture tTexture) + { + int tWidth = tTexture.width; + int tHeight = tTexture.height; + float tSize = 0; + + if (tTexture is Texture2D) + { + Texture2D tTex2D = tTexture as Texture2D; + float bitsPerPixel = GetBitsPerPixel(tTex2D.format); + int mipMapCount = tTex2D.mipmapCount; + int mipLevel = 1; + + while (mipLevel <= mipMapCount) + { + tSize += tWidth * tHeight * bitsPerPixel / 8; + tWidth = Mathf.Max(1, tWidth / 2); + tHeight = Mathf.Max(1, tHeight / 2); + mipLevel++; + } + } + else if (tTexture is Texture2DArray) + { + Texture2DArray tTex2DArray = tTexture as Texture2DArray; + float bitsPerPixel = GetBitsPerPixel(tTex2DArray.format); + int mipMapCount = 10; // Assuming a fixed mip map count for Texture2DArray + int mipLevel = 1; + + while (mipLevel <= mipMapCount) + { + tSize += tWidth * tHeight * bitsPerPixel / 8; + tWidth = Mathf.Max(1, tWidth / 2); + tHeight = Mathf.Max(1, tHeight / 2); + mipLevel++; + } + tSize *= tTex2DArray.depth; + } + else if (tTexture is Cubemap) + { + Cubemap tCubemap = tTexture as Cubemap; + float bitsPerPixel = GetBitsPerPixel(tCubemap.format); + tSize = tWidth * tHeight * 6 * bitsPerPixel / 8; + } + + return tSize; + } + + TextureDetails FindTextureDetails(Texture tTexture) + { + foreach (TextureDetails tTextureDetails in _sceneProfiler.ActiveTextures) + { + if (tTextureDetails.texture == tTexture) return tTextureDetails; + } + return null; + } + + public void CheckRenderers() + { + Renderer[] renderers = _sceneProfiler.FindObjects(); + + + foreach (Renderer renderer in renderers) + { + CheckSpriteRenderer(renderer); + } + } + + private void CheckSpriteRenderer(Renderer renderer) + { + if (renderer is SpriteRenderer tSpriteRenderer) + { + if (tSpriteRenderer.sprite != null) + { + AddSpriteTextureDetails(tSpriteRenderer, renderer); + } + else + { + _sceneProfiler.AddMissingSprite(tSpriteRenderer); + } + } + } + + private void AddSpriteTextureDetails(SpriteRenderer tSpriteRenderer, Renderer renderer) + { + var tSpriteTextureDetail = GetTextureDetail(tSpriteRenderer.sprite.texture, renderer); + if (!_sceneProfiler.ActiveTextures.Contains(tSpriteTextureDetail)) + { + _sceneProfiler.ActiveTextures.Add(tSpriteTextureDetail); + } + + var secondarySpriteTextureResult = new SecondarySpriteTexture[tSpriteRenderer.sprite.GetSecondaryTextureCount()]; + tSpriteRenderer.sprite.GetSecondaryTextures(secondarySpriteTextureResult); + foreach (var sst in secondarySpriteTextureResult) + { + var tSpriteSecondaryTextureDetail = GetTextureDetail(sst.texture, renderer); + if (!_sceneProfiler.ActiveTextures.Contains(tSpriteSecondaryTextureDetail)) + { + _sceneProfiler.ActiveTextures.Add(tSpriteSecondaryTextureDetail); + } + } + + if (!_sceneProfiler.ActiveTextures.Contains(tSpriteTextureDetail)) + { + _sceneProfiler.ActiveTextures.Add(tSpriteTextureDetail); + } + } + + public void CheckLightmaps() + { + if (!_sceneProfiler.IncludeLightmapTextures) return; + + LightmapData[] lightmapTextures = LightmapSettings.lightmaps; + + foreach (LightmapData lightmapData in lightmapTextures) + { + if (lightmapData.lightmapColor != null) + { + var textureDetail = GetTextureDetail(lightmapData.lightmapColor); + + if (!_sceneProfiler.ActiveTextures.Contains(textureDetail)) + _sceneProfiler.ActiveTextures.Add(textureDetail); + } + + if (lightmapData.lightmapDir != null) + { + var textureDetail = GetTextureDetail(lightmapData.lightmapDir); + + if (!_sceneProfiler.ActiveTextures.Contains(textureDetail)) + _sceneProfiler.ActiveTextures.Add(textureDetail); + } + + if (lightmapData.shadowMask != null) + { + var textureDetail = GetTextureDetail(lightmapData.shadowMask); + + if (!_sceneProfiler.ActiveTextures.Contains(textureDetail)) + _sceneProfiler.ActiveTextures.Add(textureDetail); + } + } + } + + public void CheckGUIElements() + { + if (!_sceneProfiler.IncludeGuiElements) return; + + Graphic[] graphics = _sceneProfiler.FindObjects(); + + foreach (Graphic graphic in graphics) + { + if (graphic.mainTexture) + { + var tSpriteTextureDetail = GetTextureDetail(graphic.mainTexture, graphic); + if (!_sceneProfiler.ActiveTextures.Contains(tSpriteTextureDetail)) + { + _sceneProfiler.ActiveTextures.Add(tSpriteTextureDetail); + } + } + } + + Button[] buttons = _sceneProfiler.FindObjects