Did a few things

This commit is contained in:
Bruno Rybársky 2021-07-23 09:45:12 +02:00
parent 3da75e4cc6
commit db537bd7b7
122 changed files with 15101 additions and 619 deletions

@ -123,6 +123,78 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &86896268
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 86896270}
- component: {fileID: 86896269}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &86896269
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 86896268}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.483
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 20.74
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &86896270
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 86896268}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 14.39, y: -8.06, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &264342472
GameObject:
m_ObjectHideFlags: 0
@ -306,6 +378,78 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &341712767
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 341712769}
- component: {fileID: 341712768}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &341712768
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 341712767}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.483
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 20.74
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &341712769
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 341712767}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -14.11, y: -8.06, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &488938061
GameObject:
m_ObjectHideFlags: 0
@ -386,7 +530,7 @@ Transform:
m_LocalScale: {x: 174.07516, y: 101.02895, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &698687514
GameObject:
@ -676,6 +820,78 @@ AudioSource:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!1 &1240298836
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1240298838}
- component: {fileID: 1240298837}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1240298837
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1240298836}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.483
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 20.74
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &1240298838
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1240298836}
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_Children: []
m_Father: {fileID: 0}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1574308003
GameObject:
m_ObjectHideFlags: 0
@ -756,9 +972,9 @@ Transform:
m_LocalScale: {x: 5.155293, y: 2.5266063, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1942352409
--- !u!1 &1707018758
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -766,30 +982,30 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1942352411}
- component: {fileID: 1942352410}
- component: {fileID: 1707018760}
- component: {fileID: 1707018759}
m_Layer: 0
m_Name: Global Light 2D
m_Name: Point Light 2D
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1942352410
--- !u!114 &1707018759
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942352409}
m_GameObject: {fileID: 1707018758}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 4
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.5
m_FalloffIntensity: 0.483
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
@ -797,13 +1013,13 @@ MonoBehaviour:
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 1
m_PointLightOuterRadius: 20.74
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -816,17 +1032,89 @@ MonoBehaviour:
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &1942352411
--- !u!4 &1707018760
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942352409}
m_GameObject: {fileID: 1707018758}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -2.3731413, y: 2.9299264, z: 0}
m_LocalPosition: {x: -15.41, y: 8.55, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1810335285
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1810335287}
- component: {fileID: 1810335286}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1810335286
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1810335285}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.483
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 20.74
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &1810335287
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1810335285}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 14.39, y: 8.55, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

@ -123,6 +123,39 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1206835
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1206836}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1206836
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1206835}
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_Children:
- {fileID: 1232501490}
- {fileID: 849847778}
- {fileID: 389370143}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &44549252
GameObject:
m_ObjectHideFlags: 0
@ -275,6 +308,8 @@ Transform:
- {fileID: 1219993849}
- {fileID: 230892770}
- {fileID: 883602336}
- {fileID: 737155567}
- {fileID: 1206836}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -891,6 +926,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &389370142
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 389370143}
- component: {fileID: 389370144}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &389370143
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 389370142}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 113.4, y: 44.2, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1206836}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &389370144
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 389370142}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &396538451
GameObject:
m_ObjectHideFlags: 0
@ -6017,7 +6124,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -6628,13 +6735,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -6756,7 +6865,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 18.95
m_PointLightOuterRadius: 3.38
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -11751,11 +11860,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 95.8, y: -0.84139335, z: 92.19983}
m_LocalPosition: {x: 2.800003, y: 0, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -16809,6 +16918,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &849847777
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 849847778}
- component: {fileID: 849847779}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &849847778
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 849847777}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 31.7, y: 50.9, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1206836}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &849847779
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 849847777}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &879779302
GameObject:
m_ObjectHideFlags: 0
@ -17040,9 +17221,7 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -26881,10 +27060,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 104.6, y: 0, z: 2.1998286}
m_LocalPosition: {x: -0.8, y: 0.84139335, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 1206836}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -26901,7 +27080,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -26909,7 +27088,7 @@ MonoBehaviour:
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360

@ -154,6 +154,8 @@ Transform:
- {fileID: 883602336}
- {fileID: 1145939650}
- {fileID: 1304932281}
- {fileID: 737155567}
- {fileID: 1030770199}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -530,7 +532,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -982,13 +984,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -1110,7 +1114,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 11.3
m_PointLightOuterRadius: 3.38
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -1148,11 +1152,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 95.8, y: -0.84139335, z: 92.19983}
m_LocalPosition: {x: 2.800003, y: 0, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -1758,12 +1762,43 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1030770198
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1030770199}
m_Layer: 3
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1030770199
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1030770198}
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_Children:
- {fileID: 1232501490}
- {fileID: 1266462375}
- {fileID: 1727771796}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1137646167
GameObject:
m_ObjectHideFlags: 0
@ -1850,10 +1885,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 104.6, y: 0, z: 2.1998286}
m_LocalPosition: {x: 4, y: 8.9, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 1030770199}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -1870,7 +1905,79 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1266462374
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1266462375}
- component: {fileID: 1266462376}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1266462375
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1266462374}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 62.4, y: 10.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1030770199}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1266462376
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1266462374}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -7717,6 +7824,78 @@ TrailRenderer:
m_MinVertexDistance: 0.1
m_Autodestruct: 0
m_Emitting: 1
--- !u!1 &1727771795
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1727771796}
- component: {fileID: 1727771797}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1727771796
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1727771795}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 126.5, y: 21.6, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1030770199}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1727771797
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1727771795}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1823422549
GameObject:
m_ObjectHideFlags: 0

@ -150,13 +150,87 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 737155567}
- {fileID: 343801489}
- {fileID: 883602336}
- {fileID: 1145939650}
- {fileID: 964927014}
- {fileID: 643974394}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &70184015
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 70184016}
- component: {fileID: 70184017}
m_Layer: 0
m_Name: Point Light 2D (9)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &70184016
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 70184015}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 62.4, y: -72.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 9
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &70184017
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 70184015}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &101762541
GameObject:
m_ObjectHideFlags: 0
@ -732,6 +806,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &342753451
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 342753452}
- component: {fileID: 342753453}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &342753452
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 342753451}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 133.4, y: 21, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &342753453
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 342753451}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &343801488
GameObject:
m_ObjectHideFlags: 0
@ -763,7 +909,7 @@ Transform:
- {fileID: 1985907937}
- {fileID: 418549211}
m_Father: {fileID: 48681355}
m_RootOrder: 0
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &418549210
GameObject:
@ -825,7 +971,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -1138,6 +1284,119 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9cf471439c551fd459075afc8510ea03, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &587054138
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 587054139}
- component: {fileID: 587054140}
m_Layer: 0
m_Name: Point Light 2D (10)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &587054139
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 587054138}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 7, y: -56.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 10
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &587054140
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 587054138}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &643974393
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 643974394}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &643974394
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 643974393}
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_Children:
- {fileID: 1232501490}
- {fileID: 2125365908}
- {fileID: 342753452}
- {fileID: 1800603576}
- {fileID: 980494307}
- {fileID: 1853356583}
- {fileID: 1665599262}
- {fileID: 929525768}
- {fileID: 1779448706}
- {fileID: 70184016}
- {fileID: 587054139}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &685738179
GameObject:
m_ObjectHideFlags: 0
@ -1280,13 +1539,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -1408,7 +1669,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 12.9
m_PointLightOuterRadius: 3.38
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -1446,11 +1707,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 176, y: -0.84139335, z: 92.19983}
m_LocalPosition: {x: 83, y: 0, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -2037,8 +2298,80 @@ Transform:
- {fileID: 806054523}
- {fileID: 1750757251}
m_Father: {fileID: 48681355}
m_RootOrder: 1
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &929525767
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 929525768}
- component: {fileID: 929525769}
m_Layer: 0
m_Name: Point Light 2D (7)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &929525768
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 929525767}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 205.6, y: 7.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &929525769
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 929525767}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &964927013
GameObject:
m_ObjectHideFlags: 0
@ -2068,8 +2401,80 @@ Transform:
m_Children:
- {fileID: 796506227}
m_Father: {fileID: 48681355}
m_RootOrder: 3
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &980494306
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 980494307}
- component: {fileID: 980494308}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &980494307
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 980494306}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 58.9, y: 89.9, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &980494308
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 980494306}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &998253298
GameObject:
m_ObjectHideFlags: 0
@ -2097,9 +2502,7 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -6966,7 +7369,7 @@ Transform:
m_Children:
- {fileID: 1337350079}
m_Father: {fileID: 48681355}
m_RootOrder: 2
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1232501489
GameObject:
@ -6993,10 +7396,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 163.5, y: 0, z: 2.1998286}
m_LocalPosition: {x: 6.4, y: 16.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 643974394}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -7013,7 +7416,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -7602,6 +8005,78 @@ TrailRenderer:
m_MinVertexDistance: 0.1
m_Autodestruct: 0
m_Emitting: 1
--- !u!1 &1665599261
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1665599262}
- component: {fileID: 1665599263}
m_Layer: 0
m_Name: Point Light 2D (6)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1665599262
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1665599261}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 196.7, y: 76.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1665599263
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1665599261}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1750757246
GameObject:
m_ObjectHideFlags: 0
@ -7740,6 +8215,150 @@ Transform:
m_Father: {fileID: 883602336}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1779448705
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1779448706}
- component: {fileID: 1779448707}
m_Layer: 0
m_Name: Point Light 2D (8)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1779448706
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1779448705}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 143.6, y: -62.7, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1779448707
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1779448705}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1800603575
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1800603576}
- component: {fileID: 1800603577}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1800603576
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1800603575}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 134.2, y: 93.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1800603577
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1800603575}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1823422549
GameObject:
m_ObjectHideFlags: 0
@ -7867,6 +8486,78 @@ Transform:
m_Father: {fileID: 685738189}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1853356582
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1853356583}
- component: {fileID: 1853356584}
m_Layer: 0
m_Name: Point Light 2D (5)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1853356583
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1853356582}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 1.1, y: 96.7, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1853356584
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1853356582}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1919170707
GameObject:
m_ObjectHideFlags: 0
@ -8084,3 +8775,75 @@ Transform:
m_Father: {fileID: 418549211}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2125365907
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2125365908}
- component: {fileID: 2125365909}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2125365908
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2125365907}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 61.2, y: 15.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 643974394}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2125365909
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2125365907}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 200
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}

@ -154,6 +154,8 @@ Transform:
- {fileID: 883602336}
- {fileID: 1145939650}
- {fileID: 964927014}
- {fileID: 737155567}
- {fileID: 1921484424}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -5660,6 +5662,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &257621625
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 257621626}
- component: {fileID: 257621627}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &257621626
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 257621625}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -18.9, y: 145.5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1921484424}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &257621627
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 257621625}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &286945036
GameObject:
m_ObjectHideFlags: 0
@ -6043,7 +6117,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -6512,6 +6586,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &653418596
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 653418597}
- component: {fileID: 653418598}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &653418597
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 653418596}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 101.4, y: 16.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1921484424}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &653418598
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 653418596}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &685738179
GameObject:
m_ObjectHideFlags: 0
@ -6654,13 +6800,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -6782,7 +6930,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 9.1
m_PointLightOuterRadius: 3.38
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -6820,11 +6968,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 155.52998, y: 14.4, z: 92.19983}
m_LocalPosition: {x: 62.529984, y: 15.241393, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -17085,9 +17233,7 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -22527,10 +22673,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 156, y: 45, z: 2.1998286}
m_LocalPosition: {x: 15.8, y: 14.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 1921484424}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -22547,7 +22693,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -22555,7 +22701,7 @@ MonoBehaviour:
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
@ -38418,6 +38564,113 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1916920124
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1916920125}
- component: {fileID: 1916920126}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1916920125
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1916920124}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 159.7, y: 83.5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1921484424}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1916920126
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1916920124}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1921484423
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1921484424}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1921484424
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1921484423}
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_Children:
- {fileID: 1232501490}
- {fileID: 653418597}
- {fileID: 1916920125}
- {fileID: 2113548400}
- {fileID: 257621626}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1938238705
GameObject:
m_ObjectHideFlags: 0
@ -48360,3 +48613,75 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &2113548399
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2113548400}
- component: {fileID: 2113548401}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2113548400
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2113548399}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 66, y: 126.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1921484424}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2113548401
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2113548399}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}

@ -307,6 +307,8 @@ Transform:
- {fileID: 883602336}
- {fileID: 1145939650}
- {fileID: 964927014}
- {fileID: 737155567}
- {fileID: 1924018481}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -5245,6 +5247,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &87364263
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 87364264}
- component: {fileID: 87364265}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &87364264
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 87364263}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -97.1, y: 82.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1924018481}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &87364265
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 87364263}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &91185719
GameObject:
m_ObjectHideFlags: 0
@ -25992,7 +26066,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -36787,13 +36861,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -36915,7 +36991,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 11.3
m_PointLightOuterRadius: 3.38
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -37399,11 +37475,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 143.4, y: 14.4, z: 92.19983}
m_LocalPosition: {x: 50.399994, y: 15.241393, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -62360,6 +62436,78 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &973334118
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 973334119}
- component: {fileID: 973334120}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &973334119
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 973334118}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 51.3, y: 74.6, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1924018481}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &973334120
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 973334118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &982025464
GameObject:
m_ObjectHideFlags: 0
@ -67191,9 +67339,7 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -87084,10 +87230,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 156, y: 45, z: 2.1998286}
m_LocalPosition: {x: 2.5, y: 37, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 1924018481}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -87104,7 +87250,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -103175,6 +103321,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1732313938
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1732313939}
- component: {fileID: 1732313940}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1732313939
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1732313938}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -91.9, y: 0.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1924018481}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1732313940
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1732313938}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1744140755
GameObject:
m_ObjectHideFlags: 0
@ -103887,6 +104105,41 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1924018480
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1924018481}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1924018481
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1924018480}
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_Children:
- {fileID: 1232501490}
- {fileID: 87364264}
- {fileID: 1732313939}
- {fileID: 973334119}
- {fileID: 2022392940}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1985907936
GameObject:
m_ObjectHideFlags: 0
@ -103926,6 +104179,78 @@ Transform:
m_Father: {fileID: 343801489}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2022392939
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2022392940}
- component: {fileID: 2022392941}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2022392940
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2022392939}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -34.3, y: 162.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1924018481}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2022392941
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2022392939}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &2024966806
GameObject:
m_ObjectHideFlags: 0

@ -14535,6 +14535,78 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &24576917
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 24576918}
- component: {fileID: 24576919}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &24576918
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 24576917}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 190.3, y: 24.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &24576919
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 24576917}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &48681354
GameObject:
m_ObjectHideFlags: 0
@ -14566,6 +14638,8 @@ Transform:
- {fileID: 883602336}
- {fileID: 1145939650}
- {fileID: 964927014}
- {fileID: 737155567}
- {fileID: 804587583}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -40398,7 +40472,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &448048078
MonoBehaviour:
@ -71089,13 +71163,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 1823422550}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1137646168}
GroundCheckElement: {fileID: 1137646168}
GroundCheckRadius: 0.2
rb: {fileID: 685738184}
--- !u!114 &685738187
MonoBehaviour:
m_ObjectHideFlags: 0
@ -76374,11 +76450,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 737155566}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 143.4, y: 14.4, z: 92.19983}
m_LocalPosition: {x: 50.399994, y: 15.241393, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_RootOrder: 2
m_Father: {fileID: 48681355}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &737155569
SpriteRenderer:
@ -76893,6 +76969,44 @@ Transform:
m_Father: {fileID: 964927014}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &804587582
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 804587583}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &804587583
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 804587582}
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_Children:
- {fileID: 1232501490}
- {fileID: 1620064530}
- {fileID: 24576918}
- {fileID: 1424602429}
- {fileID: 1377983599}
- {fileID: 1764405688}
- {fileID: 1868799132}
- {fileID: 1372458860}
m_Father: {fileID: 48681355}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &806054522
GameObject:
m_ObjectHideFlags: 0
@ -96723,9 +96837,7 @@ Transform:
m_LocalPosition: {x: -93, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1232501490}
- {fileID: 448048077}
- {fileID: 737155567}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -117071,10 +117183,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1232501489}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 156, y: 45, z: 2.1998286}
m_LocalPosition: {x: -1.1, y: 22.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 998253299}
m_Father: {fileID: 804587583}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1232501491
@ -117091,7 +117203,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.342
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -132145,6 +132257,78 @@ BoxCollider2D:
serializedVersion: 2
m_Size: {x: 1, y: 1}
m_EdgeRadius: 0
--- !u!1 &1372458859
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1372458860}
- component: {fileID: 1372458861}
m_Layer: 0
m_Name: Point Light 2D (7)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1372458860
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1372458859}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -77, y: 45.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1372458861
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1372458859}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1375370588
GameObject:
m_ObjectHideFlags: 0
@ -132298,6 +132482,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1377983598
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1377983599}
- component: {fileID: 1377983600}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1377983599
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1377983598}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 228.3, y: -70.7, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1377983600
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1377983598}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1413890303
GameObject:
m_ObjectHideFlags: 0
@ -137102,6 +137358,78 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &1424602428
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1424602429}
- component: {fileID: 1424602430}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1424602429
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1424602428}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 89.5, y: -65.6, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1424602430
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1424602428}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1428474130
GameObject:
m_ObjectHideFlags: 0
@ -176472,6 +176800,78 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &1620064529
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1620064530}
- component: {fileID: 1620064531}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1620064530
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1620064529}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 118, y: 33.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1620064531
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1620064529}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1646615769
GameObject:
m_ObjectHideFlags: 0
@ -177484,6 +177884,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1764405687
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1764405688}
- component: {fileID: 1764405689}
m_Layer: 0
m_Name: Point Light 2D (5)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1764405688
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1764405687}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 126.8, y: 103.9, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1764405689
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1764405687}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1778208788
GameObject:
m_ObjectHideFlags: 0
@ -187548,6 +188020,78 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &1868799131
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1868799132}
- component: {fileID: 1868799133}
m_Layer: 0
m_Name: Point Light 2D (6)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1868799132
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1868799131}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -2.5, y: 133.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 804587583}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1868799133
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1868799131}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 260
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1938238705
GameObject:
m_ObjectHideFlags: 0

@ -329,6 +329,78 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &529560281
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 529560283}
- component: {fileID: 529560282}
m_Layer: 0
m_Name: Global Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &529560282
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 529560281}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.7
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 10.5
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &529560283
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 529560281}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 8.7, y: -4.32, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &581596678
GameObject:
m_ObjectHideFlags: 0
@ -627,7 +699,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 682611200}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -8}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1949375701}
@ -674,7 +746,7 @@ TrailRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Time: 0.5
m_Time: 0.2
m_Parameters:
serializedVersion: 3
widthMultiplier: 1
@ -682,8 +754,8 @@ TrailRenderer:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
time: 0.01953125
value: 0.41101646
inSlope: 0
outSlope: 0
tangentMode: 0
@ -695,8 +767,8 @@ TrailRenderer:
m_RotationOrder: 4
colorGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
key1: {r: 1, g: 1, b: 1, a: 1}
key0: {r: 0.003921569, g: 0.16470589, b: 1, a: 1}
key1: {r: 0.003921569, g: 0.16470589, b: 1, a: 0}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
@ -711,8 +783,8 @@ TrailRenderer:
ctime5: 0
ctime6: 0
ctime7: 0
atime0: 0
atime1: 65535
atime0: 13107
atime1: 65343
atime2: 0
atime3: 0
atime4: 0
@ -731,6 +803,78 @@ TrailRenderer:
m_MinVertexDistance: 0.1
m_Autodestruct: 0
m_Emitting: 1
--- !u!1 &865961569
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 865961571}
- component: {fileID: 865961570}
m_Layer: 0
m_Name: Global Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &865961570
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 865961569}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.7
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 10.5
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &865961571
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 865961569}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -8.62, y: -4.55, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &944191901
GameObject:
m_ObjectHideFlags: 0
@ -1105,6 +1249,78 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1319497642
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1319497644}
- component: {fileID: 1319497643}
m_Layer: 0
m_Name: Global Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1319497643
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1319497642}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.7
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 10.5
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &1319497644
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1319497642}
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_Children: []
m_Father: {fileID: 0}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1499575166
GameObject:
m_ObjectHideFlags: 0
@ -1133,7 +1349,7 @@ AudioSource:
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: 349c5213efa2f084d875db215eb07475, type: 3}
m_PlayOnAwake: 1
m_PlayOnAwake: 0
m_Volume: 1
m_Pitch: 1
Loop: 0
@ -1261,9 +1477,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 4
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.5
m_FalloffIntensity: 0.7
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
@ -1271,13 +1487,13 @@ MonoBehaviour:
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 1
m_PointLightOuterRadius: 10.5
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -1298,7 +1514,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1525150946}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.38094068, y: 0.981442, z: 0}
m_LocalPosition: {x: -8.51, y: 4.26, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
@ -1655,3 +1871,75 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
pos: {x: 0, y: 0, z: 0}
--- !u!1 &1978892178
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1978892180}
- component: {fileID: 1978892179}
m_Layer: 0
m_Name: Global Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1978892179
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1978892178}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.7
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 10.5
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!4 &1978892180
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1978892178}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 8.46, y: 4.43, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

@ -265,13 +265,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8057fdb619b42d94390909e7bc867d87, type: 3}
m_Name:
m_EditorClassIdentifier:
m_JumpForce: 20
m_JumpVelocity: 20
SFX: {fileID: 517709047}
JumpSFX: {fileID: 8300000, guid: 437cbeaabc4a81e4e917fb190ecc096c, type: 3}
m_WhatIsGround:
GroundLayer:
serializedVersion: 2
m_Bits: 8
m_GroundCheck: {fileID: 1909349660}
GroundCheckElement: {fileID: 1909349660}
GroundCheckRadius: 0.2
rb: {fileID: 4766646}
--- !u!114 &4766649
MonoBehaviour:
m_ObjectHideFlags: 0
@ -444,7 +446,7 @@ Transform:
- {fileID: 1743695764}
- {fileID: 381871072}
m_Father: {fileID: 0}
m_RootOrder: 5
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &35838289
GameObject:
@ -19946,78 +19948,6 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
vectorLabel1_3: W
--- !u!1 &178646609
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 178646610}
- component: {fileID: 178646611}
m_Layer: 0
m_Name: Point Light 2D (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &178646610
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 178646609}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 229.5, y: -38.9, z: 2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &178646611
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 178646609}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 283.3
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &187398203
GameObject:
m_ObjectHideFlags: 0
@ -20772,6 +20702,78 @@ MonoBehaviour:
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &344109671
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 344109672}
- component: {fileID: 344109673}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &344109672
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 344109671}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 178, y: 21.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 724860608}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &344109673
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 344109671}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &373337436
GameObject:
m_ObjectHideFlags: 0
@ -26164,78 +26166,6 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &555827321
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 555827322}
- component: {fileID: 555827323}
m_Layer: 0
m_Name: Point Light 2D (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &555827322
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 555827321}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 387.2, y: 111.9, z: 2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &555827323
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 555827321}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 329.8
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &604754081
GameObject:
m_ObjectHideFlags: 0
@ -26376,7 +26306,7 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &627555151
--- !u!1 &649392928
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -26384,63 +26314,63 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 627555152}
- component: {fileID: 627555153}
- component: {fileID: 649392929}
- component: {fileID: 649392930}
m_Layer: 0
m_Name: Global Light 2D
m_Name: Point Light 2D (7)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &627555152
--- !u!4 &649392929
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 627555151}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_GameObject: {fileID: 649392928}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 266.6, y: 154.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_RootOrder: 4
m_Father: {fileID: 724860608}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &627555153
--- !u!114 &649392930
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 627555151}
m_GameObject: {fileID: 649392928}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 4
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.5
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 0.05
m_LightVolumeOpacity: 0
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 1
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 1
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
@ -26959,7 +26889,7 @@ Transform:
- {fileID: 1457237859}
- {fileID: 210392713}
m_Father: {fileID: 1746189785}
m_RootOrder: 1
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &720452086
GameObject:
@ -26991,7 +26921,44 @@ Transform:
- {fileID: 1523500534}
- {fileID: 339439899}
m_Father: {fileID: 1746189785}
m_RootOrder: 3
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &724860607
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 724860608}
m_Layer: 0
m_Name: Lights
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &724860608
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 724860607}
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_Children:
- {fileID: 1779324125}
- {fileID: 2068525204}
- {fileID: 1942928471}
- {fileID: 344109672}
- {fileID: 1883703182}
- {fileID: 1392887497}
- {fileID: 649392929}
m_Father: {fileID: 1746189785}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &728390916
GameObject:
@ -32769,12 +32736,12 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1030824719}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -3.7968266, y: -0.84139335, z: 2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_Father: {fileID: 1998312655}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1049121823
GameObject:
@ -37610,7 +37577,7 @@ Transform:
- {fileID: 1833098145}
- {fileID: 315950174}
m_Father: {fileID: 1746189785}
m_RootOrder: 2
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1131868216
GameObject:
@ -37637,11 +37604,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1131868216}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 175.7121, y: -1.2, z: 92.19983}
m_LocalPosition: {x: 179.50893, y: -0.3586067, z: 90}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_RootOrder: 2
m_Father: {fileID: 1746189785}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &1131868218
SpriteRenderer:
@ -38877,6 +38844,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1392887496
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1392887497}
- component: {fileID: 1392887498}
m_Layer: 0
m_Name: Point Light 2D (6)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1392887497
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1392887496}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 306, y: 63.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 724860608}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1392887498
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1392887496}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1433512324
GameObject:
m_ObjectHideFlags: 0
@ -59063,7 +59102,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1674539834
MonoBehaviour:
@ -59119,7 +59158,7 @@ Transform:
- {fileID: 1626933848}
- {fileID: 1534097412}
m_Father: {fileID: 1746189785}
m_RootOrder: 0
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1743695763
GameObject:
@ -59318,10 +59357,12 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1131868217}
- {fileID: 1682908789}
- {fileID: 717564687}
- {fileID: 1090774853}
- {fileID: 720452087}
- {fileID: 724860608}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -59350,10 +59391,10 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1779324124}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -28, y: 29, z: 2.1998286}
m_LocalPosition: {x: -35.1, y: 1.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1998312655}
m_Father: {fileID: 724860608}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1779324126
@ -59370,7 +59411,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 0.512
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
@ -59384,7 +59425,7 @@ MonoBehaviour:
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 276.31
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
@ -59437,6 +59478,78 @@ Transform:
m_Father: {fileID: 1090774853}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1883703181
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1883703182}
- component: {fileID: 1883703183}
m_Layer: 0
m_Name: Point Light 2D (5)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1883703182
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1883703181}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 251.3, y: 23.4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 724860608}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1883703183
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1883703181}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1889689962
GameObject:
m_ObjectHideFlags: 0
@ -59926,6 +60039,78 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &1942928470
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1942928471}
- component: {fileID: 1942928472}
m_Layer: 0
m_Name: Point Light 2D (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1942928471
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942928470}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 108.6, y: 7.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 724860608}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1942928472
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942928470}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &1998312654
GameObject:
m_ObjectHideFlags: 0
@ -59953,15 +60138,83 @@ Transform:
m_LocalPosition: {x: 3.7968266, y: 0.84139335, z: -2.1998286}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1779324125}
- {fileID: 1674539833}
- {fileID: 1131868217}
- {fileID: 555827322}
- {fileID: 627555152}
- {fileID: 178646610}
- {fileID: 1030824722}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2068525203
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2068525204}
- component: {fileID: 2068525205}
m_Layer: 0
m_Name: Point Light 2D (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2068525204
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2068525203}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 51.3, y: 2, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 724860608}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2068525205
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2068525203}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LightType: 3
m_BlendStyleIndex: 0
m_FalloffIntensity: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_LightVolumeOpacity: 0.023
m_ApplyToSortingLayers: 00000000
m_LightCookieSprite: {fileID: 0}
m_UseNormalMap: 0
m_LightOrder: 0
m_AlphaBlendOnOverlap: 1
m_ShadowIntensity: 0
m_ShadowVolumeIntensity: 0
m_PointLightInnerAngle: 360
m_PointLightOuterAngle: 360
m_PointLightInnerRadius: 0
m_PointLightOuterRadius: 274.57
m_PointLightDistance: 3
m_PointLightQuality: 1
m_ShapeLightParametricSides: 5
m_ShapeLightParametricAngleOffset: 0
m_ShapeLightParametricRadius: 20
m_ShapeLightFalloffSize: 0.5
m_ShapeLightFalloffOffset: {x: 0, y: 0}
m_ShapePath:
- {x: -0.5, y: -0.5, z: 0}
- {x: 0.5, y: -0.5, z: 0}
- {x: 0.5, y: 0.5, z: 0}
- {x: -0.5, y: 0.5, z: 0}
--- !u!1 &2132335037
GameObject:
m_ObjectHideFlags: 0

@ -3,39 +3,31 @@ using UnityEngine.Events;
public class CharacterController2D : MonoBehaviour
{
public float m_JumpForce = 400f; // Amount of force added when the player jumps.
public float m_JumpVelocity = 20f;
public AudioSource SFX;
public AudioClip JumpSFX;
public LayerMask m_WhatIsGround; // A mask determining what is ground to the character
public Transform m_GroundCheck; // A position marking where to check if the player is grounded.
public LayerMask GroundLayer;
public Transform GroundCheckElement;
public float GroundCheckRadius = 0.2f;
bool OnGround;
public Rigidbody2D rb;
const float k_GroundedRadius = .2f; // Radius of the overlap circle to determine if grounded
private bool m_Grounded; // Whether or not the player is grounded.
const float k_CeilingRadius = .2f; // Radius of the overlap circle to determine if the player can stand up
private Rigidbody2D m_Rigidbody2D;
private bool m_FacingRight = true; // For determining which way the player is currently facing.
private Vector3 m_Velocity = Vector3.zero;
bool wasOnGround = false;
private void Awake()
{
m_Rigidbody2D = GetComponent<Rigidbody2D>();
}
bool CanJump = false;
private void FixedUpdate()
{
m_Grounded = false;
// The player is grounded if a circlecast to the groundcheck position hits anything designated as ground
// This can be done using layers instead but Sample Assets will not overwrite your project settings.
Collider2D[] colliders = Physics2D.OverlapCircleAll(m_GroundCheck.position, k_GroundedRadius, m_WhatIsGround);
for (int i = 0; i < colliders.Length; i++)
wasOnGround = OnGround;
if (Physics2D.CircleCast(GroundCheckElement.position, GroundCheckRadius, Vector2.zero, 0f, GroundLayer))
{
if (colliders[i].gameObject != gameObject)
{
m_Grounded = true;
}
OnGround = true;
}
else{
OnGround = false;
}
if (wasOnGround != OnGround && OnGround == true){
CanJump = true;
}
}
@ -43,33 +35,18 @@ public class CharacterController2D : MonoBehaviour
public void Move(float move, bool jump)
{
// Move the character by finding the target velocity
Vector3 targetVelocity = rb.velocity;
targetVelocity[0] = move;
rb.velocity = targetVelocity;
Vector3 targetVelocity = m_Rigidbody2D.velocity;
targetVelocity[0] = move * 10f;
m_Rigidbody2D.velocity = targetVelocity;
// If the player should jump...
if (m_Grounded && jump)
if (OnGround && jump && CanJump)
{
m_Grounded = false;
targetVelocity = m_Rigidbody2D.velocity;
targetVelocity[1] = m_JumpForce;
m_Rigidbody2D.velocity = targetVelocity;
OnGround = false;
targetVelocity = rb.velocity;
targetVelocity[1] = m_JumpVelocity;
rb.velocity = targetVelocity;
SFX.clip = JumpSFX;
SFX.Play();
}
}
private void Flip()
{
// Switch the way the player is labelled as facing.
m_FacingRight = !m_FacingRight;
// Multiply the player's x local scale by -1.
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}

@ -35,12 +35,12 @@ public class PlayerControls : MonoBehaviour
if (switchy){
sprite.flipY = true;
rb.sharedMaterial = top;
controller.m_JumpForce = controller.m_JumpForce * 2f;
controller.m_JumpVelocity = controller.m_JumpVelocity * 2f;
}
else {
sprite.flipY = false;
rb.sharedMaterial = bottom;
controller.m_JumpForce = controller.m_JumpForce / 2f;
controller.m_JumpVelocity = controller.m_JumpVelocity / 2f;
}
sfx.clip = RotateSFX;
sfx.Play();
@ -69,7 +69,7 @@ public class PlayerControls : MonoBehaviour
}
void FixedUpdate(){
controller.Move(horizonatalaxis * runspeed * Time.fixedDeltaTime, jumping);
controller.Move(horizonatalaxis * runspeed * 10f * Time.fixedDeltaTime, jumping);
}
}

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fc0ab01e6b561cd4186dfce6435a6a66
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Sprites/Logos/brn.png (Stored with Git LFS) Normal file

Binary file not shown.

@ -0,0 +1,96 @@
fileFormatVersion: 2
guid: f6d61297a1077ce4c8c7e3d9742d477e
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Sprites/Logos/geojam_banner.png (Stored with Git LFS) Normal file

Binary file not shown.

@ -0,0 +1,96 @@
fileFormatVersion: 2
guid: 88bbb4ecb6781c4469fec6ffc7bc35d2
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 46127a1a69a4a154b90ce07c3f290bad
folderAsset: yes
timeCreated: 1501037370
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 771cb9cc384ae3f40909b9958419a209
folderAsset: yes
timeCreated: 1535571973
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: c1aa92cd8198f654b933334ac725dc4f
timeCreated: 1538785894
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,16 @@
Unity User Reporting SDK Version 1.0
Included all source in the SDK instead of relying on DLLs.
Upgraded from WWW to UnityWebRequest.
For 2018.3 and above, added a new IUserReportingPlatform for asynchronous screen shots and report generation (DirectX only). To enable this feature, switch the UserReportingPlatform to Async on the UserReporting game object.
Fixed an issue where successful user report submissions were reporting as an error.
Fixed a possible memory leak when taking screenshots.
Fixed various small bugs.

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 502667b69f01dbc449740d3f231a9678
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: f0d5c0c9b35b46242935c4d341d53f0b
folderAsset: yes
timeCreated: 1535571942
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0ecfa940da71ddb4998b21bc9f0d7a0d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,44 @@
using System.Collections.Generic;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Provides extensions for working with attachments.
/// </summary>
public static class AttachmentExtensions
{
#region Static Methods
/// <summary>
/// Adds a JSON attachment.
/// </summary>
/// <param name="instance">The extended instance.</param>
/// <param name="name">The name of the attachment.</param>
/// <param name="fileName">The file name.</param>
/// <param name="contents">The contents.</param>
public static void AddJson(this List<UserReportAttachment> instance, string name, string fileName, string contents)
{
if (instance != null)
{
instance.Add(new UserReportAttachment(name, fileName, "application/json", System.Text.Encoding.UTF8.GetBytes(contents)));
}
}
/// <summary>
/// Adds a text attachment.
/// </summary>
/// <param name="instance">The extended instance.</param>
/// <param name="name">The name of the attachment.</param>
/// <param name="fileName">The file name.</param>
/// <param name="contents">The contents.</param>
public static void AddText(this List<UserReportAttachment> instance, string name, string fileName, string contents)
{
if (instance != null)
{
instance.Add(new UserReportAttachment(name, fileName, "text/plain", System.Text.Encoding.UTF8.GetBytes(contents)));
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4af71f750a87f404d96c2fe0ef956ad8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,346 @@
using System;
using System.Collections;
using System.Collections.Generic;
namespace Unity.Cloud
{
/// <summary>
/// Represents a cyclical list.
/// </summary>
/// <typeparam name="T">The type of the items in the list.</typeparam>
public class CyclicalList<T> : IList<T>
{
#region Nested Types
/// <summary>
/// Represents an enumerator for a cyclical list.
/// </summary>
private struct Enumerator : IEnumerator<T>
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="Enumerator"/> class.
/// </summary>
/// <param name="list">The list.</param>
public Enumerator(CyclicalList<T> list)
{
this.list = list;
this.currentIndex = -1;
}
#endregion
#region Fields
private int currentIndex;
private CyclicalList<T> list;
#endregion
#region Properties
/// <summary>
/// Gets the current item.
/// </summary>
public T Current
{
get
{
if (this.currentIndex < 0 || this.currentIndex >= this.list.Count)
{
return default(T);
}
return this.list[this.currentIndex];
}
}
/// <summary>
/// Gets the current item.
/// </summary>
object IEnumerator.Current
{
get { return this.Current; }
}
#endregion
#region Methods
/// <summary>
/// Disposes of the enumerator.
/// </summary>
public void Dispose()
{
// Empty
}
/// <summary>
/// Moves to the next item.
/// </summary>
/// <returns>A value indicating whether the move was successful.</returns>
public bool MoveNext()
{
this.currentIndex++;
return this.currentIndex < this.list.count;
}
/// <summary>
/// Resets the enumerator.
/// </summary>
public void Reset()
{
this.currentIndex = 0;
}
#endregion
}
#endregion
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="CyclicalList{T}"/> class.
/// </summary>
/// <param name="capacity">The capacity.</param>
public CyclicalList(int capacity)
{
this.items = new T[capacity];
}
#endregion
#region Fields
private int count;
private T[] items;
private int nextPointer;
#endregion
#region Properties
/// <summary>
/// Gets the capacity.
/// </summary>
public int Capacity
{
get { return this.items.Length; }
}
/// <summary>
/// Gets the count.
/// </summary>
public int Count
{
get { return this.count; }
}
/// <summary>
/// Gets a value indicating whether the cyclical list is read only.
/// </summary>
public bool IsReadOnly
{
get { return false; }
}
/// <summary>
/// Indexes into the cyclical list.
/// </summary>
/// <param name="index">The index.</param>
/// <returns>The item at the specified index.</returns>
public T this[int index]
{
get
{
if (index < 0 || index >= this.count)
{
throw new IndexOutOfRangeException();
}
return this.items[this.GetPointer(index)];
}
set
{
if (index < 0 || index >= this.count)
{
throw new IndexOutOfRangeException();
}
this.items[this.GetPointer(index)] = value;
}
}
#endregion
#region Methods
/// <summary>
/// Adds an item to the cyclical list.
/// </summary>
/// <param name="item">The item.</param>
public void Add(T item)
{
this.items[this.nextPointer] = item;
this.count++;
if (this.count > this.items.Length)
{
this.count = this.items.Length;
}
this.nextPointer++;
if (this.nextPointer >= this.items.Length)
{
this.nextPointer = 0;
}
}
/// <summary>
/// Clears the cyclical list.
/// </summary>
public void Clear()
{
this.count = 0;
this.nextPointer = 0;
}
/// <summary>
/// Determines whether the cyclical list contains the specified item.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>A value indicating whether the cyclical list contains the specified item.</returns>
public bool Contains(T item)
{
foreach (T listItem in this)
{
if (listItem.Equals(item))
{
return true;
}
}
return false;
}
/// <summary>
/// Copies the cyclical list to an array.
/// </summary>
/// <param name="array">The array.</param>
/// <param name="arrayIndex">The array index.</param>
public void CopyTo(T[] array, int arrayIndex)
{
int i = 0;
foreach (T listItem in this)
{
int currentArrayIndex = arrayIndex + i;
if (currentArrayIndex >= array.Length)
{
break;
}
array[currentArrayIndex] = listItem;
i++;
}
}
/// <summary>
/// Gets the enumerator.
/// </summary>
/// <returns>The enumerator.</returns>
public IEnumerator<T> GetEnumerator()
{
return new Enumerator(this);
}
/// <summary>
/// Gets the enumerator.
/// </summary>
/// <returns>The enumerator.</returns>
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
/// <summary>
/// Gets the next eviction.
/// </summary>
/// <returns>The next eviction.</returns>
public T GetNextEviction()
{
return this.items[this.nextPointer];
}
/// <summary>
/// Gets a pointer.
/// </summary>
/// <param name="index">The index.</param>
/// <returns>The pointer.</returns>
private int GetPointer(int index)
{
if (index < 0 || index >= this.count)
{
throw new IndexOutOfRangeException();
}
if (this.count < this.items.Length)
{
return index;
}
return (this.nextPointer + index) % this.count;
}
/// <summary>
/// Gets the index of the specified item.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>The index of the specified item.</returns>
public int IndexOf(T item)
{
int i = 0;
foreach (T listItem in this)
{
if (listItem.Equals(item))
{
return i;
}
i++;
}
return -1;
}
/// <summary>
/// Inserts an item into the cyclical list. This is a no-op on a cyclical list.
/// </summary>
/// <param name="index">The index.</param>
/// <param name="item">The item.</param>
public void Insert(int index, T item)
{
if (index < 0 || index >= this.count)
{
throw new IndexOutOfRangeException();
}
}
/// <summary>
/// Removes an item from the cyclical list.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>A value indicating whether the removal was successful. This is a no-op on a cyclical list.</returns>
public bool Remove(T item)
{
return false;
}
/// <summary>
/// Removes an item from the cyclical list at the specified index. This is a no-op on a cyclical list.
/// </summary>
/// <param name="index">The index.</param>
public void RemoveAt(int index)
{
if (index < 0 || index >= this.count)
{
throw new IndexOutOfRangeException();
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ea7b024ee3157f4682b1e25563f0801
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
namespace Unity.Cloud.UserReporting.Client
{
/// <summary>
/// Represents a user reporting platform.
/// </summary>
public interface IUserReportingPlatform
{
#region Methods
/// <summary>
/// Deserialized the specified JSON.
/// </summary>
/// <typeparam name="T">The type.</typeparam>
/// <param name="json">The JSON.</param>
/// <returns>The deserialized object instance.</returns>
T DeserializeJson<T>(string json);
/// <summary>
/// Gets device metadata.
/// </summary>
/// <returns>Device metadata.</returns>
IDictionary<string, string> GetDeviceMetadata();
/// <summary>
/// Modifies a user report.
/// </summary>
/// <param name="userReport">The user report.</param>
void ModifyUserReport(UserReport userReport);
/// <summary>
/// Called at the end of a frame.
/// </summary>
/// <param name="client">The client.</param>
void OnEndOfFrame(UserReportingClient client);
/// <summary>
/// Posts to an endpoint.
/// </summary>
/// <param name="endpoint">The endpoint.</param>
/// <param name="contentType">The content type.</param>
/// <param name="content">The content.</param>
/// <param name="progressCallback">The progress callback. Provides the upload and download progress.</param>
/// <param name="callback">The callback. Provides a value indicating whether the post was successful and provides the resulting byte array.</param>
void Post(string endpoint, string contentType, byte[] content, Action<float, float> progressCallback, Action<bool, byte[]> callback);
/// <summary>
/// Runs a task asynchronously.
/// </summary>
/// <param name="task">The task.</param>
/// <param name="callback">The callback.</param>
void RunTask(Func<object> task, Action<object> callback);
/// <summary>
/// Sends an analytics event.
/// </summary>
/// <param name="eventName">The event name.</param>
/// <param name="eventData">The event data.</param>
void SendAnalyticsEvent(string eventName, Dictionary<string, object> eventData);
/// <summary>
/// Serializes the specified object instance.
/// </summary>
/// <param name="instance">The object instance.</param>
/// <returns>The JSON.</returns>
string SerializeJson(object instance);
/// <summary>
/// Takes a screenshot.
/// </summary>
/// <param name="frameNumber">The frame number.</param>
/// <param name="maximumWidth">The maximum width.</param>
/// <param name="maximumHeight">The maximum height.</param>
/// <param name="source">The source. Passing null will capture the screen. Passing a camera will capture the camera's view. Passing a render texture will capture the render texture.</param>
/// <param name="callback">The callback. Provides the screenshot.</param>
void TakeScreenshot(int frameNumber, int maximumWidth, int maximumHeight, object source, Action<int, byte[]> callback);
/// <summary>
/// Called on update.
/// </summary>
/// <param name="client">The client.</param>
void Update(UserReportingClient client);
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5e4889c60fb7bfe47a47c238c63badde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,13 @@
namespace Unity.Cloud.Authorization
{
public enum LicenseLevel
{
None = 0,
Personal = 10,
Plus = 20,
Pro = 30,
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 61d18ba6de6f7724caf99f1af5eec743
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Unity.Cloud.UserReporting.Client
{
/// <summary>
/// Represents a metrics gathering mode.
/// </summary>
public enum MetricsGatheringMode
{
/// <summary>
/// Automatic. Some metrics are gathered automatically.
/// </summary>
Automatic = 0,
/// <summary>
/// Manual. No metrics are gathered automatically.
/// </summary>
Manual = 1,
/// <summary>
/// Disabled. No metrics are gathered. Sampling a metric is a no-op.
/// </summary>
Disabled = 2
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6b64ba1730b76fd459ba483b0b108bd5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
namespace Unity.Cloud.UserReporting.Client
{
/// <summary>
/// Represents a null user reporting platform.
/// </summary>
public class NullUserReportingPlatform : IUserReportingPlatform
{
#region Methods
/// <inheritdoc cref="IUserReportingPlatform"/>
public T DeserializeJson<T>(string json)
{
return default(T);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public IDictionary<string, string> GetDeviceMetadata()
{
return new Dictionary<string, string>();
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void ModifyUserReport(UserReport userReport)
{
// Empty
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void OnEndOfFrame(UserReportingClient client)
{
// Empty
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Post(string endpoint, string contentType, byte[] content, Action<float, float> progressCallback, Action<bool, byte[]> callback)
{
progressCallback(1, 1);
callback(true, content);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void RunTask(Func<object> task, Action<object> callback)
{
callback(task());
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void SendAnalyticsEvent(string eventName, Dictionary<string, object> eventData)
{
// Empty
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public string SerializeJson(object instance)
{
return string.Empty;
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void TakeScreenshot(int frameNumber, int maximumWidth, int maximumHeight, object source, Action<int, byte[]> callback)
{
callback(frameNumber, new byte[0]);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Update(UserReportingClient client)
{
// Empty
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 53a1dcd097bd55a45a676eced2947d02
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,80 @@
using System;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Provides static methods for helping with PNG images.
/// </summary>
public static class PngHelper
{
#region Static Methods
/// <summary>
/// Gets a PNG image's height from base 64 encoded data.
/// </summary>
/// <param name="data">The data.</param>
/// <returns>The height.</returns>
public static int GetPngHeightFromBase64Data(string data)
{
// Preconditions
if (data == null || data.Length < 32)
{
return 0;
}
// Implementation
byte[] bytes = Convert.FromBase64String(data.Substring(0, 32));
byte[] heightBytes = PngHelper.Slice(bytes, 20, 24);
Array.Reverse(heightBytes);
int height = BitConverter.ToInt32(heightBytes, 0);
return height;
}
/// <summary>
/// Gets a PNG image's width from base 64 encoded data.
/// </summary>
/// <param name="data">The data.</param>
/// <returns>The width.</returns>
public static int GetPngWidthFromBase64Data(string data)
{
// Preconditions
if (data == null || data.Length < 32)
{
return 0;
}
// Implementation
byte[] bytes = Convert.FromBase64String(data.Substring(0, 32));
byte[] widthBytes = PngHelper.Slice(bytes, 16, 20);
Array.Reverse(widthBytes);
int width = BitConverter.ToInt32(widthBytes, 0);
return width;
}
/// <summary>
/// Slices a byte array.
/// </summary>
/// <param name="source">The source.</param>
/// <param name="start">The start.</param>
/// <param name="end">The end.</param>
/// <returns>The slices byte array.</returns>
private static byte[] Slice(byte[] source, int start, int end)
{
if (end < 0)
{
end = source.Length + end;
}
int len = end - start;
byte[] res = new byte[len];
for (int i = 0; i < len; i++)
{
res[i] = source[i + start];
}
return res;
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c70eccc2beb89c54a93499fd68044b27
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,47 @@
using System;
namespace Unity.Cloud
{
/// <summary>
/// Provides static methods for helping with preconditions.
/// </summary>
public static class Preconditions
{
#region Static Methods
/// <summary>
/// Ensures that an argument is less than or equal to the specified length.
/// </summary>
/// <param name="value">The value.</param>
/// <param name="length">The length.</param>
/// <param name="argumentName">The argument name.</param>
public static void ArgumentIsLessThanOrEqualToLength(object value, int length, string argumentName)
{
string stringValue = value as string;
if (stringValue != null && stringValue.Length > length)
{
throw new ArgumentException(argumentName);
}
}
/// <summary>
/// Ensures that an argument is not null or whitespace.
/// </summary>
/// <param name="value">The value.</param>
/// <param name="argumentName">The argument name.</param>
public static void ArgumentNotNullOrWhitespace(object value, string argumentName)
{
if (value == null)
{
throw new ArgumentNullException(argumentName);
}
string stringValue = value as string;
if (stringValue != null && stringValue.Trim() == string.Empty)
{
throw new ArgumentNullException(argumentName);
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cf95f7e6c9cf4c74388b0ff0888257c5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Unity.Cloud
{
/// <summary>
/// Represents a serializable exception.
/// </summary>
public class SerializableException
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="SerializableException"/> class.
/// </summary>
public SerializableException()
{
// Empty
}
/// <summary>
/// Creates a new instance of the <see cref="SerializableException"/> class.
/// </summary>
/// <param name="exception">The exception.</param>
public SerializableException(Exception exception)
{
// Message
this.Message = exception.Message;
// Full Text
this.FullText = exception.ToString();
// Type
Type exceptionType = exception.GetType();
this.Type = exceptionType.FullName;
// Stack Trace
this.StackTrace = new List<SerializableStackFrame>();
StackTrace stackTrace = new StackTrace(exception, true);
foreach (StackFrame stackFrame in stackTrace.GetFrames())
{
this.StackTrace.Add(new SerializableStackFrame(stackFrame));
}
// Problem Identifier
if (this.StackTrace.Count > 0)
{
SerializableStackFrame stackFrame = this.StackTrace[0];
this.ProblemIdentifier = string.Format("{0} at {1}.{2}", this.Type, stackFrame.DeclaringType, stackFrame.MethodName);
}
else
{
this.ProblemIdentifier = this.Type;
}
// Detailed Problem Identifier
if (this.StackTrace.Count > 1)
{
SerializableStackFrame stackFrame1 = this.StackTrace[0];
SerializableStackFrame stackFrame2 = this.StackTrace[1];
this.DetailedProblemIdentifier = string.Format("{0} at {1}.{2} from {3}.{4}", this.Type, stackFrame1.DeclaringType, stackFrame1.MethodName, stackFrame2.DeclaringType, stackFrame2.MethodName);
}
// Inner Exception
if (exception.InnerException != null)
{
this.InnerException = new SerializableException(exception.InnerException);
}
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the detailed problem identifier.
/// </summary>
public string DetailedProblemIdentifier { get; set; }
/// <summary>
/// Gets or sets the full text.
/// </summary>
public string FullText { get; set; }
/// <summary>
/// Gets or sets the inner exception.
/// </summary>
public SerializableException InnerException { get; set; }
/// <summary>
/// Gets or sets the message.
/// </summary>
public string Message { get; set; }
/// <summary>
/// Gets or sets the problem identifier.
/// </summary>
public string ProblemIdentifier { get; set; }
/// <summary>
/// Gets or sets the stack trace.
/// </summary>
public List<SerializableStackFrame> StackTrace { get; set; }
/// <summary>
/// Gets or sets the type.
/// </summary>
public string Type { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1036b9a96f07b7648bf8e729d177e7a3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,74 @@
using System;
using System.Diagnostics;
using System.Reflection;
namespace Unity.Cloud
{
/// <summary>
/// Represents a serializable stack frame.
/// </summary>
public class SerializableStackFrame
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="SerializableStackFrame"/> class.
/// </summary>
public SerializableStackFrame()
{
// Empty
}
/// <summary>
/// Creates a new instance of the <see cref="SerializableStackFrame"/> class.
/// </summary>
/// <param name="stackFrame">The stack frame.</param>
public SerializableStackFrame(StackFrame stackFrame)
{
MethodBase method = stackFrame.GetMethod();
Type declaringType = method.DeclaringType;
this.DeclaringType = declaringType != null ? declaringType.FullName : null;
this.Method = method.ToString();
this.MethodName = method.Name;
this.FileName = stackFrame.GetFileName();
this.FileLine = stackFrame.GetFileLineNumber();
this.FileColumn = stackFrame.GetFileColumnNumber();
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the declaring type.
/// </summary>
public string DeclaringType { get; set; }
/// <summary>
/// Gets or sets the file column.
/// </summary>
public int FileColumn { get; set; }
/// <summary>
/// Gets or sets the file line.
/// </summary>
public int FileLine { get; set; }
/// <summary>
/// Gets or sets the file name.
/// </summary>
public string FileName { get; set; }
/// <summary>
/// Gets or sets the method.
/// </summary>
public string Method { get; set; }
/// <summary>
/// Gets or sets the method name.
/// </summary>
public string MethodName { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dd25aacdb05e8244888888bc4b834af0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,247 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report.
/// </summary>
public class UserReport : UserReportPreview
{
#region Nested Types
/// <summary>
/// Provides sorting for metrics.
/// </summary>
private class UserReportMetricSorter : IComparer<UserReportMetric>
{
#region Methods
/// <inheritdoc />
public int Compare(UserReportMetric x, UserReportMetric y)
{
return string.Compare(x.Name, y.Name, StringComparison.Ordinal);
}
#endregion
}
#endregion
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReport"/> class.
/// </summary>
public UserReport()
{
this.AggregateMetrics = new List<UserReportMetric>();
this.Attachments = new List<UserReportAttachment>();
this.ClientMetrics = new List<UserReportMetric>();
this.DeviceMetadata = new List<UserReportNamedValue>();
this.Events = new List<UserReportEvent>();
this.Fields = new List<UserReportNamedValue>();
this.Measures = new List<UserReportMeasure>();
this.Screenshots = new List<UserReportScreenshot>();
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the attachments.
/// </summary>
public List<UserReportAttachment> Attachments { get; set; }
/// <summary>
/// Gets or sets the client metrics.
/// </summary>
public List<UserReportMetric> ClientMetrics { get; set; }
/// <summary>
/// Gets or sets the device metadata.
/// </summary>
public List<UserReportNamedValue> DeviceMetadata { get; set; }
/// <summary>
/// Gets or sets the events.
/// </summary>
public List<UserReportEvent> Events { get; set; }
/// <summary>
/// Gets or sets the fields.
/// </summary>
public List<UserReportNamedValue> Fields { get; set; }
/// <summary>
/// Gets or sets the measures.
/// </summary>
public List<UserReportMeasure> Measures { get; set; }
/// <summary>
/// Gets or sets the screenshots.
/// </summary>
public List<UserReportScreenshot> Screenshots { get; set; }
#endregion
#region Methods
/// <summary>
/// Clones the user report.
/// </summary>
/// <returns>The cloned user report.</returns>
public UserReport Clone()
{
UserReport userReport = new UserReport();
userReport.AggregateMetrics = this.AggregateMetrics != null ? this.AggregateMetrics.ToList() : null;
userReport.Attachments = this.Attachments != null ? this.Attachments.ToList() : null;
userReport.ClientMetrics = this.ClientMetrics != null ? this.ClientMetrics.ToList() : null;
userReport.ContentLength = this.ContentLength;
userReport.DeviceMetadata = this.DeviceMetadata != null ? this.DeviceMetadata.ToList() : null;
userReport.Dimensions = this.Dimensions.ToList();
userReport.Events = this.Events != null ? this.Events.ToList() : null;
userReport.ExpiresOn = this.ExpiresOn;
userReport.Fields = this.Fields != null ? this.Fields.ToList() : null;
userReport.Identifier = this.Identifier;
userReport.IPAddress = this.IPAddress;
userReport.Measures = this.Measures != null ? this.Measures.ToList() : null;
userReport.ProjectIdentifier = this.ProjectIdentifier;
userReport.ReceivedOn = this.ReceivedOn;
userReport.Screenshots = this.Screenshots != null ? this.Screenshots.ToList() : null;
userReport.Summary = this.Summary;
userReport.Thumbnail = this.Thumbnail;
return userReport;
}
/// <summary>
/// Completes the user report. This is called by the client and only needs to be called when constructing a user report manually.
/// </summary>
public void Complete()
{
// Thumbnail
if (this.Screenshots.Count > 0)
{
this.Thumbnail = this.Screenshots[this.Screenshots.Count - 1];
}
// Aggregate Metrics
Dictionary<string, UserReportMetric> aggregateMetrics = new Dictionary<string, UserReportMetric>();
foreach (UserReportMeasure measure in this.Measures)
{
foreach (UserReportMetric metric in measure.Metrics)
{
if (!aggregateMetrics.ContainsKey(metric.Name))
{
UserReportMetric userReportMetric = new UserReportMetric();
userReportMetric.Name = metric.Name;
aggregateMetrics.Add(metric.Name, userReportMetric);
}
UserReportMetric aggregateMetric = aggregateMetrics[metric.Name];
aggregateMetric.Sample(metric.Average);
aggregateMetrics[metric.Name] = aggregateMetric;
}
}
if (this.AggregateMetrics == null)
{
this.AggregateMetrics = new List<UserReportMetric>();
}
foreach (KeyValuePair<string, UserReportMetric> kvp in aggregateMetrics)
{
this.AggregateMetrics.Add(kvp.Value);
}
this.AggregateMetrics.Sort(new UserReportMetricSorter());
}
/// <summary>
/// Fixes the user report by replace null lists with empty lists.
/// </summary>
public void Fix()
{
this.AggregateMetrics = this.AggregateMetrics ?? new List<UserReportMetric>();
this.Attachments = this.Attachments ?? new List<UserReportAttachment>();
this.ClientMetrics = this.ClientMetrics ?? new List<UserReportMetric>();
this.DeviceMetadata = this.DeviceMetadata ?? new List<UserReportNamedValue>();
this.Dimensions = this.Dimensions ?? new List<UserReportNamedValue>();
this.Events = this.Events ?? new List<UserReportEvent>();
this.Fields = this.Fields ?? new List<UserReportNamedValue>();
this.Measures = this.Measures ?? new List<UserReportMeasure>();
this.Screenshots = this.Screenshots ?? new List<UserReportScreenshot>();
}
/// <summary>
/// Gets the dimension string for the dimensions associated with this user report.
/// </summary>
/// <returns></returns>
public string GetDimensionsString()
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < this.Dimensions.Count; i++)
{
UserReportNamedValue dimension = this.Dimensions[i];
stringBuilder.Append(dimension.Name);
stringBuilder.Append(": ");
stringBuilder.Append(dimension.Value);
if (i != this.Dimensions.Count - 1)
{
stringBuilder.Append(", ");
}
}
return stringBuilder.ToString();
}
/// <summary>
/// Removes screenshots above a certain size from the user report.
/// </summary>
/// <param name="maximumWidth">The maximum width.</param>
/// <param name="maximumHeight">The maximum height.</param>
/// <param name="totalBytes">The total bytes allowed by screenshots.</param>
/// <param name="ignoreCount">The number of screenshots to ignoreCount.</param>
public void RemoveScreenshots(int maximumWidth, int maximumHeight, int totalBytes, int ignoreCount)
{
int byteCount = 0;
for (int i = this.Screenshots.Count; i > 0; i--)
{
if (i < ignoreCount)
{
continue;
}
UserReportScreenshot screenshot = this.Screenshots[i];
byteCount += screenshot.DataBase64.Length;
if (byteCount > totalBytes)
{
break;
}
if (screenshot.Width > maximumWidth || screenshot.Height > maximumHeight)
{
this.Screenshots.RemoveAt(i);
}
}
}
/// <summary>
/// Casts the user report to a user report preview.
/// </summary>
/// <returns>The user report preview.</returns>
public UserReportPreview ToPreview()
{
UserReportPreview userReportPreview = new UserReportPreview();
userReportPreview.AggregateMetrics = this.AggregateMetrics != null ? this.AggregateMetrics.ToList() : null;
userReportPreview.ContentLength = this.ContentLength;
userReportPreview.Dimensions = this.Dimensions != null ? this.Dimensions.ToList() : null;
userReportPreview.ExpiresOn = this.ExpiresOn;
userReportPreview.Identifier = this.Identifier;
userReportPreview.IPAddress = this.IPAddress;
userReportPreview.ProjectIdentifier = this.ProjectIdentifier;
userReportPreview.ReceivedOn = this.ReceivedOn;
userReportPreview.Summary = this.Summary;
userReportPreview.Thumbnail = this.Thumbnail;
return userReportPreview;
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e237c906e28cc824ebeb2d2774f619c0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,28 @@
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report appearance hint.
/// </summary>
public enum UserReportAppearanceHint
{
/// <summary>
/// Display normally.
/// </summary>
Normal = 0,
/// <summary>
/// Display landscape.
/// </summary>
Landscape = 1,
/// <summary>
/// Display portrait.
/// </summary>
Portrait = 2,
/// <summary>
/// Display large.
/// </summary>
Large = 3
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1060310e28bbbf942b4e46efd6d76488
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,59 @@
using System;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report attachment.
/// </summary>
public struct UserReportAttachment
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportAttachment"/> struct.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="fileName">The file name.</param>
/// <param name="contentType">The content type.</param>
/// <param name="data">The data.</param>
public UserReportAttachment(string name, string fileName, string contentType, byte[] data)
{
this.Name = name;
this.FileName = fileName;
this.ContentType = contentType;
this.DataBase64 = Convert.ToBase64String(data);
this.DataIdentifier = null;
}
#endregion
#region Properties
/// <summary>
/// Get or sets the content type.
/// </summary>
public string ContentType { get; set; }
/// <summary>
/// Gets or sets the data (base 64 encoded).
/// </summary>
public string DataBase64 { get; set; }
/// <summary>
/// Gets or sets the data identifier. This property will be overwritten by the server if provided.
/// </summary>
public string DataIdentifier { get; set; }
/// <summary>
/// Gets or sets the file name.
/// </summary>
public string FileName { get; set; }
/// <summary>
/// Gets or sets the name.
/// </summary>
public string Name { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8207a3c1fa17deb429e6402efd1e6725
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,52 @@
using System;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report event.
/// </summary>
public struct UserReportEvent
{
#region Properties
/// <summary>
/// Gets or sets the exception.
/// </summary>
public SerializableException Exception { get; set; }
/// <summary>
/// Gets or sets the frame number.
/// </summary>
public int FrameNumber { get; set; }
/// <summary>
/// Gets or sets the full message.
/// </summary>
public string FullMessage
{
get { return string.Format("{0}{1}{2}", this.Message, Environment.NewLine, this.StackTrace); }
}
/// <summary>
/// Gets or sets the level.
/// </summary>
public UserReportEventLevel Level { get; set; }
/// <summary>
/// Gets or sets the message.
/// </summary>
public string Message { get; set; }
/// <summary>
/// Gets or sets the stack trace.
/// </summary>
public string StackTrace { get; set; }
/// <summary>
/// Gets or sets the timestamp.
/// </summary>
public DateTime Timestamp { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1167bb63e766c824a899a1e17778b1f6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,28 @@
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report event level.
/// </summary>
public enum UserReportEventLevel
{
/// <summary>
/// Info.
/// </summary>
Info = 0,
/// <summary>
/// Success.
/// </summary>
Success = 1,
/// <summary>
/// Warning.
/// </summary>
Warning = 2,
/// <summary>
/// Error.
/// </summary>
Error = 3
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 779f88f0c218c3e4db442a004d648705
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,71 @@
using System.Collections.Generic;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report list.
/// </summary>
public class UserReportList
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportList"/> class.
/// </summary>
public UserReportList()
{
this.UserReportPreviews = new List<UserReportPreview>();
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the continuation token.
/// </summary>
public string ContinuationToken { get; set; }
/// <summary>
/// Gets or sets the error.
/// </summary>
public string Error { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the list has more items.
/// </summary>
public bool HasMore { get; set; }
/// <summary>
/// Gets or sets the user report previews.
/// </summary>
public List<UserReportPreview> UserReportPreviews { get; set; }
#endregion
#region Methods
/// <summary>
/// Completes the list. This only need to be called by the creator of the list.
/// </summary>
/// <param name="originalLimit">The original limit.</param>
/// <param name="continuationToken">The continuation token.</param>
public void Complete(int originalLimit, string continuationToken)
{
if (this.UserReportPreviews.Count > 0)
{
if (this.UserReportPreviews.Count > originalLimit)
{
while (this.UserReportPreviews.Count > originalLimit)
{
this.UserReportPreviews.RemoveAt(this.UserReportPreviews.Count - 1);
}
this.ContinuationToken = continuationToken;
this.HasMore = true;
}
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dc881d42ec009e14a8c8e119e935daaa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,34 @@
using System.Collections.Generic;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report measure.
/// </summary>
public struct UserReportMeasure
{
#region Properties
/// <summary>
/// Gets or sets the end frame number.
/// </summary>
public int EndFrameNumber { get; set; }
/// <summary>
/// Gets or sets the metadata.
/// </summary>
public List<UserReportNamedValue> Metadata { get; set; }
/// <summary>
/// Gets or sets the metrics.
/// </summary>
public List<UserReportMetric> Metrics { get; set; }
/// <summary>
/// Gets or sets the start frame number.
/// </summary>
public int StartFrameNumber { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: df06a0bc122dc6c4fa1badd66c586aa8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,69 @@
using System;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report metrics.
/// </summary>
public struct UserReportMetric
{
#region Properties
/// <summary>
/// Gets the average.
/// </summary>
public double Average
{
get { return this.Sum / this.Count; }
}
/// <summary>
/// Gets the count.
/// </summary>
public int Count { get; set; }
/// <summary>
/// Gets the maximum.
/// </summary>
public double Maximum { get; set; }
/// <summary>
/// Gets the minimum.
/// </summary>
public double Minimum { get; set; }
/// <summary>
/// Gets the name.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Gets the sum.
/// </summary>
public double Sum { get; set; }
#endregion
#region Methods
/// <summary>
/// Samples a value.
/// </summary>
/// <param name="value">The value.</param>
public void Sample(double value)
{
if (this.Count == 0)
{
this.Minimum = double.MaxValue;
this.Maximum = double.MinValue;
}
this.Count++;
this.Sum += value;
this.Minimum = Math.Min(this.Minimum, value);
this.Maximum = Math.Max(this.Maximum, value);
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fb60fdec80e5deb4d9825895b0cc7432
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,37 @@
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report named value.
/// </summary>
public struct UserReportNamedValue
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportNamedValue"/> class.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="value">The value.</param>
public UserReportNamedValue(string name, string value)
{
this.Name = name;
this.Value = value;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the name.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Gets or sets the value.
/// </summary>
public string Value { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 81a8f683f28633f49a066010ec11fc54
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using Unity.Cloud.Authorization;
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report preview or the fly weight version of a user report.
/// </summary>
public class UserReportPreview
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportPreview"/> class.
/// </summary>
public UserReportPreview()
{
this.Dimensions = new List<UserReportNamedValue>();
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the aggregate metrics.
/// </summary>
public List<UserReportMetric> AggregateMetrics { get; set; }
/// <summary>
/// Gets or sets the appearance hint.
/// </summary>
public UserReportAppearanceHint AppearanceHint { get; set; }
/// <summary>
/// Gets or sets the content length. This property will be overwritten by the server if provided.
/// </summary>
public long ContentLength { get; set; }
/// <summary>
/// Gets or sets the dimensions.
/// </summary>
public List<UserReportNamedValue> Dimensions { get; set; }
/// <summary>
/// Gets or sets the time at which the user report expires. This property will be overwritten by the server if provided.
/// </summary>
public DateTime ExpiresOn { get; set; }
/// <summary>
/// Gets or sets the geo country.
/// </summary>
public string GeoCountry { get; set; }
/// <summary>
/// Gets or sets the identifier. This property will be overwritten by the server if provided.
/// </summary>
public string Identifier { get; set; }
/// <summary>
/// Gets or sets the IP address. This property will be overwritten by the server if provided.
/// </summary>
public string IPAddress { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the user report is hidden in the UI if a dimension filter is not specified. This is recommended for automated or high volume reports.
/// </summary>
public bool IsHiddenWithoutDimension { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the user report is silent. Silent user reports do not send events to integrations. This is recommended for automated or high volume reports.
/// </summary>
public bool IsSilent { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the user report is temporary. Temporary user reports are short lived and not queryable.
/// </summary>
public bool IsTemporary { get; set; }
/// <summary>
/// Gets or sets the license level. This property will be overwritten by the server if provided.
/// </summary>
public LicenseLevel LicenseLevel { get; set; }
/// <summary>
/// Gets or sets the project identifier.
/// </summary>
public string ProjectIdentifier { get; set; }
/// <summary>
/// Gets or sets the time at which the user report was received. This property will be overwritten by the server if provided.
/// </summary>
public DateTime ReceivedOn { get; set; }
/// <summary>
/// Gets or sets the summary.
/// </summary>
public string Summary { get; set; }
/// <summary>
/// Gets or sets the thumbnail. This screenshot will be resized by the server if too large. Keep the last screenshot small in order to reduce report size and increase submission speed.
/// </summary>
public UserReportScreenshot Thumbnail { get; set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6328297e77ead774dbe3da7844b2d13d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,43 @@
namespace Unity.Cloud.UserReporting
{
/// <summary>
/// Represents a user report screenshot.
/// </summary>
public struct UserReportScreenshot
{
#region Properties
/// <summary>
/// Gets or sets the data (base 64 encoded). Screenshots must be in PNG format.
/// </summary>
public string DataBase64 { get; set; }
/// <summary>
/// Gets or sets the data identifier. This property will be overwritten by the server if provided.
/// </summary>
public string DataIdentifier { get; set; }
/// <summary>
/// Gets or sets the frame number.
/// </summary>
public int FrameNumber { get; set; }
/// <summary>
/// Gets the height.
/// </summary>
public int Height
{
get { return PngHelper.GetPngHeightFromBase64Data(this.DataBase64); }
}
/// <summary>
/// Gets the width.
/// </summary>
public int Width
{
get { return PngHelper.GetPngWidthFromBase64Data(this.DataBase64); }
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b1e5dd7364d072845908195f56c7d791
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,665 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace Unity.Cloud.UserReporting.Client
{
/// <summary>
/// Represents a user reporting client.
/// </summary>
public class UserReportingClient
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportingClient"/> class.
/// </summary>
/// <param name="endpoint">The endpoint.</param>
/// <param name="projectIdentifier">The project identifier.</param>
/// <param name="platform">The platform.</param>
/// <param name="configuration">The configuration.</param>
public UserReportingClient(string endpoint, string projectIdentifier, IUserReportingPlatform platform, UserReportingClientConfiguration configuration)
{
// Arguments
this.Endpoint = endpoint;
this.ProjectIdentifier = projectIdentifier;
this.Platform = platform;
this.Configuration = configuration;
// Configuration Clean Up
this.Configuration.FramesPerMeasure = this.Configuration.FramesPerMeasure > 0 ? this.Configuration.FramesPerMeasure : 1;
this.Configuration.MaximumEventCount = this.Configuration.MaximumEventCount > 0 ? this.Configuration.MaximumEventCount : 1;
this.Configuration.MaximumMeasureCount = this.Configuration.MaximumMeasureCount > 0 ? this.Configuration.MaximumMeasureCount : 1;
this.Configuration.MaximumScreenshotCount = this.Configuration.MaximumScreenshotCount > 0 ? this.Configuration.MaximumScreenshotCount : 1;
// Lists
this.clientMetrics = new Dictionary<string, UserReportMetric>();
this.currentMeasureMetadata = new Dictionary<string, string>();
this.currentMetrics = new Dictionary<string, UserReportMetric>();
this.events = new CyclicalList<UserReportEvent>(configuration.MaximumEventCount);
this.measures = new CyclicalList<UserReportMeasure>(configuration.MaximumMeasureCount);
this.screenshots = new CyclicalList<UserReportScreenshot>(configuration.MaximumScreenshotCount);
// Device Metadata
this.deviceMetadata = new List<UserReportNamedValue>();
foreach (KeyValuePair<string, string> kvp in this.Platform.GetDeviceMetadata())
{
this.AddDeviceMetadata(kvp.Key, kvp.Value);
}
// Client Version
this.AddDeviceMetadata("UserReportingClientVersion", "2.0");
// Synchronized Action
this.synchronizedActions = new List<Action>();
this.currentSynchronizedActions = new List<Action>();
// Update Stopwatch
this.updateStopwatch = new Stopwatch();
// Is Connected to Logger
this.IsConnectedToLogger = true;
}
#endregion
#region Fields
private Dictionary<string, UserReportMetric> clientMetrics;
private Dictionary<string, string> currentMeasureMetadata;
private Dictionary<string, UserReportMetric> currentMetrics;
private List<Action> currentSynchronizedActions;
private List<UserReportNamedValue> deviceMetadata;
private CyclicalList<UserReportEvent> events;
private int frameNumber;
private bool isMeasureBoundary;
private int measureFrames;
private CyclicalList<UserReportMeasure> measures;
private CyclicalList<UserReportScreenshot> screenshots;
private int screenshotsSaved;
private int screenshotsTaken;
private List<Action> synchronizedActions;
private Stopwatch updateStopwatch;
#endregion
#region Properties
/// <summary>
/// Gets the configuration.
/// </summary>
public UserReportingClientConfiguration Configuration { get; private set; }
/// <summary>
/// Gets the endpoint.
/// </summary>
public string Endpoint { get; private set; }
/// <summary>
/// Gets or sets a value indicating whether the client is connected to the logger. If true, log messages will be included in user reports.
/// </summary>
public bool IsConnectedToLogger { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the client is self reporting. If true, event and metrics about the client will be included in user reports.
/// </summary>
public bool IsSelfReporting { get; set; }
/// <summary>
/// Gets the platform.
/// </summary>
public IUserReportingPlatform Platform { get; private set; }
/// <summary>
/// Gets the project identifier.
/// </summary>
public string ProjectIdentifier { get; private set; }
/// <summary>
/// Gets or sets a value indicating whether user reporting events should be sent to analytics.
/// </summary>
public bool SendEventsToAnalytics { get; set; }
#endregion
#region Methods
/// <summary>
/// Adds device metadata.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="value">The value.</param>
public void AddDeviceMetadata(string name, string value)
{
lock (this.deviceMetadata)
{
UserReportNamedValue userReportNamedValue = new UserReportNamedValue();
userReportNamedValue.Name = name;
userReportNamedValue.Value = value;
this.deviceMetadata.Add(userReportNamedValue);
}
}
/// <summary>
/// Adds measure metadata. Measure metadata is associated with a period of time.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="value">The value.</param>
public void AddMeasureMetadata(string name, string value)
{
if (this.currentMeasureMetadata.ContainsKey(name))
{
this.currentMeasureMetadata[name] = value;
}
else
{
this.currentMeasureMetadata.Add(name, value);
}
}
/// <summary>
/// Adds a synchronized action.
/// </summary>
/// <param name="action">The action.</param>
private void AddSynchronizedAction(Action action)
{
if (action == null)
{
throw new ArgumentNullException("action");
}
lock (this.synchronizedActions)
{
this.synchronizedActions.Add(action);
}
}
/// <summary>
/// Clears the screenshots.
/// </summary>
public void ClearScreenshots()
{
lock (this.screenshots)
{
this.screenshots.Clear();
}
}
/// <summary>
/// Creates a user report.
/// </summary>
/// <param name="callback">The callback. Provides the user report that was created.</param>
public void CreateUserReport(Action<UserReport> callback)
{
this.LogEvent(UserReportEventLevel.Info, "Creating user report.");
this.WaitForPerforation(this.screenshotsTaken, () =>
{
this.Platform.RunTask(() =>
{
// Start Stopwatch
Stopwatch stopwatch = Stopwatch.StartNew();
// Copy Data
UserReport userReport = new UserReport();
userReport.ProjectIdentifier = this.ProjectIdentifier;
// Device Metadata
lock (this.deviceMetadata)
{
userReport.DeviceMetadata = this.deviceMetadata.ToList();
}
// Events
lock (this.events)
{
userReport.Events = this.events.ToList();
}
// Measures
lock (this.measures)
{
userReport.Measures = this.measures.ToList();
}
// Screenshots
lock (this.screenshots)
{
userReport.Screenshots = this.screenshots.ToList();
}
// Complete
userReport.Complete();
// Modify
this.Platform.ModifyUserReport(userReport);
// Stop Stopwatch
stopwatch.Stop();
// Sample Client Metric
this.SampleClientMetric("UserReportingClient.CreateUserReport.Task", stopwatch.ElapsedMilliseconds);
// Copy Client Metrics
foreach (KeyValuePair<string, UserReportMetric> kvp in this.clientMetrics)
{
userReport.ClientMetrics.Add(kvp.Value);
}
// Return
return userReport;
}, (result) => { callback(result as UserReport); });
});
}
/// <summary>
/// Gets the endpoint.
/// </summary>
/// <returns>The endpoint.</returns>
public string GetEndpoint()
{
if (this.Endpoint == null)
{
return "https://localhost";
}
return this.Endpoint.Trim();
}
/// <summary>
/// Logs an event.
/// </summary>
/// <param name="level">The level.</param>
/// <param name="message">The message.</param>
public void LogEvent(UserReportEventLevel level, string message)
{
this.LogEvent(level, message, null, null);
}
/// <summary>
/// Logs an event.
/// </summary>
/// <param name="level">The level.</param>
/// <param name="message">The message.</param>
/// <param name="stackTrace">The stack trace.</param>
public void LogEvent(UserReportEventLevel level, string message, string stackTrace)
{
this.LogEvent(level, message, stackTrace, null);
}
/// <summary>
/// Logs an event with a stack trace and exception.
/// </summary>
/// <param name="level">The level.</param>
/// <param name="message">The message.</param>
/// <param name="stackTrace">The stack trace.</param>
/// <param name="exception">The exception.</param>
private void LogEvent(UserReportEventLevel level, string message, string stackTrace, Exception exception)
{
lock (this.events)
{
UserReportEvent userReportEvent = new UserReportEvent();
userReportEvent.Level = level;
userReportEvent.Message = message;
userReportEvent.FrameNumber = this.frameNumber;
userReportEvent.StackTrace = stackTrace;
userReportEvent.Timestamp = DateTime.UtcNow;
if (exception != null)
{
userReportEvent.Exception = new SerializableException(exception);
}
this.events.Add(userReportEvent);
}
}
/// <summary>
/// Logs an exception.
/// </summary>
/// <param name="exception">The exception.</param>
public void LogException(Exception exception)
{
this.LogEvent(UserReportEventLevel.Error, null, null, exception);
}
/// <summary>
/// Samples a client metric. These metrics are only sample when self reporting is enabled.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="value">The value.</param>
public void SampleClientMetric(string name, double value)
{
if (double.IsInfinity(value) || double.IsNaN(value))
{
return;
}
if (!this.clientMetrics.ContainsKey(name))
{
UserReportMetric newUserReportMetric = new UserReportMetric();
newUserReportMetric.Name = name;
this.clientMetrics.Add(name, newUserReportMetric);
}
UserReportMetric userReportMetric = this.clientMetrics[name];
userReportMetric.Sample(value);
this.clientMetrics[name] = userReportMetric;
// Self Reporting
if (this.IsSelfReporting)
{
this.SampleMetric(name, value);
}
}
/// <summary>
/// Samples a metric. Metrics can be sampled frequently and have low overhead.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="value">The value.</param>
public void SampleMetric(string name, double value)
{
if (this.Configuration.MetricsGatheringMode == MetricsGatheringMode.Disabled)
{
return;
}
if (double.IsInfinity(value) || double.IsNaN(value))
{
return;
}
if (!this.currentMetrics.ContainsKey(name))
{
UserReportMetric newUserReportMetric = new UserReportMetric();
newUserReportMetric.Name = name;
this.currentMetrics.Add(name, newUserReportMetric);
}
UserReportMetric userReportMetric = this.currentMetrics[name];
userReportMetric.Sample(value);
this.currentMetrics[name] = userReportMetric;
}
/// <summary>
/// Saves a user report to disk.
/// </summary>
/// <param name="userReport">The user report.</param>
public void SaveUserReportToDisk(UserReport userReport)
{
this.LogEvent(UserReportEventLevel.Info, "Saving user report to disk.");
string json = this.Platform.SerializeJson(userReport);
File.WriteAllText("UserReport.json", json);
}
/// <summary>
/// Sends a user report to the server.
/// </summary>
/// <param name="userReport">The user report.</param>
/// <param name="callback">The callback. Provides a value indicating whether sending the user report was successful and provides the user report after it is modified by the server.</param>
public void SendUserReport(UserReport userReport, Action<bool, UserReport> callback)
{
this.SendUserReport(userReport, null, callback);
}
/// <summary>
/// Sends a user report to the server.
/// </summary>
/// <param name="userReport">The user report.</param>
/// <param name="progressCallback">The progress callback. Provides the upload and download progress.</param>
/// <param name="callback">The callback. Provides a value indicating whether sending the user report was successful and provides the user report after it is modified by the server.</param>
public void SendUserReport(UserReport userReport, Action<float, float> progressCallback, Action<bool, UserReport> callback)
{
try
{
if (userReport == null)
{
return;
}
if (userReport.Identifier != null)
{
this.LogEvent(UserReportEventLevel.Warning, "Identifier cannot be set on the client side. The value provided was discarded.");
return;
}
if (userReport.ContentLength != 0)
{
this.LogEvent(UserReportEventLevel.Warning, "ContentLength cannot be set on the client side. The value provided was discarded.");
return;
}
if (userReport.ReceivedOn != default(DateTime))
{
this.LogEvent(UserReportEventLevel.Warning, "ReceivedOn cannot be set on the client side. The value provided was discarded.");
return;
}
if (userReport.ExpiresOn != default(DateTime))
{
this.LogEvent(UserReportEventLevel.Warning, "ExpiresOn cannot be set on the client side. The value provided was discarded.");
return;
}
this.LogEvent(UserReportEventLevel.Info, "Sending user report.");
string json = this.Platform.SerializeJson(userReport);
byte[] jsonData = Encoding.UTF8.GetBytes(json);
string endpoint = this.GetEndpoint();
string url = string.Format(string.Format("{0}/api/userreporting", endpoint));
this.Platform.Post(url, "application/json", jsonData, (uploadProgress, downloadProgress) =>
{
if (progressCallback != null)
{
progressCallback(uploadProgress, downloadProgress);
}
}, (success, result) =>
{
this.AddSynchronizedAction(() =>
{
if (success)
{
try
{
string jsonResult = Encoding.UTF8.GetString(result);
UserReport userReportResult = this.Platform.DeserializeJson<UserReport>(jsonResult);
if (userReportResult != null)
{
if (this.SendEventsToAnalytics)
{
Dictionary<string, object> eventData = new Dictionary<string, object>();
eventData.Add("UserReportIdentifier", userReport.Identifier);
this.Platform.SendAnalyticsEvent("UserReportingClient.SendUserReport", eventData);
}
callback(success, userReportResult);
}
else
{
callback(false, null);
}
}
catch (Exception ex)
{
this.LogEvent(UserReportEventLevel.Error, string.Format("Sending user report failed: {0}", ex.ToString()));
callback(false, null);
}
}
else
{
this.LogEvent(UserReportEventLevel.Error, "Sending user report failed.");
callback(false, null);
}
});
});
}
catch (Exception ex)
{
this.LogEvent(UserReportEventLevel.Error, string.Format("Sending user report failed: {0}", ex.ToString()));
callback(false, null);
}
}
/// <summary>
/// Takes a screenshot.
/// </summary>
/// <param name="maximumWidth">The maximum width.</param>
/// <param name="maximumHeight">The maximum height.</param>
/// <param name="callback">The callback. Provides the screenshot.</param>
public void TakeScreenshot(int maximumWidth, int maximumHeight, Action<UserReportScreenshot> callback)
{
this.TakeScreenshotFromSource(maximumWidth, maximumHeight, null, callback);
}
/// <summary>
/// Takes a screenshot.
/// </summary>
/// <param name="maximumWidth">The maximum width.</param>
/// <param name="maximumHeight">The maximum height.</param>
/// <param name="source">The source. Passing null will capture the screen. Passing a camera will capture the camera's view. Passing a render texture will capture the render texture.</param>
/// <param name="callback">The callback. Provides the screenshot.</param>
public void TakeScreenshotFromSource(int maximumWidth, int maximumHeight, object source, Action<UserReportScreenshot> callback)
{
this.LogEvent(UserReportEventLevel.Info, "Taking screenshot.");
this.screenshotsTaken++;
this.Platform.TakeScreenshot(this.frameNumber, maximumWidth, maximumHeight, source, (passedFrameNumber, data) =>
{
this.AddSynchronizedAction(() =>
{
lock (this.screenshots)
{
UserReportScreenshot userReportScreenshot = new UserReportScreenshot();
userReportScreenshot.FrameNumber = passedFrameNumber;
userReportScreenshot.DataBase64 = Convert.ToBase64String(data);
this.screenshots.Add(userReportScreenshot);
this.screenshotsSaved++;
callback(userReportScreenshot);
}
});
});
}
/// <summary>
/// Updates the user reporting client, which updates networking communication, screenshotting, and metrics gathering.
/// </summary>
public void Update()
{
// Stopwatch
this.updateStopwatch.Reset();
this.updateStopwatch.Start();
// Update Platform
this.Platform.Update(this);
// Measures
if (this.Configuration.MetricsGatheringMode != MetricsGatheringMode.Disabled)
{
this.isMeasureBoundary = false;
int framesPerMeasure = this.Configuration.FramesPerMeasure;
if (this.measureFrames >= framesPerMeasure)
{
lock (this.measures)
{
UserReportMeasure userReportMeasure = new UserReportMeasure();
userReportMeasure.StartFrameNumber = this.frameNumber - framesPerMeasure;
userReportMeasure.EndFrameNumber = this.frameNumber - 1;
UserReportMeasure evictedUserReportMeasure = this.measures.GetNextEviction();
if (evictedUserReportMeasure.Metrics != null)
{
userReportMeasure.Metadata = evictedUserReportMeasure.Metadata;
userReportMeasure.Metrics = evictedUserReportMeasure.Metrics;
}
else
{
userReportMeasure.Metadata = new List<UserReportNamedValue>();
userReportMeasure.Metrics = new List<UserReportMetric>();
}
userReportMeasure.Metadata.Clear();
userReportMeasure.Metrics.Clear();
foreach (KeyValuePair<string, string> kvp in this.currentMeasureMetadata)
{
UserReportNamedValue userReportNamedValue = new UserReportNamedValue();
userReportNamedValue.Name = kvp.Key;
userReportNamedValue.Value = kvp.Value;
userReportMeasure.Metadata.Add(userReportNamedValue);
}
foreach (KeyValuePair<string, UserReportMetric> kvp in this.currentMetrics)
{
userReportMeasure.Metrics.Add(kvp.Value);
}
this.currentMetrics.Clear();
this.measures.Add(userReportMeasure);
this.measureFrames = 0;
this.isMeasureBoundary = true;
}
}
this.measureFrames++;
}
else
{
this.isMeasureBoundary = true;
}
// Synchronization
lock (this.synchronizedActions)
{
foreach (Action synchronizedAction in this.synchronizedActions)
{
this.currentSynchronizedActions.Add(synchronizedAction);
}
this.synchronizedActions.Clear();
}
// Perform Synchronized Actions
foreach (Action synchronizedAction in this.currentSynchronizedActions)
{
synchronizedAction();
}
this.currentSynchronizedActions.Clear();
// Frame Number
this.frameNumber++;
// Stopwatch
this.updateStopwatch.Stop();
this.SampleClientMetric("UserReportingClient.Update", this.updateStopwatch.ElapsedMilliseconds);
}
/// <summary>
/// Updates the user reporting client at the end of the frame, which updates networking communication, screenshotting, and metrics gathering.
/// </summary>
public void UpdateOnEndOfFrame()
{
// Stopwatch
this.updateStopwatch.Reset();
this.updateStopwatch.Start();
// Update Platform
this.Platform.OnEndOfFrame(this);
// Stopwatch
this.updateStopwatch.Stop();
this.SampleClientMetric("UserReportingClient.UpdateOnEndOfFrame", this.updateStopwatch.ElapsedMilliseconds);
}
/// <summary>
/// Waits for perforation, a boundary between measures when no screenshots are in progress.
/// </summary>
/// <param name="currentScreenshotsTaken">The current screenshots taken.</param>
/// <param name="callback">The callback.</param>
private void WaitForPerforation(int currentScreenshotsTaken, Action callback)
{
if (this.screenshotsSaved >= currentScreenshotsTaken && this.isMeasureBoundary)
{
callback();
}
else
{
this.AddSynchronizedAction(() => { this.WaitForPerforation(currentScreenshotsTaken, callback); });
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 192cdc972af5b47488dec15571884eec
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,84 @@
namespace Unity.Cloud.UserReporting.Client
{
/// <summary>
/// Represents configuration for the user reporting client.
/// </summary>
public class UserReportingClientConfiguration
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UserReportingClientConfiguration"/> class.
/// </summary>
public UserReportingClientConfiguration()
{
this.MaximumEventCount = 100;
this.MaximumMeasureCount = 300;
this.FramesPerMeasure = 60;
this.MaximumScreenshotCount = 10;
}
/// <summary>
/// Creates a new instance of the <see cref="UserReportingClientConfiguration"/> class.
/// </summary>
/// <param name="maximumEventCount">The maximum event count. This is a rolling window.</param>
/// <param name="maximumMeasureCount">The maximum measure count. This is a rolling window.</param>
/// <param name="framesPerMeasure">The number of frames per measure. A user report is only created on the boundary between measures. A large number of frames per measure will increase user report creation time by this number of frames in the worst case.</param>
/// <param name="maximumScreenshotCount">The maximum screenshot count. This is a rolling window.</param>
public UserReportingClientConfiguration(int maximumEventCount, int maximumMeasureCount, int framesPerMeasure, int maximumScreenshotCount)
{
this.MaximumEventCount = maximumEventCount;
this.MaximumMeasureCount = maximumMeasureCount;
this.FramesPerMeasure = framesPerMeasure;
this.MaximumScreenshotCount = maximumScreenshotCount;
}
/// <summary>
/// Creates a new instance of the <see cref="UserReportingClientConfiguration"/> class.
/// </summary>
/// <param name="maximumEventCount">The maximum event count. This is a rolling window.</param>
/// <param name="metricsGatheringMode">The metrics gathering mode.</param>
/// <param name="maximumMeasureCount">The maximum measure count. This is a rolling window.</param>
/// <param name="framesPerMeasure">The number of frames per measure. A user report is only created on the boundary between measures. A large number of frames per measure will increase user report creation time by this number of frames in the worst case.</param>
/// <param name="maximumScreenshotCount">The maximum screenshot count. This is a rolling window.</param>
public UserReportingClientConfiguration(int maximumEventCount, MetricsGatheringMode metricsGatheringMode, int maximumMeasureCount, int framesPerMeasure, int maximumScreenshotCount)
{
this.MaximumEventCount = maximumEventCount;
this.MetricsGatheringMode = metricsGatheringMode;
this.MaximumMeasureCount = maximumMeasureCount;
this.FramesPerMeasure = framesPerMeasure;
this.MaximumScreenshotCount = maximumScreenshotCount;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the frames per measure.
/// </summary>
public int FramesPerMeasure { get; internal set; }
/// <summary>
/// Gets or sets the maximum event count.
/// </summary>
public int MaximumEventCount { get; internal set; }
/// <summary>
/// Gets or sets the maximum measure count.
/// </summary>
public int MaximumMeasureCount { get; internal set; }
/// <summary>
/// Gets or sets the maximum screenshot count.
/// </summary>
public int MaximumScreenshotCount { get; internal set; }
/// <summary>
/// Gets or sets the metrics gathering mode.
/// </summary>
public MetricsGatheringMode MetricsGatheringMode { get; internal set; }
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ec0cef74a76c284fa3d592f3005f6f9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,60 @@
using UnityEngine;
/// <summary>
/// Represents a behavior that monitors the application for framerate issues and automatically submits a user report.
/// </summary>
public class FramerateMonitor : UserReportingMonitor
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="FramerateMonitor"/> class.
/// </summary>
public FramerateMonitor()
{
this.MaximumDurationInSeconds = 10;
this.MinimumFramerate = 15;
}
#endregion
#region Fields
private float duration;
/// <summary>
/// Gets or sets the maximum duration in seconds.
/// </summary>
public float MaximumDurationInSeconds;
/// <summary>
/// Gets or sets the minimum framerate.
/// </summary>
public float MinimumFramerate;
#endregion
#region Methods
private void Update()
{
float deltaTime = Time.deltaTime;
float framerate = 1.0f / deltaTime;
if (framerate < this.MinimumFramerate)
{
this.duration += deltaTime;
}
else
{
this.duration = 0;
}
if (this.duration > this.MaximumDurationInSeconds)
{
this.duration = 0;
this.Trigger();
}
}
#endregion
}

@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: f9e6e43dfb1803f46ac36702ba56c7e4
timeCreated: 1517959061
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a20cd360ef12d5a48abf6c9c255c36e3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,13 @@
using UnityEngine;
namespace Assets.UserReporting.Scripts.Plugin
{
public interface ILogListener
{
#region Methods
void ReceiveLogMessage(string logString, string stackTrace, LogType logType);
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 51133d588054ae44b8297105d9672ecf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Assets.UserReporting.Scripts.Plugin
{
public static class LogDispatcher
{
#region Static Constructors
static LogDispatcher()
{
LogDispatcher.listeners = new List<WeakReference>();
Application.logMessageReceivedThreaded += (logString, stackTrace, logType) =>
{
lock (LogDispatcher.listeners)
{
int i = 0;
while (i < LogDispatcher.listeners.Count)
{
WeakReference listener = LogDispatcher.listeners[i];
ILogListener logListener = listener.Target as ILogListener;
if (logListener != null)
{
logListener.ReceiveLogMessage(logString, stackTrace, logType);
i++;
}
else
{
LogDispatcher.listeners.RemoveAt(i);
}
}
}
};
}
#endregion
#region Static Fields
private static List<WeakReference> listeners;
#endregion
#region Static Methods
public static void Register(ILogListener logListener)
{
lock (LogDispatcher.listeners)
{
LogDispatcher.listeners.Add(new WeakReference(logListener));
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 59d79028203775a4fa6483f0f73d861e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bf0f2cc16dbcd0d4b9c03fa534b483e2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,32 @@
namespace Unity.Cloud.UserReporting.Plugin
{
/// <summary>
/// Provides static methods for parsing user reports.
/// </summary>
public static class UnityUserReportParser
{
#region Static Methods
/// <summary>
/// Parses a user report.
/// </summary>
/// <param name="json">The JSON.</param>
/// <returns>The user report.</returns>
public static UserReport ParseUserReport(string json)
{
return SimpleJson.SimpleJson.DeserializeObject<UserReport>(json);
}
/// <summary>
/// Parses a user report list.
/// </summary>
/// <param name="json">The JSON.</param>
/// <returns>The user report list.</returns>
public static UserReportList ParseUserReportList(string json)
{
return SimpleJson.SimpleJson.DeserializeObject<UserReportList>(json);
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2ee05c129c16524468433a48bab26d51
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,151 @@
using Unity.Cloud.UserReporting.Client;
using UnityEngine;
namespace Unity.Cloud.UserReporting.Plugin
{
/// <summary>
/// Provides a starting point for Unity User Reporting.
/// </summary>
public static class UnityUserReporting
{
#region Static Fields
private static UserReportingClient currentClient;
#endregion
#region Static Properties
/// <summary>
/// Gets the current client.
/// </summary>
public static UserReportingClient CurrentClient
{
get
{
if (UnityUserReporting.currentClient == null)
{
UnityUserReporting.Configure();
}
return UnityUserReporting.currentClient;
}
private set { UnityUserReporting.currentClient = value; }
}
#endregion
#region Static Methods
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="endpoint">The endpoint.</param>
/// <param name="projectIdentifier">The project identifier.</param>
/// <param name="platform">The plaform.</param>
/// <param name="configuration">The configuration.</param>
public static void Configure(string endpoint, string projectIdentifier, IUserReportingPlatform platform, UserReportingClientConfiguration configuration)
{
UnityUserReporting.CurrentClient = new UserReportingClient(endpoint, projectIdentifier, platform, configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="endpoint"></param>
/// <param name="projectIdentifier"></param>
/// <param name="configuration"></param>
public static void Configure(string endpoint, string projectIdentifier, UserReportingClientConfiguration configuration)
{
UnityUserReporting.CurrentClient = new UserReportingClient(endpoint, projectIdentifier, UnityUserReporting.GetPlatform(), configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="projectIdentifier"></param>
/// <param name="configuration"></param>
public static void Configure(string projectIdentifier, UserReportingClientConfiguration configuration)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", projectIdentifier, UnityUserReporting.GetPlatform(), configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="projectIdentifier"></param>
public static void Configure(string projectIdentifier)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", projectIdentifier, UnityUserReporting.GetPlatform(), new UserReportingClientConfiguration());
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
public static void Configure()
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", Application.cloudProjectId, UnityUserReporting.GetPlatform(), new UserReportingClientConfiguration());
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="configuration"></param>
public static void Configure(UserReportingClientConfiguration configuration)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", Application.cloudProjectId, UnityUserReporting.GetPlatform(), configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="projectIdentifier"></param>
/// <param name="platform"></param>
/// <param name="configuration"></param>
public static void Configure(string projectIdentifier, IUserReportingPlatform platform, UserReportingClientConfiguration configuration)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", projectIdentifier, platform, configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="platform"></param>
/// <param name="configuration"></param>
public static void Configure(IUserReportingPlatform platform, UserReportingClientConfiguration configuration)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", Application.cloudProjectId, platform, configuration);
}
/// <summary>
/// Configures Unity User Reporting.
/// </summary>
/// <param name="platform"></param>
public static void Configure(IUserReportingPlatform platform)
{
UnityUserReporting.Configure("https://userreporting.cloud.unity3d.com", Application.cloudProjectId, platform, new UserReportingClientConfiguration());
}
/// <summary>
/// Gets the platform.
/// </summary>
/// <returns>The platform.</returns>
private static IUserReportingPlatform GetPlatform()
{
return new UnityUserReportingPlatform();
}
/// <summary>
/// Uses an existing client.
/// </summary>
/// <param name="client">The client.</param>
public static void Use(UserReportingClient client)
{
if (client != null)
{
UnityUserReporting.CurrentClient = client;
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 729c07e53d42a0f46b82d4f2cd5d238d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,633 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using Assets.UserReporting.Scripts.Plugin;
using Unity.Cloud.UserReporting.Client;
using UnityEngine;
using UnityEngine.Analytics;
using UnityEngine.Networking;
using UnityEngine.Profiling;
using UnityEngine.SceneManagement;
namespace Unity.Cloud.UserReporting.Plugin
{
/// <summary>
/// Represents the Unity user reporting platform.
/// </summary>
public class UnityUserReportingPlatform : IUserReportingPlatform, ILogListener
{
#region Nested Types
/// <summary>
/// Represents a log message.
/// </summary>
private struct LogMessage
{
#region Fields
/// <summary>
/// Gets or sets the log string.
/// </summary>
public string LogString;
/// <summary>
/// Gets or sets the log type.
/// </summary>
public LogType LogType;
/// <summary>
/// Gets or sets the stack trace.
/// </summary>
public string StackTrace;
#endregion
}
/// <summary>
/// Represents a post operation.
/// </summary>
private class PostOperation
{
#region Properties
/// <summary>
/// Gets or sets the callback.
/// </summary>
public Action<bool, byte[]> Callback { get; set; }
/// <summary>
/// Gets or sets the progress callback.
/// </summary>
public Action<float, float> ProgressCallback { get; set; }
/// <summary>
/// Gets or sets the web request.
/// </summary>
public UnityWebRequest WebRequest { get; set; }
#endregion
}
/// <summary>
/// Represents a profiler sampler.
/// </summary>
private struct ProfilerSampler
{
#region Fields
/// <summary>
/// Gets or sets the name.
/// </summary>
public string Name;
/// <summary>
/// Gets or sets the recorder.
/// </summary>
public Recorder Recorder;
#endregion
#region Methods
/// <summary>
/// Gets the value of the sampler.
/// </summary>
/// <returns>The value of the sampler.</returns>
public double GetValue()
{
if (this.Recorder == null)
{
return 0;
}
return this.Recorder.elapsedNanoseconds / 1000000.0;
}
#endregion
}
/// <summary>
/// Represents a screenshot operation.
/// </summary>
private class ScreenshotOperation
{
#region Properties
/// <summary>
/// Gets or sets the callback.
/// </summary>
public Action<int, byte[]> Callback { get; set; }
/// <summary>
/// Gets or sets the frame number.
/// </summary>
public int FrameNumber { get; set; }
/// <summary>
/// Gets or sets the maximum height.
/// </summary>
public int MaximumHeight { get; set; }
/// <summary>
/// Gets or sets the maximum width.
/// </summary>
public int MaximumWidth { get; set; }
/// <summary>
/// Gets or sets the PNG data.
/// </summary>
public byte[] PngData { get; set; }
/// <summary>
/// Gets or sets the source.
/// </summary>
public object Source { get; set; }
/// <summary>
/// Gets or sets the stage.
/// </summary>
public ScreenshotStage Stage { get; set; }
/// <summary>
/// Gets or sets the texture.
/// </summary>
public Texture2D Texture { get; set; }
/// <summary>
/// Gets or sets the texture (resized).
/// </summary>
public Texture2D TextureResized { get; set; }
/// <summary>
/// Gets or sets the Unity frame.
/// </summary>
public int UnityFrame { get; set; }
/// <summary>
/// Gets or sets the wait frames.
/// </summary>
public int WaitFrames { get; set; }
#endregion
}
/// <summary>
/// Represents a screenshot stage.
/// </summary>
private enum ScreenshotStage
{
/// <summary>
/// Render.
/// </summary>
Render = 0,
/// <summary>
/// Read pixels.
/// </summary>
ReadPixels = 1,
/// <summary>
/// Gets pixels.
/// </summary>
GetPixels = 2,
/// <summary>
/// Encode to PNG.
/// </summary>
EncodeToPNG = 3,
/// <summary>
/// Done.
/// </summary>
Done = 4
}
#endregion
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UnityUserReportingPlatform"/> class.
/// </summary>
public UnityUserReportingPlatform()
{
this.logMessages = new List<LogMessage>();
this.postOperations = new List<PostOperation>();
this.screenshotOperations = new List<ScreenshotOperation>();
this.screenshotStopwatch = new Stopwatch();
// Recorders
this.profilerSamplers = new List<ProfilerSampler>();
Dictionary<string, string> samplerNames = this.GetSamplerNames();
foreach (KeyValuePair<string, string> kvp in samplerNames)
{
Sampler sampler = Sampler.Get(kvp.Key);
if (sampler.isValid)
{
Recorder recorder = sampler.GetRecorder();
recorder.enabled = true;
ProfilerSampler profilerSampler = new ProfilerSampler();
profilerSampler.Name = kvp.Value;
profilerSampler.Recorder = recorder;
this.profilerSamplers.Add(profilerSampler);
}
}
// Log Messages
LogDispatcher.Register(this);
}
#endregion
#region Fields
private List<LogMessage> logMessages;
private List<PostOperation> postOperations;
private List<ProfilerSampler> profilerSamplers;
private List<ScreenshotOperation> screenshotOperations;
private Stopwatch screenshotStopwatch;
private List<PostOperation> taskOperations;
#endregion
#region Methods
/// <inheritdoc cref="IUserReportingPlatform"/>
public T DeserializeJson<T>(string json)
{
return SimpleJson.SimpleJson.DeserializeObject<T>(json);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void OnEndOfFrame(UserReportingClient client)
{
// Screenshot Operations
int screenshotOperationIndex = 0;
while (screenshotOperationIndex < this.screenshotOperations.Count)
{
ScreenshotOperation screenshotOperation = this.screenshotOperations[screenshotOperationIndex];
if (screenshotOperation.Stage == ScreenshotStage.Render && screenshotOperation.WaitFrames < 1)
{
Camera cameraSource = screenshotOperation.Source as Camera;
if (cameraSource != null)
{
this.screenshotStopwatch.Reset();
this.screenshotStopwatch.Start();
RenderTexture renderTexture = new RenderTexture(screenshotOperation.MaximumWidth, screenshotOperation.MaximumHeight, 24);
RenderTexture originalTargetTexture = cameraSource.targetTexture;
cameraSource.targetTexture = renderTexture;
cameraSource.Render();
cameraSource.targetTexture = originalTargetTexture;
this.screenshotStopwatch.Stop();
client.SampleClientMetric("Screenshot.Render", this.screenshotStopwatch.ElapsedMilliseconds);
screenshotOperation.Source = renderTexture;
screenshotOperation.Stage = ScreenshotStage.ReadPixels;
screenshotOperation.WaitFrames = 15;
screenshotOperationIndex++;
continue;
}
else
{
screenshotOperation.Stage = ScreenshotStage.ReadPixels;
}
}
if (screenshotOperation.Stage == ScreenshotStage.ReadPixels && screenshotOperation.WaitFrames < 1)
{
this.screenshotStopwatch.Reset();
this.screenshotStopwatch.Start();
RenderTexture renderTextureSource = screenshotOperation.Source as RenderTexture;
if (renderTextureSource != null)
{
RenderTexture originalActiveTexture = RenderTexture.active;
RenderTexture.active = renderTextureSource;
screenshotOperation.Texture = new Texture2D(renderTextureSource.width, renderTextureSource.height, TextureFormat.ARGB32, true);
screenshotOperation.Texture.ReadPixels(new Rect(0, 0, renderTextureSource.width, renderTextureSource.height), 0, 0);
screenshotOperation.Texture.Apply();
RenderTexture.active = originalActiveTexture;
}
else
{
screenshotOperation.Texture = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, true);
screenshotOperation.Texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenshotOperation.Texture.Apply();
}
this.screenshotStopwatch.Stop();
client.SampleClientMetric("Screenshot.ReadPixels", this.screenshotStopwatch.ElapsedMilliseconds);
screenshotOperation.Stage = ScreenshotStage.GetPixels;
screenshotOperation.WaitFrames = 15;
screenshotOperationIndex++;
continue;
}
if (screenshotOperation.Stage == ScreenshotStage.GetPixels && screenshotOperation.WaitFrames < 1)
{
this.screenshotStopwatch.Reset();
this.screenshotStopwatch.Start();
int maximumWidth = screenshotOperation.MaximumWidth > 32 ? screenshotOperation.MaximumWidth : 32;
int maximumHeight = screenshotOperation.MaximumHeight > 32 ? screenshotOperation.MaximumHeight : 32;
int width = screenshotOperation.Texture.width;
int height = screenshotOperation.Texture.height;
int mipLevel = 0;
while (width > maximumWidth || height > maximumHeight)
{
width /= 2;
height /= 2;
mipLevel++;
}
screenshotOperation.TextureResized = new Texture2D(width, height);
screenshotOperation.TextureResized.SetPixels(screenshotOperation.Texture.GetPixels(mipLevel));
screenshotOperation.TextureResized.Apply();
this.screenshotStopwatch.Stop();
client.SampleClientMetric("Screenshot.GetPixels", this.screenshotStopwatch.ElapsedMilliseconds);
screenshotOperation.Stage = ScreenshotStage.EncodeToPNG;
screenshotOperation.WaitFrames = 15;
screenshotOperationIndex++;
continue;
}
if (screenshotOperation.Stage == ScreenshotStage.EncodeToPNG && screenshotOperation.WaitFrames < 1)
{
this.screenshotStopwatch.Reset();
this.screenshotStopwatch.Start();
screenshotOperation.PngData = screenshotOperation.TextureResized.EncodeToPNG();
this.screenshotStopwatch.Stop();
client.SampleClientMetric("Screenshot.EncodeToPNG", this.screenshotStopwatch.ElapsedMilliseconds);
screenshotOperation.Stage = ScreenshotStage.Done;
screenshotOperationIndex++;
continue;
}
if (screenshotOperation.Stage == ScreenshotStage.Done && screenshotOperation.WaitFrames < 1)
{
screenshotOperation.Callback(screenshotOperation.FrameNumber, screenshotOperation.PngData);
UnityEngine.Object.Destroy(screenshotOperation.Texture);
UnityEngine.Object.Destroy(screenshotOperation.TextureResized);
this.screenshotOperations.Remove(screenshotOperation);
}
screenshotOperation.WaitFrames--;
}
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Post(string endpoint, string contentType, byte[] content, Action<float, float> progressCallback, Action<bool, byte[]> callback)
{
UnityWebRequest webRequest = new UnityWebRequest(endpoint, "POST");
webRequest.uploadHandler = new UploadHandlerRaw(content);
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.SetRequestHeader("Content-Type", contentType);
webRequest.SendWebRequest();
UnityUserReportingPlatform.PostOperation postOperation = new UnityUserReportingPlatform.PostOperation();
postOperation.WebRequest = webRequest;
postOperation.Callback = callback;
postOperation.ProgressCallback = progressCallback;
this.postOperations.Add(postOperation);
}
public void ReceiveLogMessage(string logString, string stackTrace, LogType logType)
{
lock (this.logMessages)
{
LogMessage logMessage = new LogMessage();
logMessage.LogString = logString;
logMessage.StackTrace = stackTrace;
logMessage.LogType = logType;
this.logMessages.Add(logMessage);
}
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void RunTask(Func<object> task, Action<object> callback)
{
callback(task());
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void SendAnalyticsEvent(string eventName, Dictionary<string, object> eventData)
{
Analytics.CustomEvent(eventName, eventData);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public string SerializeJson(object instance)
{
return SimpleJson.SimpleJson.SerializeObject(instance);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void TakeScreenshot(int frameNumber, int maximumWidth, int maximumHeight, object source, Action<int, byte[]> callback)
{
ScreenshotOperation screenshotOperation = new ScreenshotOperation();
screenshotOperation.FrameNumber = frameNumber;
screenshotOperation.MaximumWidth = maximumWidth;
screenshotOperation.MaximumHeight = maximumHeight;
screenshotOperation.Source = source;
screenshotOperation.Callback = callback;
screenshotOperation.UnityFrame = Time.frameCount;
this.screenshotOperations.Add(screenshotOperation);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Update(UserReportingClient client)
{
// Log Messages
lock (this.logMessages)
{
foreach (LogMessage logMessage in this.logMessages)
{
UserReportEventLevel eventLevel = UserReportEventLevel.Info;
if (logMessage.LogType == LogType.Warning)
{
eventLevel = UserReportEventLevel.Warning;
}
else if (logMessage.LogType == LogType.Error)
{
eventLevel = UserReportEventLevel.Error;
}
else if (logMessage.LogType == LogType.Exception)
{
eventLevel = UserReportEventLevel.Error;
}
else if (logMessage.LogType == LogType.Assert)
{
eventLevel = UserReportEventLevel.Error;
}
if (client.IsConnectedToLogger)
{
client.LogEvent(eventLevel, logMessage.LogString, logMessage.StackTrace);
}
}
this.logMessages.Clear();
}
// Metrics
if (client.Configuration.MetricsGatheringMode == MetricsGatheringMode.Automatic)
{
// Sample Automatic Metrics
this.SampleAutomaticMetrics(client);
// Profiler Samplers
foreach (ProfilerSampler profilerSampler in this.profilerSamplers)
{
client.SampleMetric(profilerSampler.Name, profilerSampler.GetValue());
}
}
// Post Operations
int postOperationIndex = 0;
while (postOperationIndex < this.postOperations.Count)
{
UnityUserReportingPlatform.PostOperation postOperation = this.postOperations[postOperationIndex];
if (postOperation.WebRequest.isDone)
{
bool isError = postOperation.WebRequest.error != null && postOperation.WebRequest.responseCode != 200;
if (isError)
{
string errorMessage = string.Format("UnityUserReportingPlatform.Post: {0} {1}", postOperation.WebRequest.responseCode, postOperation.WebRequest.error);
UnityEngine.Debug.Log(errorMessage);
client.LogEvent(UserReportEventLevel.Error, errorMessage);
}
postOperation.ProgressCallback(1, 1);
postOperation.Callback(!isError, postOperation.WebRequest.downloadHandler.data);
this.postOperations.Remove(postOperation);
}
else
{
postOperation.ProgressCallback(postOperation.WebRequest.uploadProgress, postOperation.WebRequest.downloadProgress);
postOperationIndex++;
}
}
}
#endregion
#region Virtual Methods
/// <inheritdoc cref="IUserReportingPlatform"/>
public virtual IDictionary<string, string> GetDeviceMetadata()
{
Dictionary<string, string> deviceMetadata = new Dictionary<string, string>();
// Unity
deviceMetadata.Add("BuildGUID", Application.buildGUID);
deviceMetadata.Add("DeviceModel", SystemInfo.deviceModel);
deviceMetadata.Add("DeviceType", SystemInfo.deviceType.ToString());
deviceMetadata.Add("DeviceUniqueIdentifier", SystemInfo.deviceUniqueIdentifier);
deviceMetadata.Add("DPI", Screen.dpi.ToString(CultureInfo.InvariantCulture));
deviceMetadata.Add("GraphicsDeviceName", SystemInfo.graphicsDeviceName);
deviceMetadata.Add("GraphicsDeviceType", SystemInfo.graphicsDeviceType.ToString());
deviceMetadata.Add("GraphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
deviceMetadata.Add("GraphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
deviceMetadata.Add("GraphicsMemorySize", SystemInfo.graphicsMemorySize.ToString());
deviceMetadata.Add("InstallerName", Application.installerName);
deviceMetadata.Add("InstallMode", Application.installMode.ToString());
deviceMetadata.Add("IsEditor", Application.isEditor.ToString());
deviceMetadata.Add("IsFullScreen", Screen.fullScreen.ToString());
deviceMetadata.Add("OperatingSystem", SystemInfo.operatingSystem);
deviceMetadata.Add("OperatingSystemFamily", SystemInfo.operatingSystemFamily.ToString());
deviceMetadata.Add("Orientation", Screen.orientation.ToString());
deviceMetadata.Add("Platform", Application.platform.ToString());
try
{
deviceMetadata.Add("QualityLevel", QualitySettings.names[QualitySettings.GetQualityLevel()]);
}
catch
{
// Empty
}
deviceMetadata.Add("ResolutionWidth", Screen.currentResolution.width.ToString());
deviceMetadata.Add("ResolutionHeight", Screen.currentResolution.height.ToString());
deviceMetadata.Add("ResolutionRefreshRate", Screen.currentResolution.refreshRate.ToString());
deviceMetadata.Add("SystemLanguage", Application.systemLanguage.ToString());
deviceMetadata.Add("SystemMemorySize", SystemInfo.systemMemorySize.ToString());
deviceMetadata.Add("TargetFrameRate", Application.targetFrameRate.ToString());
deviceMetadata.Add("UnityVersion", Application.unityVersion);
deviceMetadata.Add("Version", Application.version);
// Other
deviceMetadata.Add("Source", "Unity");
// Type
Type type = this.GetType();
deviceMetadata.Add("IUserReportingPlatform", type.Name);
// Return
return deviceMetadata;
}
public virtual Dictionary<string, string> GetSamplerNames()
{
Dictionary<string, string> samplerNames = new Dictionary<string, string>();
samplerNames.Add("AudioManager.FixedUpdate", "AudioManager.FixedUpdateInMilliseconds");
samplerNames.Add("AudioManager.Update", "AudioManager.UpdateInMilliseconds");
samplerNames.Add("LateBehaviourUpdate", "Behaviors.LateUpdateInMilliseconds");
samplerNames.Add("BehaviourUpdate", "Behaviors.UpdateInMilliseconds");
samplerNames.Add("Camera.Render", "Camera.RenderInMilliseconds");
samplerNames.Add("Overhead", "Engine.OverheadInMilliseconds");
samplerNames.Add("WaitForRenderJobs", "Engine.WaitForRenderJobsInMilliseconds");
samplerNames.Add("WaitForTargetFPS", "Engine.WaitForTargetFPSInMilliseconds");
samplerNames.Add("GUI.Repaint", "GUI.RepaintInMilliseconds");
samplerNames.Add("Network.Update", "Network.UpdateInMilliseconds");
samplerNames.Add("ParticleSystem.EndUpdateAll", "ParticleSystem.EndUpdateAllInMilliseconds");
samplerNames.Add("ParticleSystem.Update", "ParticleSystem.UpdateInMilliseconds");
samplerNames.Add("Physics.FetchResults", "Physics.FetchResultsInMilliseconds");
samplerNames.Add("Physics.Processing", "Physics.ProcessingInMilliseconds");
samplerNames.Add("Physics.ProcessReports", "Physics.ProcessReportsInMilliseconds");
samplerNames.Add("Physics.Simulate", "Physics.SimulateInMilliseconds");
samplerNames.Add("Physics.UpdateBodies", "Physics.UpdateBodiesInMilliseconds");
samplerNames.Add("Physics.Interpolation", "Physics.InterpolationInMilliseconds");
samplerNames.Add("Physics2D.DynamicUpdate", "Physics2D.DynamicUpdateInMilliseconds");
samplerNames.Add("Physics2D.FixedUpdate", "Physics2D.FixedUpdateInMilliseconds");
return samplerNames;
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public virtual void ModifyUserReport(UserReport userReport)
{
// Active Scene
Scene activeScene = SceneManager.GetActiveScene();
userReport.DeviceMetadata.Add(new UserReportNamedValue("ActiveSceneName", activeScene.name));
// Main Camera
Camera mainCamera = Camera.main;
if (mainCamera != null)
{
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraName", mainCamera.name));
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraPosition", mainCamera.transform.position.ToString()));
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraForward", mainCamera.transform.forward.ToString()));
// Looking At
RaycastHit hit;
if (Physics.Raycast(mainCamera.transform.position, mainCamera.transform.forward, out hit))
{
GameObject lookingAt = hit.transform.gameObject;
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAt", hit.point.ToString()));
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAtGameObject", lookingAt.name));
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAtGameObjectPosition", lookingAt.transform.position.ToString()));
}
}
}
/// <summary>
/// Samples automatic metrics.
/// </summary>
/// <param name="client">The client.</param>
public virtual void SampleAutomaticMetrics(UserReportingClient client)
{
// Graphics
client.SampleMetric("Graphics.FramesPerSecond", 1.0f / Time.deltaTime);
// Memory
client.SampleMetric("Memory.MonoUsedSizeInBytes", Profiler.GetMonoUsedSizeLong());
client.SampleMetric("Memory.TotalAllocatedMemoryInBytes", Profiler.GetTotalAllocatedMemoryLong());
client.SampleMetric("Memory.TotalReservedMemoryInBytes", Profiler.GetTotalReservedMemoryLong());
client.SampleMetric("Memory.TotalUnusedReservedMemoryInBytes", Profiler.GetTotalUnusedReservedMemoryLong());
// Battery
client.SampleMetric("Battery.BatteryLevelInPercent", SystemInfo.batteryLevel);
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f09d98000e755044b888de04e0949aa2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,81 @@
using System.Collections;
using UnityEngine;
namespace Unity.Cloud.UserReporting.Plugin
{
/// <summary>
/// Helps with updating the Unity User Reporting client.
/// </summary>
public class UnityUserReportingUpdater : IEnumerator
{
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UnityUserReportingUpdater"/> class.
/// </summary>
public UnityUserReportingUpdater()
{
this.waitForEndOfFrame = new WaitForEndOfFrame();
}
#endregion
#region Fields
private int step;
private WaitForEndOfFrame waitForEndOfFrame;
#endregion
#region Properties
/// <summary>
/// Gets the current item.
/// </summary>
public object Current { get; private set; }
#endregion
#region Methods
/// <summary>
/// Moves to the next item.
/// </summary>
/// <returns>A value indicating whether the move was successful.</returns>
public bool MoveNext()
{
if (this.step == 0)
{
UnityUserReporting.CurrentClient.Update();
this.Current = null;
this.step = 1;
return true;
}
if (this.step == 1)
{
this.Current = this.waitForEndOfFrame;
this.step = 2;
return true;
}
if (this.step == 2)
{
UnityUserReporting.CurrentClient.UpdateOnEndOfFrame();
this.Current = null;
this.step = 3;
return false;
}
return false;
}
/// <summary>
/// Resets the updater.
/// </summary>
public void Reset()
{
this.step = 0;
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 365f6256c05744344ae5900da7929b65
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7e5d770e8bbb1104f8269dd2bb95937e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,426 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Assets.UserReporting.Scripts.Plugin;
using Unity.Cloud.UserReporting.Client;
using Unity.Screenshots;
using UnityEngine;
using UnityEngine.Analytics;
using UnityEngine.Networking;
using UnityEngine.Profiling;
using UnityEngine.SceneManagement;
namespace Unity.Cloud.UserReporting.Plugin.Version2018_3
{
/// <summary>
/// Represents a Unity user reporting platform that supports async operations for screetshotting and user report creation.
/// </summary>
public class AsyncUnityUserReportingPlatform : IUserReportingPlatform, ILogListener
{
#region Nested Types
/// <summary>
/// Represents a log message.
/// </summary>
private struct LogMessage
{
#region Fields
/// <summary>
/// Gets or sets the log string.
/// </summary>
public string LogString;
/// <summary>
/// Gets or sets the log type.
/// </summary>
public LogType LogType;
/// <summary>
/// Gets or sets the stack trace.
/// </summary>
public string StackTrace;
#endregion
}
/// <summary>
/// Represents a post operation.
/// </summary>
private class PostOperation
{
#region Properties
/// <summary>
/// Gets or sets the callback.
/// </summary>
public Action<bool, byte[]> Callback { get; set; }
/// <summary>
/// Gets or sets the progress callback.
/// </summary>
public Action<float, float> ProgressCallback { get; set; }
/// <summary>
/// Gets or sets the web request.
/// </summary>
public UnityWebRequest WebRequest { get; set; }
#endregion
}
/// <summary>
/// Represents a profiler sampler.
/// </summary>
private struct ProfilerSampler
{
#region Fields
/// <summary>
/// Gets or sets the name.
/// </summary>
public string Name;
/// <summary>
/// Gets or sets the recorder.
/// </summary>
public Recorder Recorder;
#endregion
#region Methods
/// <summary>
/// Gets the value of the sampler.
/// </summary>
/// <returns>The value of the sampler.</returns>
public double GetValue()
{
if (this.Recorder == null)
{
return 0;
}
return this.Recorder.elapsedNanoseconds / 1000000.0;
}
#endregion
}
#endregion
#region Constructors
/// <summary>
/// Creates a new instance of the <see cref="UnityUserReportingPlatform"/> class.
/// </summary>
public AsyncUnityUserReportingPlatform()
{
this.logMessages = new List<AsyncUnityUserReportingPlatform.LogMessage>();
this.postOperations = new List<AsyncUnityUserReportingPlatform.PostOperation>();
this.screenshotManager = new ScreenshotManager();
// Recorders
this.profilerSamplers = new List<AsyncUnityUserReportingPlatform.ProfilerSampler>();
Dictionary<string, string> samplerNames = this.GetSamplerNames();
foreach (KeyValuePair<string, string> kvp in samplerNames)
{
Sampler sampler = Sampler.Get(kvp.Key);
if (sampler.isValid)
{
Recorder recorder = sampler.GetRecorder();
recorder.enabled = true;
AsyncUnityUserReportingPlatform.ProfilerSampler profilerSampler = new AsyncUnityUserReportingPlatform.ProfilerSampler();
profilerSampler.Name = kvp.Value;
profilerSampler.Recorder = recorder;
this.profilerSamplers.Add(profilerSampler);
}
}
// Log Messages
LogDispatcher.Register(this);
}
#endregion
#region Fields
private List<AsyncUnityUserReportingPlatform.LogMessage> logMessages;
private List<AsyncUnityUserReportingPlatform.PostOperation> postOperations;
private List<AsyncUnityUserReportingPlatform.ProfilerSampler> profilerSamplers;
private ScreenshotManager screenshotManager;
private List<AsyncUnityUserReportingPlatform.PostOperation> taskOperations;
#endregion
#region Methods
/// <inheritdoc cref="IUserReportingPlatform"/>
public T DeserializeJson<T>(string json)
{
return SimpleJson.SimpleJson.DeserializeObject<T>(json);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void OnEndOfFrame(UserReportingClient client)
{
this.screenshotManager.OnEndOfFrame();
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Post(string endpoint, string contentType, byte[] content, Action<float, float> progressCallback, Action<bool, byte[]> callback)
{
UnityWebRequest webRequest = new UnityWebRequest(endpoint, "POST");
webRequest.uploadHandler = new UploadHandlerRaw(content);
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.SetRequestHeader("Content-Type", contentType);
webRequest.SendWebRequest();
AsyncUnityUserReportingPlatform.PostOperation postOperation = new AsyncUnityUserReportingPlatform.PostOperation();
postOperation.WebRequest = webRequest;
postOperation.Callback = callback;
postOperation.ProgressCallback = progressCallback;
this.postOperations.Add(postOperation);
}
public void ReceiveLogMessage(string logString, string stackTrace, LogType logType)
{
lock (this.logMessages)
{
LogMessage logMessage = new LogMessage();
logMessage.LogString = logString;
logMessage.StackTrace = stackTrace;
logMessage.LogType = logType;
this.logMessages.Add(logMessage);
}
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void RunTask(Func<object> task, Action<object> callback)
{
callback(task());
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void SendAnalyticsEvent(string eventName, Dictionary<string, object> eventData)
{
Analytics.CustomEvent(eventName, eventData);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public string SerializeJson(object instance)
{
return SimpleJson.SimpleJson.SerializeObject(instance);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void TakeScreenshot(int frameNumber, int maximumWidth, int maximumHeight, object source, Action<int, byte[]> callback)
{
this.screenshotManager.TakeScreenshot(source, frameNumber, maximumWidth, maximumHeight, callback);
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public void Update(UserReportingClient client)
{
// Log Messages
lock (this.logMessages)
{
foreach (AsyncUnityUserReportingPlatform.LogMessage logMessage in this.logMessages)
{
UserReportEventLevel eventLevel = UserReportEventLevel.Info;
if (logMessage.LogType == LogType.Warning)
{
eventLevel = UserReportEventLevel.Warning;
}
else if (logMessage.LogType == LogType.Error)
{
eventLevel = UserReportEventLevel.Error;
}
else if (logMessage.LogType == LogType.Exception)
{
eventLevel = UserReportEventLevel.Error;
}
else if (logMessage.LogType == LogType.Assert)
{
eventLevel = UserReportEventLevel.Error;
}
if (client.IsConnectedToLogger)
{
client.LogEvent(eventLevel, logMessage.LogString, logMessage.StackTrace);
}
}
this.logMessages.Clear();
}
// Metrics
if (client.Configuration.MetricsGatheringMode == MetricsGatheringMode.Automatic)
{
// Sample Automatic Metrics
this.SampleAutomaticMetrics(client);
// Profiler Samplers
foreach (AsyncUnityUserReportingPlatform.ProfilerSampler profilerSampler in this.profilerSamplers)
{
client.SampleMetric(profilerSampler.Name, profilerSampler.GetValue());
}
}
// Post Operations
int postOperationIndex = 0;
while (postOperationIndex < this.postOperations.Count)
{
AsyncUnityUserReportingPlatform.PostOperation postOperation = this.postOperations[postOperationIndex];
if (postOperation.WebRequest.isDone)
{
bool isError = postOperation.WebRequest.error != null && postOperation.WebRequest.responseCode != 200;
if (isError)
{
string errorMessage = string.Format("UnityUserReportingPlatform.Post: {0} {1}", postOperation.WebRequest.responseCode, postOperation.WebRequest.error);
UnityEngine.Debug.Log(errorMessage);
client.LogEvent(UserReportEventLevel.Error, errorMessage);
}
postOperation.ProgressCallback(1, 1);
postOperation.Callback(!isError, postOperation.WebRequest.downloadHandler.data);
this.postOperations.Remove(postOperation);
}
else
{
postOperation.ProgressCallback(postOperation.WebRequest.uploadProgress, postOperation.WebRequest.downloadProgress);
postOperationIndex++;
}
}
}
#endregion
#region Virtual Methods
/// <inheritdoc cref="IUserReportingPlatform"/>
public virtual IDictionary<string, string> GetDeviceMetadata()
{
Dictionary<string, string> deviceMetadata = new Dictionary<string, string>();
// Unity
deviceMetadata.Add("BuildGUID", Application.buildGUID);
deviceMetadata.Add("DeviceModel", SystemInfo.deviceModel);
deviceMetadata.Add("DeviceType", SystemInfo.deviceType.ToString());
deviceMetadata.Add("DeviceUniqueIdentifier", SystemInfo.deviceUniqueIdentifier);
deviceMetadata.Add("DPI", Screen.dpi.ToString(CultureInfo.InvariantCulture));
deviceMetadata.Add("GraphicsDeviceName", SystemInfo.graphicsDeviceName);
deviceMetadata.Add("GraphicsDeviceType", SystemInfo.graphicsDeviceType.ToString());
deviceMetadata.Add("GraphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
deviceMetadata.Add("GraphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
deviceMetadata.Add("GraphicsMemorySize", SystemInfo.graphicsMemorySize.ToString());
deviceMetadata.Add("InstallerName", Application.installerName);
deviceMetadata.Add("InstallMode", Application.installMode.ToString());
deviceMetadata.Add("IsEditor", Application.isEditor.ToString());
deviceMetadata.Add("IsFullScreen", Screen.fullScreen.ToString());
deviceMetadata.Add("OperatingSystem", SystemInfo.operatingSystem);
deviceMetadata.Add("OperatingSystemFamily", SystemInfo.operatingSystemFamily.ToString());
deviceMetadata.Add("Orientation", Screen.orientation.ToString());
deviceMetadata.Add("Platform", Application.platform.ToString());
try
{
deviceMetadata.Add("QualityLevel", QualitySettings.names[QualitySettings.GetQualityLevel()]);
}
catch
{
// Empty
}
deviceMetadata.Add("ResolutionWidth", Screen.currentResolution.width.ToString());
deviceMetadata.Add("ResolutionHeight", Screen.currentResolution.height.ToString());
deviceMetadata.Add("ResolutionRefreshRate", Screen.currentResolution.refreshRate.ToString());
deviceMetadata.Add("SystemLanguage", Application.systemLanguage.ToString());
deviceMetadata.Add("SystemMemorySize", SystemInfo.systemMemorySize.ToString());
deviceMetadata.Add("TargetFrameRate", Application.targetFrameRate.ToString());
deviceMetadata.Add("UnityVersion", Application.unityVersion);
deviceMetadata.Add("Version", Application.version);
// Other
deviceMetadata.Add("Source", "Unity");
// Type
Type type = this.GetType();
deviceMetadata.Add("IUserReportingPlatform", type.Name);
// Return
return deviceMetadata;
}
public virtual Dictionary<string, string> GetSamplerNames()
{
Dictionary<string, string> samplerNames = new Dictionary<string, string>();
samplerNames.Add("AudioManager.FixedUpdate", "AudioManager.FixedUpdateInMilliseconds");
samplerNames.Add("AudioManager.Update", "AudioManager.UpdateInMilliseconds");
samplerNames.Add("LateBehaviourUpdate", "Behaviors.LateUpdateInMilliseconds");
samplerNames.Add("BehaviourUpdate", "Behaviors.UpdateInMilliseconds");
samplerNames.Add("Camera.Render", "Camera.RenderInMilliseconds");
samplerNames.Add("Overhead", "Engine.OverheadInMilliseconds");
samplerNames.Add("WaitForRenderJobs", "Engine.WaitForRenderJobsInMilliseconds");
samplerNames.Add("WaitForTargetFPS", "Engine.WaitForTargetFPSInMilliseconds");
samplerNames.Add("GUI.Repaint", "GUI.RepaintInMilliseconds");
samplerNames.Add("Network.Update", "Network.UpdateInMilliseconds");
samplerNames.Add("ParticleSystem.EndUpdateAll", "ParticleSystem.EndUpdateAllInMilliseconds");
samplerNames.Add("ParticleSystem.Update", "ParticleSystem.UpdateInMilliseconds");
samplerNames.Add("Physics.FetchResults", "Physics.FetchResultsInMilliseconds");
samplerNames.Add("Physics.Processing", "Physics.ProcessingInMilliseconds");
samplerNames.Add("Physics.ProcessReports", "Physics.ProcessReportsInMilliseconds");
samplerNames.Add("Physics.Simulate", "Physics.SimulateInMilliseconds");
samplerNames.Add("Physics.UpdateBodies", "Physics.UpdateBodiesInMilliseconds");
samplerNames.Add("Physics.Interpolation", "Physics.InterpolationInMilliseconds");
samplerNames.Add("Physics2D.DynamicUpdate", "Physics2D.DynamicUpdateInMilliseconds");
samplerNames.Add("Physics2D.FixedUpdate", "Physics2D.FixedUpdateInMilliseconds");
return samplerNames;
}
/// <inheritdoc cref="IUserReportingPlatform"/>
public virtual void ModifyUserReport(UserReport userReport)
{
// Active Scene
Scene activeScene = SceneManager.GetActiveScene();
userReport.DeviceMetadata.Add(new UserReportNamedValue("ActiveSceneName", activeScene.name));
// Main Camera
Camera mainCamera = Camera.main;
if (mainCamera != null)
{
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraName", mainCamera.name));
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraPosition", mainCamera.transform.position.ToString()));
userReport.DeviceMetadata.Add(new UserReportNamedValue("MainCameraForward", mainCamera.transform.forward.ToString()));
// Looking At
RaycastHit hit;
if (Physics.Raycast(mainCamera.transform.position, mainCamera.transform.forward, out hit))
{
GameObject lookingAt = hit.transform.gameObject;
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAt", hit.point.ToString()));
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAtGameObject", lookingAt.name));
userReport.DeviceMetadata.Add(new UserReportNamedValue("LookingAtGameObjectPosition", lookingAt.transform.position.ToString()));
}
}
}
/// <summary>
/// Samples automatic metrics.
/// </summary>
/// <param name="client">The client.</param>
public virtual void SampleAutomaticMetrics(UserReportingClient client)
{
// Graphics
client.SampleMetric("Graphics.FramesPerSecond", 1.0f / Time.deltaTime);
// Memory
client.SampleMetric("Memory.MonoUsedSizeInBytes", Profiler.GetMonoUsedSizeLong());
client.SampleMetric("Memory.TotalAllocatedMemoryInBytes", Profiler.GetTotalAllocatedMemoryLong());
client.SampleMetric("Memory.TotalReservedMemoryInBytes", Profiler.GetTotalReservedMemoryLong());
client.SampleMetric("Memory.TotalUnusedReservedMemoryInBytes", Profiler.GetTotalUnusedReservedMemoryLong());
// Battery
client.SampleMetric("Battery.BatteryLevelInPercent", SystemInfo.batteryLevel);
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4c834f5ac7c3fc54cb35d5393a49ac56
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bc211a7e0296020498ad8104967f8f90
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,125 @@
using System;
namespace Unity.Screenshots
{
public static class Downsampler
{
#region Static Methods
public static byte[] Downsample(byte[] dataRgba, int stride, int maximumWidth, int maximumHeight, out int downsampledStride)
{
// Preconditions
if (stride == 0)
{
throw new ArgumentException("The stride must be greater than 0.");
}
if (stride % 4 != 0)
{
throw new ArgumentException("The stride must be evenly divisible by 4.");
}
if (dataRgba == null)
{
throw new ArgumentNullException("dataRgba");
}
if (dataRgba.Length == 0)
{
throw new ArgumentException("The data length must be greater than 0.");
}
if (dataRgba.Length % 4 != 0)
{
throw new ArgumentException("The data must be evenly divisible by 4.");
}
if (dataRgba.Length % stride != 0)
{
throw new ArgumentException("The data must be evenly divisible by the stride.");
}
// Implementation
int width = stride / 4;
int height = dataRgba.Length / stride;
float ratioX = maximumWidth / (float) width;
float ratioY = maximumHeight / (float) height;
float ratio = Math.Min(ratioX, ratioY);
if (ratio < 1)
{
int downsampledWidth = (int) Math.Round(width * ratio);
int downsampledHeight = (int) Math.Round(height * ratio);
float[] downsampledData = new float[downsampledWidth * downsampledHeight * 4];
float sampleWidth = width / (float) downsampledWidth;
float sampleHeight = height / (float) downsampledHeight;
int kernelWidth = (int) Math.Floor(sampleWidth);
int kernelHeight = (int) Math.Floor(sampleHeight);
int kernelSize = kernelWidth * kernelHeight;
for (int y = 0; y < downsampledHeight; y++)
{
for (int x = 0; x < downsampledWidth; x++)
{
int destinationIndex = y * downsampledWidth * 4 + x * 4;
int sampleLowerX = (int) Math.Floor(x * sampleWidth);
int sampleLowerY = (int) Math.Floor(y * sampleHeight);
int sampleUpperX = sampleLowerX + kernelWidth;
int sampleUpperY = sampleLowerY + kernelHeight;
for (int sampleY = sampleLowerY; sampleY < sampleUpperY; sampleY++)
{
if (sampleY >= height)
{
continue;
}
for (int sampleX = sampleLowerX; sampleX < sampleUpperX; sampleX++)
{
if (sampleX >= width)
{
continue;
}
int sourceIndex = sampleY * width * 4 + sampleX * 4;
downsampledData[destinationIndex] += dataRgba[sourceIndex];
downsampledData[destinationIndex + 1] += dataRgba[sourceIndex + 1];
downsampledData[destinationIndex + 2] += dataRgba[sourceIndex + 2];
downsampledData[destinationIndex + 3] += dataRgba[sourceIndex + 3];
}
}
downsampledData[destinationIndex] /= kernelSize;
downsampledData[destinationIndex + 1] /= kernelSize;
downsampledData[destinationIndex + 2] /= kernelSize;
downsampledData[destinationIndex + 3] /= kernelSize;
}
}
byte[] flippedData = new byte[downsampledWidth * downsampledHeight * 4];
for (int y = 0; y < downsampledHeight; y++)
{
for (int x = 0; x < downsampledWidth; x++)
{
int sourceIndex = (downsampledHeight - 1 - y) * downsampledWidth * 4 + x * 4;
int destinationIndex = y * downsampledWidth * 4 + x * 4;
flippedData[destinationIndex] += (byte) downsampledData[sourceIndex];
flippedData[destinationIndex + 1] += (byte) downsampledData[sourceIndex + 1];
flippedData[destinationIndex + 2] += (byte) downsampledData[sourceIndex + 2];
flippedData[destinationIndex + 3] += (byte) downsampledData[sourceIndex + 3];
}
}
downsampledStride = downsampledWidth * 4;
return flippedData;
}
else
{
byte[] flippedData = new byte[dataRgba.Length];
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int sourceIndex = (height - 1 - y) * width * 4 + x * 4;
int destinationIndex = y * width * 4 + x * 4;
flippedData[destinationIndex] += (byte) dataRgba[sourceIndex];
flippedData[destinationIndex + 1] += (byte) dataRgba[sourceIndex + 1];
flippedData[destinationIndex + 2] += (byte) dataRgba[sourceIndex + 2];
flippedData[destinationIndex + 3] += (byte) dataRgba[sourceIndex + 3];
}
}
downsampledStride = width * 4;
return flippedData;
}
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 40babb20770d5ac45a84d207281b725d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,303 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Threading;
namespace Unity.Screenshots
{
/// <summary>
/// Provides PNG encoding.
/// </summary>
/// <remarks>This is a minimal implementation of a PNG encoder with no scanline filtering or additional features.</remarks>
public static class PngEncoder
{
#region Nested Types
public class Crc32
{
#region Static Fields
private static UInt32 generator = 0xEDB88320;
#endregion
#region Constructors
public Crc32()
{
this.checksumTable = Enumerable.Range(0, 256)
.Select(i =>
{
uint tableEntry = (uint)i;
for (int j = 0; j < 8; j++)
{
tableEntry = (tableEntry & 1) != 0 ? Crc32.generator ^ (tableEntry >> 1) : tableEntry >> 1;
}
return tableEntry;
})
.ToArray();
}
#endregion
#region Fields
private readonly UInt32[] checksumTable;
#endregion
#region Methods
public UInt32 Calculate<T>(IEnumerable<T> byteStream)
{
return ~byteStream.Aggregate(0xFFFFFFFF, (checksumRegister, currentByte) => this.checksumTable[(checksumRegister & 0xFF) ^ Convert.ToByte(currentByte)] ^ (checksumRegister >> 8));
}
#endregion
}
#endregion
#region Static Constructors
static PngEncoder()
{
PngEncoder.crc32 = new Crc32();
}
#endregion
#region Static Fields
private static Crc32 crc32;
#endregion
#region Static Methods
private static uint Adler32(byte[] bytes)
{
const int mod = 65521;
uint a = 1, b = 0;
foreach (byte byteValue in bytes)
{
a = (a + byteValue) % mod;
b = (b + a) % mod;
}
return (b << 16) | a;
}
private static void AppendByte(this byte[] data, ref int position, byte value)
{
data[position] = value;
position++;
}
private static void AppendBytes(this byte[] data, ref int position, byte[] value)
{
foreach (byte valueByte in value)
{
data.AppendByte(ref position, valueByte);
}
}
private static void AppendChunk(this byte[] data, ref int position, string chunkType, byte[] chunkData)
{
byte[] chunkTypeBytes = PngEncoder.GetChunkTypeBytes(chunkType);
if (chunkTypeBytes != null)
{
data.AppendInt(ref position, chunkData.Length);
data.AppendBytes(ref position, chunkTypeBytes);
data.AppendBytes(ref position, chunkData);
data.AppendUInt(ref position, PngEncoder.GetChunkCrc(chunkTypeBytes, chunkData));
}
}
private static void AppendInt(this byte[] data, ref int position, int value)
{
byte[] valueBytes = BitConverter.GetBytes(value);
if (BitConverter.IsLittleEndian)
{
Array.Reverse(valueBytes);
}
data.AppendBytes(ref position, valueBytes);
}
private static void AppendUInt(this byte[] data, ref int position, uint value)
{
byte[] valueBytes = BitConverter.GetBytes(value);
if (BitConverter.IsLittleEndian)
{
Array.Reverse(valueBytes);
}
data.AppendBytes(ref position, valueBytes);
}
private static byte[] Compress(byte[] bytes)
{
using (MemoryStream outStream = new MemoryStream())
{
using (DeflateStream gZipStream = new DeflateStream(outStream, CompressionMode.Compress))
using (MemoryStream mStream = new MemoryStream(bytes))
{
mStream.WriteTo(gZipStream);
}
byte[] compressedBytes = outStream.ToArray();
return compressedBytes;
}
}
public static byte[] Encode(byte[] dataRgba, int stride)
{
// Preconditions
if (dataRgba == null)
{
throw new ArgumentNullException("dataRgba");
}
if (dataRgba.Length == 0)
{
throw new ArgumentException("The data length must be greater than 0.");
}
if (stride == 0)
{
throw new ArgumentException("The stride must be greater than 0.");
}
if (stride % 4 != 0)
{
throw new ArgumentException("The stride must be evenly divisible by 4.");
}
if (dataRgba.Length % 4 != 0)
{
throw new ArgumentException("The data must be evenly divisible by 4.");
}
if (dataRgba.Length % stride != 0)
{
throw new ArgumentException("The data must be evenly divisible by the stride.");
}
// Dimensions
int pixels = dataRgba.Length / 4;
int width = stride / 4;
int height = pixels / width;
// IHDR Chunk
byte[] ihdrData = new byte[13];
int ihdrPosition = 0;
ihdrData.AppendInt(ref ihdrPosition, width);
ihdrData.AppendInt(ref ihdrPosition, height);
ihdrData.AppendByte(ref ihdrPosition, 8); // Bit depth
ihdrData.AppendByte(ref ihdrPosition, 6); // Color type (color + alpha)
ihdrData.AppendByte(ref ihdrPosition, 0); // Compression method (always 0)
ihdrData.AppendByte(ref ihdrPosition, 0); // Filter method (always 0)
ihdrData.AppendByte(ref ihdrPosition, 0); // Interlace method (no interlacing)
// IDAT Chunk
byte[] scanlineData = new byte[dataRgba.Length + height];
int scanlineDataPosition = 0;
int scanlinePosition = 0;
for (int i = 0; i < dataRgba.Length; i++)
{
if (scanlinePosition >= stride)
{
scanlinePosition = 0;
}
if (scanlinePosition == 0)
{
scanlineData.AppendByte(ref scanlineDataPosition, 0);
}
scanlineData.AppendByte(ref scanlineDataPosition, dataRgba[i]);
scanlinePosition++;
}
byte[] compressedScanlineData = PngEncoder.Compress(scanlineData);
byte[] idatData = new byte[1 + 1 + compressedScanlineData.Length + 4];
int idatPosition = 0;
idatData.AppendByte(ref idatPosition, 0x78); // Zlib header
idatData.AppendByte(ref idatPosition, 0x9C); // Zlib header
idatData.AppendBytes(ref idatPosition, compressedScanlineData); // Data
idatData.AppendUInt(ref idatPosition, PngEncoder.Adler32(scanlineData)); // Adler32 checksum
// Png
byte[] png = new byte[8 + ihdrData.Length + 12 + idatData.Length + 12 + 12];
// Position
int position = 0;
// Signature
png.AppendByte(ref position, 0x89); // High bit set
png.AppendByte(ref position, 0x50); // P
png.AppendByte(ref position, 0x4E); // N
png.AppendByte(ref position, 0x47); // G
png.AppendByte(ref position, 0x0D); // DOS line ending
png.AppendByte(ref position, 0x0A); // DOS line ending
png.AppendByte(ref position, 0x1A); // DOS end of file
png.AppendByte(ref position, 0x0A); // Unix line ending
// Assemble
png.AppendChunk(ref position, "IHDR", ihdrData);
png.AppendChunk(ref position, "IDAT", idatData);
png.AppendChunk(ref position, "IEND", new byte[0]);
// Return
return png;
}
public static void EncodeAsync(byte[] dataRgba, int stride, Action<Exception, byte[]> callback)
{
ThreadPool.QueueUserWorkItem((state) =>
{
try
{
byte[] png = PngEncoder.Encode(dataRgba, stride);
callback(null, png);
}
catch (Exception ex)
{
callback(ex, null);
throw;
}
}, null);
}
private static uint GetChunkCrc(byte[] chunkTypeBytes, byte[] chunkData)
{
byte[] combinedBytes = new byte[chunkTypeBytes.Length + chunkData.Length];
Array.Copy(chunkTypeBytes, 0, combinedBytes, 0, chunkTypeBytes.Length);
Array.Copy(chunkData, 0, combinedBytes, 4, chunkData.Length);
return PngEncoder.crc32.Calculate(combinedBytes);
}
private static byte[] GetChunkTypeBytes(string value)
{
char[] characters = value.ToCharArray();
if (characters.Length < 4)
{
return null;
}
byte[] type = new byte[4];
for (int i = 0; i < type.Length; i++)
{
type[i] = (byte)characters[i];
}
return type;
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b5febb852ffdece4ca30c97b63d617de
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,165 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Unity.Screenshots
{
public class ScreenshotManager
{
#region Nested Types
private class ScreenshotOperation
{
#region Properties
public Action<int, byte[]> Callback { get; set; }
public byte[] Data { get; set; }
public int FrameNumber { get; set; }
public bool IsAwaiting { get; set; }
public bool IsComplete { get; set; }
public bool IsInUse { get; set; }
public int MaximumHeight { get; set; }
public int MaximumWidth { get; set; }
public object Source { get; set; }
#endregion
#region Methods
public void Use()
{
this.Callback = null;
this.Data = null;
this.FrameNumber = 0;
this.IsAwaiting = true;
this.IsComplete = false;
this.IsInUse = true;
this.MaximumHeight = 0;
this.MaximumWidth = 0;
this.Source = null;
}
#endregion
}
#endregion
#region Constructors
public ScreenshotManager()
{
this.screenshotRecorder = new ScreenshotRecorder();
this.screenshotCallbackDelegate = this.ScreenshotCallback;
this.screenshotOperations = new List<ScreenshotOperation>();
}
#endregion
#region Fields
private Action<byte[], object> screenshotCallbackDelegate;
private List<ScreenshotOperation> screenshotOperations;
private ScreenshotRecorder screenshotRecorder;
#endregion
#region Methods
private ScreenshotOperation GetScreenshotOperation()
{
foreach (ScreenshotOperation screenshotOperation in this.screenshotOperations)
{
if (!screenshotOperation.IsInUse)
{
screenshotOperation.Use();
return screenshotOperation;
}
}
ScreenshotOperation newScreenshotOperation = new ScreenshotOperation();
newScreenshotOperation.Use();
this.screenshotOperations.Add(newScreenshotOperation);
return newScreenshotOperation;
}
public void OnEndOfFrame()
{
foreach (ScreenshotOperation screenshotOperation in this.screenshotOperations)
{
if (screenshotOperation.IsInUse)
{
if (screenshotOperation.IsAwaiting)
{
screenshotOperation.IsAwaiting = false;
if (screenshotOperation.Source == null)
{
this.screenshotRecorder.Screenshot(screenshotOperation.MaximumWidth, screenshotOperation.MaximumHeight, ScreenshotType.Png, this.screenshotCallbackDelegate, screenshotOperation);
}
else if (screenshotOperation.Source is Camera)
{
this.screenshotRecorder.Screenshot(screenshotOperation.Source as Camera, screenshotOperation.MaximumWidth, screenshotOperation.MaximumHeight, ScreenshotType.Png, this.screenshotCallbackDelegate, screenshotOperation);
}
else if (screenshotOperation.Source is RenderTexture)
{
this.screenshotRecorder.Screenshot(screenshotOperation.Source as RenderTexture, screenshotOperation.MaximumWidth, screenshotOperation.MaximumHeight, ScreenshotType.Png, this.screenshotCallbackDelegate, screenshotOperation);
}
else if (screenshotOperation.Source is Texture2D)
{
this.screenshotRecorder.Screenshot(screenshotOperation.Source as Texture2D, screenshotOperation.MaximumWidth, screenshotOperation.MaximumHeight, ScreenshotType.Png, this.screenshotCallbackDelegate, screenshotOperation);
}
else
{
this.ScreenshotCallback(null, screenshotOperation);
}
}
else if (screenshotOperation.IsComplete)
{
screenshotOperation.IsInUse = false;
try
{
if (screenshotOperation != null && screenshotOperation.Callback != null)
{
screenshotOperation.Callback(screenshotOperation.FrameNumber, screenshotOperation.Data);
}
}
catch
{
// Do Nothing
}
}
}
}
}
private void ScreenshotCallback(byte[] data, object state)
{
ScreenshotOperation screenshotOperation = state as ScreenshotOperation;
if (screenshotOperation != null)
{
screenshotOperation.Data = data;
screenshotOperation.IsComplete = true;
}
}
public void TakeScreenshot(object source, int frameNumber, int maximumWidth, int maximumHeight, Action<int, byte[]> callback)
{
ScreenshotOperation screenshotOperation = this.GetScreenshotOperation();
screenshotOperation.FrameNumber = frameNumber;
screenshotOperation.MaximumWidth = maximumWidth;
screenshotOperation.MaximumHeight = maximumHeight;
screenshotOperation.Source = source;
screenshotOperation.Callback = callback;
}
#endregion
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c56568a2c9bad0245b35d93ba6b0e046
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,199 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Unity.Collections;
using UnityEngine;
using UnityEngine.Rendering;
namespace Unity.Screenshots
{
public class ScreenshotRecorder
{
#region Nested Types
private class ScreenshotOperation
{
#region Constructors
public ScreenshotOperation()
{
this.ScreenshotCallbackDelegate = this.ScreenshotCallback;
this.EncodeCallbackDelegate = this.EncodeCallback;
}
#endregion
#region Fields
public WaitCallback EncodeCallbackDelegate;
public Action<AsyncGPUReadbackRequest> ScreenshotCallbackDelegate;
#endregion
#region Properties
public Action<byte[], object> Callback { get; set; }
public int Height { get; set; }
public int Identifier { get; set; }
public bool IsInUse { get; set; }
public int MaximumHeight { get; set; }
public int MaximumWidth { get; set; }
public NativeArray<byte> NativeData { get; set; }
public Texture Source { get; set; }
public object State { get; set; }
public ScreenshotType Type { get; set; }
public int Width { get; set; }
#endregion
#region Methods
private void EncodeCallback(object state)
{
byte[] byteData = this.NativeData.ToArray();
int downsampledStride;
byteData = Downsampler.Downsample(byteData, this.Width * 4, this.MaximumWidth, this.MaximumHeight, out downsampledStride);
if (this.Type == ScreenshotType.Png)
{
byteData = PngEncoder.Encode(byteData, downsampledStride);
}
if (this.Callback != null)
{
this.Callback(byteData, this.State);
}
this.NativeData.Dispose();
this.IsInUse = false;
}
private void SavePngToDisk(byte[] byteData)
{
if (!Directory.Exists("Screenshots"))
{
Directory.CreateDirectory("Screenshots");
}
File.WriteAllBytes(string.Format("Screenshots/{0}.png", this.Identifier % 60), byteData);
}
private void ScreenshotCallback(AsyncGPUReadbackRequest request)
{
if (!request.hasError)
{
NativeLeakDetection.Mode = NativeLeakDetectionMode.Disabled;
NativeArray<byte> data = request.GetData<byte>();
NativeArray<byte> persistentData = new NativeArray<byte>(data, Allocator.Persistent);
this.Width = request.width;
this.Height = request.height;
this.NativeData = persistentData;
ThreadPool.QueueUserWorkItem(this.EncodeCallbackDelegate, null);
}
else
{
if (this.Callback != null)
{
this.Callback(null, this.State);
}
}
if (this.Source != null)
{
UnityEngine.Object.Destroy(this.Source);
}
}
#endregion
}
#endregion
#region Static Fields
private static int nextIdentifier;
#endregion
#region Constructors
public ScreenshotRecorder()
{
this.operationPool = new List<ScreenshotOperation>();
}
#endregion
#region Fields
private List<ScreenshotOperation> operationPool;
#endregion
#region Methods
private ScreenshotOperation GetOperation()
{
foreach (ScreenshotOperation operation in this.operationPool)
{
if (!operation.IsInUse)
{
operation.IsInUse = true;
return operation;
}
}
ScreenshotOperation newOperation = new ScreenshotOperation();
newOperation.IsInUse = true;
this.operationPool.Add(newOperation);
return newOperation;
}
public void Screenshot(int maximumWidth, int maximumHeight, ScreenshotType type, Action<byte[], object> callback, object state)
{
Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture();
this.Screenshot(texture, maximumWidth, maximumHeight, type, callback, state);
}
public void Screenshot(Camera source, int maximumWidth, int maximumHeight, ScreenshotType type, Action<byte[], object> callback, object state)
{
RenderTexture renderTexture = new RenderTexture(maximumWidth, maximumHeight, 24);
RenderTexture originalTargetTexture = source.targetTexture;
source.targetTexture = renderTexture;
source.Render();
source.targetTexture = originalTargetTexture;
this.Screenshot(renderTexture, maximumWidth, maximumHeight, type, callback, state);
}
public void Screenshot(RenderTexture source, int maximumWidth, int maximumHeight, ScreenshotType type, Action<byte[], object> callback, object state)
{
this.ScreenshotInternal(source, maximumWidth, maximumHeight, type, callback, state);
}
public void Screenshot(Texture2D source, int maximumWidth, int maximumHeight, ScreenshotType type, Action<byte[], object> callback, object state)
{
this.ScreenshotInternal(source, maximumWidth, maximumHeight, type, callback, state);
}
private void ScreenshotInternal(Texture source, int maximumWidth, int maximumHeight, ScreenshotType type, Action<byte[], object> callback, object state)
{
ScreenshotOperation operation = this.GetOperation();
operation.Identifier = ScreenshotRecorder.nextIdentifier++;
operation.Source = source;
operation.MaximumWidth = maximumWidth;
operation.MaximumHeight = maximumHeight;
operation.Type = type;
operation.Callback = callback;
operation.State = state;
AsyncGPUReadback.Request(source, 0, TextureFormat.RGBA32, operation.ScreenshotCallbackDelegate);
}
#endregion
}
}

Some files were not shown because too many files have changed in this diff Show More