Did a few things
This commit is contained in:
parent
3da75e4cc6
commit
db537bd7b7
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
8
Assets/Sprites/Logos.meta
Normal file
8
Assets/Sprites/Logos.meta
Normal file
@ -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
BIN
Assets/Sprites/Logos/brn.png
(Stored with Git LFS)
Normal file
Binary file not shown.
96
Assets/Sprites/Logos/brn.png.meta
Normal file
96
Assets/Sprites/Logos/brn.png.meta
Normal file
@ -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
BIN
Assets/Sprites/Logos/geojam_banner.png
(Stored with Git LFS)
Normal file
Binary file not shown.
96
Assets/Sprites/Logos/geojam_banner.png.meta
Normal file
96
Assets/Sprites/Logos/geojam_banner.png.meta
Normal file
@ -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:
|
9
Assets/UserReporting.meta
Normal file
9
Assets/UserReporting.meta
Normal file
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46127a1a69a4a154b90ce07c3f290bad
|
||||
folderAsset: yes
|
||||
timeCreated: 1501037370
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
10
Assets/UserReporting/Prefabs.meta
Normal file
10
Assets/UserReporting/Prefabs.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 771cb9cc384ae3f40909b9958419a209
|
||||
folderAsset: yes
|
||||
timeCreated: 1535571973
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
3180
Assets/UserReporting/Prefabs/UserReportingPrefab.prefab
Normal file
3180
Assets/UserReporting/Prefabs/UserReportingPrefab.prefab
Normal file
File diff suppressed because it is too large
Load Diff
10
Assets/UserReporting/Prefabs/UserReportingPrefab.prefab.meta
Normal file
10
Assets/UserReporting/Prefabs/UserReportingPrefab.prefab.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c1aa92cd8198f654b933334ac725dc4f
|
||||
timeCreated: 1538785894
|
||||
licenseType: Free
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
16
Assets/UserReporting/Release Notes.txt
Normal file
16
Assets/UserReporting/Release Notes.txt
Normal file
@ -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.
|
7
Assets/UserReporting/Release Notes.txt.meta
Normal file
7
Assets/UserReporting/Release Notes.txt.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 502667b69f01dbc449740d3f231a9678
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
10
Assets/UserReporting/Scripts.meta
Normal file
10
Assets/UserReporting/Scripts.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0d5c0c9b35b46242935c4d341d53f0b
|
||||
folderAsset: yes
|
||||
timeCreated: 1535571942
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Assets/UserReporting/Scripts/Client.meta
Normal file
8
Assets/UserReporting/Scripts/Client.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ecfa940da71ddb4998b21bc9f0d7a0d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
44
Assets/UserReporting/Scripts/Client/AttachmentExtensions.cs
Normal file
44
Assets/UserReporting/Scripts/Client/AttachmentExtensions.cs
Normal file
@ -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:
|
346
Assets/UserReporting/Scripts/Client/CyclicalList.cs
Normal file
346
Assets/UserReporting/Scripts/Client/CyclicalList.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/CyclicalList.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/CyclicalList.cs.meta
Normal file
@ -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:
|
13
Assets/UserReporting/Scripts/Client/LicenseLevel.cs
Normal file
13
Assets/UserReporting/Scripts/Client/LicenseLevel.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Unity.Cloud.Authorization
|
||||
{
|
||||
public enum LicenseLevel
|
||||
{
|
||||
None = 0,
|
||||
|
||||
Personal = 10,
|
||||
|
||||
Plus = 20,
|
||||
|
||||
Pro = 30,
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/LicenseLevel.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/LicenseLevel.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 61d18ba6de6f7724caf99f1af5eec743
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
28
Assets/UserReporting/Scripts/Client/MetricsGatheringMode.cs
Normal file
28
Assets/UserReporting/Scripts/Client/MetricsGatheringMode.cs
Normal file
@ -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:
|
80
Assets/UserReporting/Scripts/Client/PngHelper.cs
Normal file
80
Assets/UserReporting/Scripts/Client/PngHelper.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/PngHelper.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/PngHelper.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c70eccc2beb89c54a93499fd68044b27
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
47
Assets/UserReporting/Scripts/Client/Preconditions.cs
Normal file
47
Assets/UserReporting/Scripts/Client/Preconditions.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/Preconditions.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/Preconditions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf95f7e6c9cf4c74388b0ff0888257c5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
113
Assets/UserReporting/Scripts/Client/SerializableException.cs
Normal file
113
Assets/UserReporting/Scripts/Client/SerializableException.cs
Normal file
@ -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:
|
247
Assets/UserReporting/Scripts/Client/UserReport.cs
Normal file
247
Assets/UserReporting/Scripts/Client/UserReport.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/UserReport.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/UserReport.cs.meta
Normal file
@ -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:
|
59
Assets/UserReporting/Scripts/Client/UserReportAttachment.cs
Normal file
59
Assets/UserReporting/Scripts/Client/UserReportAttachment.cs
Normal file
@ -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:
|
52
Assets/UserReporting/Scripts/Client/UserReportEvent.cs
Normal file
52
Assets/UserReporting/Scripts/Client/UserReportEvent.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/UserReportEvent.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/UserReportEvent.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1167bb63e766c824a899a1e17778b1f6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
28
Assets/UserReporting/Scripts/Client/UserReportEventLevel.cs
Normal file
28
Assets/UserReporting/Scripts/Client/UserReportEventLevel.cs
Normal file
@ -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:
|
71
Assets/UserReporting/Scripts/Client/UserReportList.cs
Normal file
71
Assets/UserReporting/Scripts/Client/UserReportList.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/UserReportList.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/UserReportList.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc881d42ec009e14a8c8e119e935daaa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
34
Assets/UserReporting/Scripts/Client/UserReportMeasure.cs
Normal file
34
Assets/UserReporting/Scripts/Client/UserReportMeasure.cs
Normal file
@ -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:
|
69
Assets/UserReporting/Scripts/Client/UserReportMetric.cs
Normal file
69
Assets/UserReporting/Scripts/Client/UserReportMetric.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Client/UserReportMetric.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Client/UserReportMetric.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fb60fdec80e5deb4d9825895b0cc7432
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
37
Assets/UserReporting/Scripts/Client/UserReportNamedValue.cs
Normal file
37
Assets/UserReporting/Scripts/Client/UserReportNamedValue.cs
Normal file
@ -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:
|
108
Assets/UserReporting/Scripts/Client/UserReportPreview.cs
Normal file
108
Assets/UserReporting/Scripts/Client/UserReportPreview.cs
Normal file
@ -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:
|
43
Assets/UserReporting/Scripts/Client/UserReportScreenshot.cs
Normal file
43
Assets/UserReporting/Scripts/Client/UserReportScreenshot.cs
Normal file
@ -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:
|
665
Assets/UserReporting/Scripts/Client/UserReportingClient.cs
Normal file
665
Assets/UserReporting/Scripts/Client/UserReportingClient.cs
Normal file
@ -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:
|
60
Assets/UserReporting/Scripts/FramerateMonitor.cs
Normal file
60
Assets/UserReporting/Scripts/FramerateMonitor.cs
Normal file
@ -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
|
||||
}
|
13
Assets/UserReporting/Scripts/FramerateMonitor.cs.meta
Normal file
13
Assets/UserReporting/Scripts/FramerateMonitor.cs.meta
Normal file
@ -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:
|
8
Assets/UserReporting/Scripts/Plugin.meta
Normal file
8
Assets/UserReporting/Scripts/Plugin.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a20cd360ef12d5a48abf6c9c255c36e3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
13
Assets/UserReporting/Scripts/Plugin/ILogListener.cs
Normal file
13
Assets/UserReporting/Scripts/Plugin/ILogListener.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Plugin/ILogListener.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Plugin/ILogListener.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 51133d588054ae44b8297105d9672ecf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
57
Assets/UserReporting/Scripts/Plugin/LogDispatcher.cs
Normal file
57
Assets/UserReporting/Scripts/Plugin/LogDispatcher.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Plugin/LogDispatcher.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Plugin/LogDispatcher.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 59d79028203775a4fa6483f0f73d861e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
2156
Assets/UserReporting/Scripts/Plugin/SimpleJson.cs
Normal file
2156
Assets/UserReporting/Scripts/Plugin/SimpleJson.cs
Normal file
File diff suppressed because it is too large
Load Diff
11
Assets/UserReporting/Scripts/Plugin/SimpleJson.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Plugin/SimpleJson.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf0f2cc16dbcd0d4b9c03fa534b483e2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
32
Assets/UserReporting/Scripts/Plugin/UnityUserReportParser.cs
Normal file
32
Assets/UserReporting/Scripts/Plugin/UnityUserReportParser.cs
Normal file
@ -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:
|
151
Assets/UserReporting/Scripts/Plugin/UnityUserReporting.cs
Normal file
151
Assets/UserReporting/Scripts/Plugin/UnityUserReporting.cs
Normal file
@ -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:
|
8
Assets/UserReporting/Scripts/Plugin/Version2018_3.meta
Normal file
8
Assets/UserReporting/Scripts/Plugin/Version2018_3.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e5d770e8bbb1104f8269dd2bb95937e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
426
Assets/UserReporting/Scripts/Plugin/Version2018_3/AsyncUnityUserReportingPlatform.cs
Normal file
426
Assets/UserReporting/Scripts/Plugin/Version2018_3/AsyncUnityUserReportingPlatform.cs
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Plugin/Version2018_3/AsyncUnityUserReportingPlatform.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Plugin/Version2018_3/AsyncUnityUserReportingPlatform.cs.meta
Normal file
@ -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
|
||||
}
|
||||
}
|
11
Assets/UserReporting/Scripts/Plugin/Version2018_3/Screenshots/ScreenshotManager.cs.meta
Normal file
11
Assets/UserReporting/Scripts/Plugin/Version2018_3/Screenshots/ScreenshotManager.cs.meta
Normal file
@ -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
Loading…
Reference in New Issue
Block a user