diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..0d73383 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,8 @@ + +- Project name: Ultimate-HelixJump +- Unity version: Unity 6000.3.0f1 +- Active game object: + - Name: TapToStartBtn + - Tag: Untagged + - Layer: UI + \ No newline at end of file diff --git a/Assets/Animations.meta b/Assets/Animations.meta new file mode 100644 index 0000000..1558297 --- /dev/null +++ b/Assets/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb33be375074c8f4a99e3c4ba088a2f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/GameName.controller b/Assets/Animations/GameName.controller new file mode 100644 index 0000000..3cf78af --- /dev/null +++ b/Assets/Animations/GameName.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1107 &-3642733791456680287 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1211743256155341754} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1211743256155341754} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GameName + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -3642733791456680287} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &1211743256155341754 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GameNameAnim + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: b40f7d08482881041a47e87f598aa21a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Animations/GameName.controller.meta b/Assets/Animations/GameName.controller.meta new file mode 100644 index 0000000..c8b97a0 --- /dev/null +++ b/Assets/Animations/GameName.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c307b377dfd77f1408cc88056fb6214e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/GameNameAnim.anim b/Assets/Animations/GameNameAnim.anim new file mode 100644 index 0000000..762b753 --- /dev/null +++ b/Assets/Animations/GameNameAnim.anim @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GameNameAnim + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -84.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: -60 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: -84.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 538195251 + script: {fileID: 0} + typeID: 224 + customType: 28 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -84.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: -60 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: -84.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Animations/GameNameAnim.anim.meta b/Assets/Animations/GameNameAnim.anim.meta new file mode 100644 index 0000000..5d86cca --- /dev/null +++ b/Assets/Animations/GameNameAnim.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b40f7d08482881041a47e87f598aa21a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/TapToStartAnim.anim b/Assets/Animations/TapToStartAnim.anim new file mode 100644 index 0000000..9195197 --- /dev/null +++ b/Assets/Animations/TapToStartAnim.anim @@ -0,0 +1,213 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TapToStartAnim + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.5 + value: {x: 1.1, y: 1.1, z: 1.1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Animations/TapToStartAnim.anim.meta b/Assets/Animations/TapToStartAnim.anim.meta new file mode 100644 index 0000000..684a384 --- /dev/null +++ b/Assets/Animations/TapToStartAnim.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fe5f2841a58456498aa055b0a9efe5c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/TapToStartBtn.controller b/Assets/Animations/TapToStartBtn.controller new file mode 100644 index 0000000..f406aeb --- /dev/null +++ b/Assets/Animations/TapToStartBtn.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TapToStartBtn + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 4495043453466589111} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &4495043453466589111 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 7324254154393619153} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 7324254154393619153} +--- !u!1102 &7324254154393619153 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TapToStartAnim + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 4fe5f2841a58456498aa055b0a9efe5c, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Animations/TapToStartBtn.controller.meta b/Assets/Animations/TapToStartBtn.controller.meta new file mode 100644 index 0000000..2fe68a4 --- /dev/null +++ b/Assets/Animations/TapToStartBtn.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5488d73ad5bec9d4980d6e72427e2bec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Casual Game Sounds U6.meta b/Assets/Casual Game Sounds U6.meta new file mode 100644 index 0000000..fbe1c25 --- /dev/null +++ b/Assets/Casual Game Sounds U6.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 976afa507739afb47b6fdefb42eb71b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds.meta b/Assets/Casual Game Sounds U6/CasualGameSounds.meta new file mode 100644 index 0000000..d90d266 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc408c908afdc4a7c9213c3bb144bbb9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav new file mode 100644 index 0000000..d0af62d Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav.meta new file mode 100644 index 0000000..4927baa --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 32d4b1811dda14a6cb9e059ee8ad17d2 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-01.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav new file mode 100644 index 0000000..7cf3685 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav.meta new file mode 100644 index 0000000..0527985 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: dc6614beca09347ec9b258f12d154bdd +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-02.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav new file mode 100644 index 0000000..b85c28f Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav.meta new file mode 100644 index 0000000..cbc8c1f --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 19f89c6e740e7447f9e12a8310d3e973 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-03.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav new file mode 100644 index 0000000..cbc5a82 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav.meta new file mode 100644 index 0000000..a1f83ca --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: c5e2a73ad4706440f93bf05df0b465fe +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-04.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav new file mode 100644 index 0000000..47d798b Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav.meta new file mode 100644 index 0000000..63c2306 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: b99da9a57308d4ba1bee1cf1d9038376 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-05.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav new file mode 100644 index 0000000..4547626 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav.meta new file mode 100644 index 0000000..a846627 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: a235d590ef2a04d1b85b61ef4c21337c +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238768 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-06.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav new file mode 100644 index 0000000..8673726 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav.meta new file mode 100644 index 0000000..aa63d77 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 2c5292ba5cf254919a6b9e2b18e04f49 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-07.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav new file mode 100644 index 0000000..49bedf5 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav.meta new file mode 100644 index 0000000..6bffa43 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 4e1ff8faed12a475eba9be0e46072269 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-08.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav new file mode 100644 index 0000000..33657a7 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav.meta new file mode 100644 index 0000000..405d5ce --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: ff5f85da24bc943d1abdc5760a22bc81 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238771 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-09.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav new file mode 100644 index 0000000..946e933 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav.meta new file mode 100644 index 0000000..f082c9c --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: cabfae866cab347928b74b7d0ca6bfa9 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-10.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav new file mode 100644 index 0000000..f841653 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav.meta new file mode 100644 index 0000000..bf6ab11 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: a0010a1a0c474473b81729eb770c485f +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238768 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-11.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav new file mode 100644 index 0000000..afef480 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav.meta new file mode 100644 index 0000000..82fca24 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 7478151cf36724a7dada558f746c3633 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-12.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav new file mode 100644 index 0000000..7a26064 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav.meta new file mode 100644 index 0000000..323b9d6 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 72127805eb2bc4e7fbf2e02eca266cfa +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238765 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-13.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav new file mode 100644 index 0000000..f2658c6 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav.meta new file mode 100644 index 0000000..67cc8f5 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: b6428d4edb06344ba829da4edd9967c1 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-14.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav new file mode 100644 index 0000000..0f0010b Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav.meta new file mode 100644 index 0000000..2714b5b --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 0c008ee3ee72a4362a35be25fa5de043 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-15.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav new file mode 100644 index 0000000..27d3cf1 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav.meta new file mode 100644 index 0000000..1787fc3 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 724131bc8a7f34041bb9f1701f0cb58d +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238765 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-16.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav new file mode 100644 index 0000000..742010c Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav.meta new file mode 100644 index 0000000..aab6891 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: b9eff218e132a4e76be78840eca96fb2 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-17.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav new file mode 100644 index 0000000..4098ef3 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav.meta new file mode 100644 index 0000000..6108944 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 2667a0a008b044e218b63df62e2be749 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-18.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav new file mode 100644 index 0000000..eb55f8c Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav.meta new file mode 100644 index 0000000..dcf30c3 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 81652031b64c342cc8dbc59c138d77c5 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-19.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav new file mode 100644 index 0000000..790cfb2 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav.meta new file mode 100644 index 0000000..14339b0 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 6e8772b49f34d402a90016ed445d8a2f +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238765 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-20.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav new file mode 100644 index 0000000..fc595e7 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav.meta new file mode 100644 index 0000000..6cc62df --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: ffb159a21c8a04135a5616979c828fab +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238771 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-21.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav new file mode 100644 index 0000000..ccbe000 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav.meta new file mode 100644 index 0000000..6c0a821 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: d8d04c6f80a1140db85ede568dab1f51 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-22.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav new file mode 100644 index 0000000..dde8525 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav.meta new file mode 100644 index 0000000..3abca32 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: a0ca8964c08d54c5dbebf245bdc474ca +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238768 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-23.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav new file mode 100644 index 0000000..24cfeea Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav.meta new file mode 100644 index 0000000..b95e4cd --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 657578e4be6b64dbf9b09deada272e55 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238765 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-24.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav new file mode 100644 index 0000000..575ae61 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav.meta new file mode 100644 index 0000000..96f284a --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 5fdb13d3756c84fecac96f5a2d124370 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238765 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-25.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav new file mode 100644 index 0000000..e30a809 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav.meta new file mode 100644 index 0000000..e2e5941 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 7bd6b897eb5ca4b7d88a205c4a51640c +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-26.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav new file mode 100644 index 0000000..f5c2844 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav.meta new file mode 100644 index 0000000..d221db3 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 5039414d94a6e4e70a5ab9e8833e992a +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-27.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav new file mode 100644 index 0000000..0079138 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav.meta new file mode 100644 index 0000000..fcabd38 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 79180f511d89441b9aa23ccae1992fe0 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-28.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav new file mode 100644 index 0000000..91ba591 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav.meta new file mode 100644 index 0000000..701c67b --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 80e397195ea2940b69ee7bdbded856a5 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-29.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav new file mode 100644 index 0000000..04174f2 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav.meta new file mode 100644 index 0000000..80981f9 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 130a177e727814a2ea78a886ab72213d +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-30.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav new file mode 100644 index 0000000..e034c9b Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav.meta new file mode 100644 index 0000000..03f82f9 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: cf6c0e7fbef9449c98a0cdb5ea0c4d9f +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-31.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav new file mode 100644 index 0000000..5eed347 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav.meta new file mode 100644 index 0000000..4defd96 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 29bde6326b4c34ad8a12da475f79b50a +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-32.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav new file mode 100644 index 0000000..40a68f0 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav.meta new file mode 100644 index 0000000..e25bbde --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 35fbad8cdde724f11ba6481f1e64af71 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-33.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav new file mode 100644 index 0000000..f774afb Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav.meta new file mode 100644 index 0000000..0d4bd23 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 881e3f52c86c94f26a60718d35627cd8 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-34.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav new file mode 100644 index 0000000..e13455f Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav.meta new file mode 100644 index 0000000..dc331b1 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 89e6bc608da7b47d4914f3d9c2484e48 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-35.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav new file mode 100644 index 0000000..c94d4ea Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav.meta new file mode 100644 index 0000000..3f28bc8 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: df729d213c4be44a9b55cd109f5cd4f9 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-36.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav new file mode 100644 index 0000000..8f35c0a Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav.meta new file mode 100644 index 0000000..a6f850b --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: a931da70ee74947d5a047de583170ade +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-37.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav new file mode 100644 index 0000000..0b36fc5 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav.meta new file mode 100644 index 0000000..fd75bfa --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 84e427d6b66ab4066b6a4dcd0ce819ee +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-38.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav new file mode 100644 index 0000000..392d5c6 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav.meta new file mode 100644 index 0000000..b31be4f --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 3becec1909f194046945d85ac1077772 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-39.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav new file mode 100644 index 0000000..dc9ac56 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav.meta new file mode 100644 index 0000000..1b26bb3 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 0994c12e202f342459a4212e7287f7e8 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238763 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-40.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav new file mode 100644 index 0000000..8e9f82a Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav.meta new file mode 100644 index 0000000..5ea006f --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 7e9ee6dc04a5d40d1a5dfc4beb9865e7 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238767 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-41.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav new file mode 100644 index 0000000..312b489 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav.meta new file mode 100644 index 0000000..58c942e --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 38a17a92b9d9748c6a1e67972041b833 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-42.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav new file mode 100644 index 0000000..d62ba6c Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav.meta new file mode 100644 index 0000000..65791fd --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 4b4dd7245f6104c8c8eb07ccf6b386ed +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-43.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav new file mode 100644 index 0000000..eb97cdf Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav.meta new file mode 100644 index 0000000..bd259db --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: b43d102aac6b145468dcaa94a5cccae1 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238769 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-44.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav new file mode 100644 index 0000000..fba272d Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav.meta new file mode 100644 index 0000000..d5a4e0b --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 52320e590bf774734a288886eba557ba +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238764 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-45.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav new file mode 100644 index 0000000..dedd28c Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav.meta new file mode 100644 index 0000000..c1ccbb4 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: fe0b1f9aeb45b41b089175aeeabd5d95 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238771 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-46.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav new file mode 100644 index 0000000..e0b5709 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav.meta new file mode 100644 index 0000000..8560787 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: d46323e22e74e46baa241cbf48c85671 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238770 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-47.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav new file mode 100644 index 0000000..fa6da17 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav.meta new file mode 100644 index 0000000..45af193 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 7e26c9daf4c32483b9c2790e662d3f1b +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-48.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav new file mode 100644 index 0000000..20abd78 Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav.meta new file mode 100644 index 0000000..40c4095 --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 7bef0064f8567430cac22499c6b93d4f +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-49.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav new file mode 100644 index 0000000..ff5fd7a Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav.meta new file mode 100644 index 0000000..33af10e --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav.meta @@ -0,0 +1,35 @@ +fileFormatVersion: 2 +guid: 79e6baad2fd414b82a6d49ce1568d2e5 +labels: +- Audio +- Casual +- Sound +- SFX +- Effect +timeCreated: 1453238766 +licenseType: Store +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/DM-CGS-50.wav + uploadId: 688818 diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf b/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf new file mode 100644 index 0000000..23ccf2e Binary files /dev/null and b/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf differ diff --git a/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf.meta b/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf.meta new file mode 100644 index 0000000..ee1a4df --- /dev/null +++ b/Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 97e586aae91a04999b17478d7aa1a576 +timeCreated: 1453238761 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 54116 + packageName: FREE Casual Game SFX Pack + packageVersion: 1.1 + assetPath: Assets/Casual Game Sounds U6/CasualGameSounds/license.pdf + uploadId: 688818 diff --git a/Assets/FREE CASUAL MUSIC PACK.meta b/Assets/FREE CASUAL MUSIC PACK.meta new file mode 100644 index 0000000..ef0649b --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3a31cecf7eba254c937cd8348372c90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK.meta new file mode 100644 index 0000000..979db86 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5e512414f759ac49846388d8758ef16 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav new file mode 100644 index 0000000..286b8ef Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav.meta new file mode 100644 index 0000000..0bdc02c --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: b90b002a8cd137243a4b5e955f3b220f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/BONUS 1 - EXTRA FULL TRACK/TROPICAL GAME.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX.meta new file mode 100644 index 0000000..62cfa73 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3e556bbd44edcc49983bbdaaf789da6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav new file mode 100644 index 0000000..d0b304b Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav.meta new file mode 100644 index 0000000..8bd4cde --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: b3d1ca4c18c7cdc4484ae1e93f4dcc78 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/FIREWORKS 3.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav new file mode 100644 index 0000000..dfc5daa Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav.meta new file mode 100644 index 0000000..03260dd --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 674164301a9ad2345adc93c006e87495 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POP 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav new file mode 100644 index 0000000..aee2693 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav.meta new file mode 100644 index 0000000..3fdc321 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 9a9c299152803c843b0b9ee35114535b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/POWERUP 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav new file mode 100644 index 0000000..3fc487a Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav.meta new file mode 100644 index 0000000..2db5f02 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: aefff84a12c287b4a8012f4034d9f224 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/BONUS 2 - SFX/SPECIAL COLECT 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf new file mode 100644 index 0000000..8f3e71d Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf.meta new file mode 100644 index 0000000..e6a24c4 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 37c9b352e4d596c4b9595fce9b34507e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FREE).pdf + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf new file mode 100644 index 0000000..5a19a62 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf.meta new file mode 100644 index 0000000..0b460cf --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: ebe99757608578e41a52d6127651c2f6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL GAME MUSIC (FULL VERSION).pdf + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2.meta new file mode 100644 index 0000000..7c35cdb --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31d65164ba0a34144987aad5acba396d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav new file mode 100644 index 0000000..b1a7368 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav.meta new file mode 100644 index 0000000..74dcbc2 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: ac81e521cc4fffd4cb560d4ddc70d306 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav new file mode 100644 index 0000000..d19a745 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav.meta new file mode 100644 index 0000000..d330456 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 6b99e4ca54feb1c499bd45b2c95dfde1 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 2.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav new file mode 100644 index 0000000..2199fb5 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav.meta new file mode 100644 index 0000000..7644d1a --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 845f28f9ae11b4b4181d3f627c5c4a1f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 2/CASUAL THEME 2 - LOOP 3.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3.meta new file mode 100644 index 0000000..b6841a4 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18f844ab58577be4a9da3cac954600e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav new file mode 100644 index 0000000..a4caf1f Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav.meta new file mode 100644 index 0000000..0e735fe --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 10ea0c6ecdfbe594d85161c221bce875 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (1).wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav new file mode 100644 index 0000000..9ad5e55 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav.meta new file mode 100644 index 0000000..4dd526c --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: fecae2a77cef6694caa4dd7624c09ef9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (3).wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav new file mode 100644 index 0000000..6c3f29f Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav.meta new file mode 100644 index 0000000..a7c99e9 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 390e7a99cb0560f49a1dd255b0e3b819 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 3/CASUAL THEME 3 - LOOP (4).wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4.meta new file mode 100644 index 0000000..ef86b90 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce83b34fea4c1cf4a90e18dcfab6f926 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav new file mode 100644 index 0000000..3b11ccf Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav.meta b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav.meta new file mode 100644 index 0000000..2a8e10f --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: b7da48c15e710a741842583fac3307c7 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/CASUAL THEME 4/Casual theme loop 3.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS.meta b/Assets/FREE CASUAL MUSIC PACK/OTHERS.meta new file mode 100644 index 0000000..57e3cf5 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/OTHERS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6452ca528ac5a9441b8d743da4c5b6c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav new file mode 100644 index 0000000..f9b85da Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav.meta b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav.meta new file mode 100644 index 0000000..2130d3a --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 65d2d8763ea7d5b43b4460e6d8db8f18 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/OTHERS/Casual suspense.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav new file mode 100644 index 0000000..705dd67 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav.meta new file mode 100644 index 0000000..b2fa0da --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 2a5e5cb41bb1f6d44b940f084541e17a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/OTHERS/Chinese_loop 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav new file mode 100644 index 0000000..f534e2e Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav.meta b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav.meta new file mode 100644 index 0000000..0c7015e --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 68555d1896b9aac418853a35be8b19f4 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/OTHERS/Marimba jazz.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD.meta b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD.meta new file mode 100644 index 0000000..e3a2a85 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d555077c585c2694293a1c60dd8a558f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav new file mode 100644 index 0000000..72ca117 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav.meta b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav.meta new file mode 100644 index 0000000..9d48c1e --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 937cceeb84f68d1488e4063203a3b605 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 1.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav new file mode 100644 index 0000000..16581e2 Binary files /dev/null and b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav differ diff --git a/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav.meta b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav.meta new file mode 100644 index 0000000..6d4cff3 --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 0869bcc8afadcbd4182169d7dc3e6484 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/RUNNING WILD/RUNNING WILD - LOOP 4.wav + uploadId: 553292 diff --git a/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt b/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt new file mode 100644 index 0000000..4d9cf8f --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt @@ -0,0 +1,46 @@ +Congrats! Now you have the FREE CASUAL GAME MUSIC! +Your free music solucion for casual games! +*designed by Matheus Klein. + +------>>>>> Do you want a gift? <<<<<------------ + +Subscribe here and download it: +https://lp.labmdk.com/free-gift + +------>>>>> <<<<<------------ +Leave for us your Review! + +Check It out: +--> Casual-pack-sfx +https://assetstore.unity.com/packages/audio/sound-fx/casual-pack-sfx-192848?_ga=2.42343461.1670194729.1622553216-1748727751.1620872230 + + +--> Casual-pack - Music +https://assetstore.unity.com/packages/audio/music/casual-pack-music-193478?_ga=2.42343461.1670194729.1622553216-1748727751.1620872230 + +--> CASUAL PACK COMPLETE (SFX + music) +https://assetstore.unity.com/packages/audio/music/casual-pack-complete-196775 + +--> We created this product with enthusiasm and dedication. Enjoy it! + +--> If you have any problem or if you are searching for customized assets +feel free to contact us: + +- www.labmdk.com +- contato@labmdk.com + + +-->For more, follow us: + +@matheus_klein.mk +@3dk_art + +---> Looking for an original soundtrack for your custom project? +What can I offer? + +Composing exclusive music, soundtrack, filmscore for film, video game, trailers, apps and advertisement. +Any music genre: cinematic, orchestral, Rock, metal, jazz, hip-hop, EDM, ambient, 8 bit etc. +Realistic sound. I work with virtual instruments and some real instruments. + +We're looking forward to working with you again. + diff --git a/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt.meta b/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt.meta new file mode 100644 index 0000000..8ede8ed --- /dev/null +++ b/Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e69c1b645ca49dc4aae93a9196bd9e55 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 242591 + packageName: Free Casual Music Pack + packageVersion: 1.0 + assetPath: Assets/FREE CASUAL MUSIC PACK/WELCOME_CGMUSIC.txt + uploadId: 553292 diff --git a/Assets/Materials/Player.mat b/Assets/Materials/Player.mat index bf41fa1..fe712a2 100644 --- a/Assets/Materials/Player.mat +++ b/Assets/Materials/Player.mat @@ -114,7 +114,7 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 - - _Metallic: 0 + - _Metallic: 0.3 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 diff --git a/Assets/Materials/Tower.mat b/Assets/Materials/Tower.mat index a9b7f5d..41296e0 100644 --- a/Assets/Materials/Tower.mat +++ b/Assets/Materials/Tower.mat @@ -101,7 +101,7 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 - - _Metallic: 0 + - _Metallic: 0.4 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 @@ -116,8 +116,8 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0, g: 0, b: 0, a: 1} - - _Color: {r: 0, g: 0, b: 0, a: 1} + - _BaseColor: {r: 0.98039216, g: 0.40243432, b: 0.050980378, a: 1} + - _Color: {r: 0.98039216, g: 0.4024343, b: 0.05098036, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Materials/death.mat b/Assets/Materials/death.mat index 90e8da3..1428607 100644 --- a/Assets/Materials/death.mat +++ b/Assets/Materials/death.mat @@ -101,7 +101,7 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 - - _Metallic: 0 + - _Metallic: 0.3 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 @@ -116,8 +116,8 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 0, b: 0.05529642, a: 1} - - _Color: {r: 1, g: 0, b: 0.0552964, a: 1} + - _BaseColor: {r: 0, g: 0, b: 0, a: 1} + - _Color: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Materials/safe.mat b/Assets/Materials/safe.mat index 28a898e..f8cd6ba 100644 --- a/Assets/Materials/safe.mat +++ b/Assets/Materials/safe.mat @@ -101,7 +101,7 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 - - _Metallic: 0 + - _Metallic: 0.3 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 @@ -116,8 +116,8 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.9951428, g: 1, b: 0, a: 1} - - _Color: {r: 0.99514276, g: 1, b: 0, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Resources/Backgrounds.meta b/Assets/Resources/Backgrounds.meta new file mode 100644 index 0000000..fe686b1 --- /dev/null +++ b/Assets/Resources/Backgrounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d5f0ed9b7c1b694e9a304cb932b0f35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Backgrounds/1.png b/Assets/Resources/Backgrounds/1.png new file mode 100644 index 0000000..053f8c6 Binary files /dev/null and b/Assets/Resources/Backgrounds/1.png differ diff --git a/Assets/Resources/Backgrounds/1.png.meta b/Assets/Resources/Backgrounds/1.png.meta new file mode 100644 index 0000000..c09b624 --- /dev/null +++ b/Assets/Resources/Backgrounds/1.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: ef43c95c1182a584b9c7b447b38b7e2f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 0 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Backgrounds/11.png b/Assets/Resources/Backgrounds/11.png new file mode 100644 index 0000000..d981de6 Binary files /dev/null and b/Assets/Resources/Backgrounds/11.png differ diff --git a/Assets/Resources/Backgrounds/11.png.meta b/Assets/Resources/Backgrounds/11.png.meta new file mode 100644 index 0000000..95b1a31 --- /dev/null +++ b/Assets/Resources/Backgrounds/11.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 0e80aeef40cacfd48992718e49d75fac +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 0 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Backgrounds/2.png b/Assets/Resources/Backgrounds/2.png new file mode 100644 index 0000000..c4cc0a5 Binary files /dev/null and b/Assets/Resources/Backgrounds/2.png differ diff --git a/Assets/Resources/Backgrounds/2.png.meta b/Assets/Resources/Backgrounds/2.png.meta new file mode 100644 index 0000000..5984afb --- /dev/null +++ b/Assets/Resources/Backgrounds/2.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 1f9987f7b014f424e9fcea3949340146 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 0 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Backgrounds/22.png b/Assets/Resources/Backgrounds/22.png new file mode 100644 index 0000000..a860d0d Binary files /dev/null and b/Assets/Resources/Backgrounds/22.png differ diff --git a/Assets/Resources/Backgrounds/22.png.meta b/Assets/Resources/Backgrounds/22.png.meta new file mode 100644 index 0000000..142b2ff --- /dev/null +++ b/Assets/Resources/Backgrounds/22.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: a222753f31b85754fa676fcbfa0b3745 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 0 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Backgrounds/33.png b/Assets/Resources/Backgrounds/33.png new file mode 100644 index 0000000..b88b299 Binary files /dev/null and b/Assets/Resources/Backgrounds/33.png differ diff --git a/Assets/Resources/Backgrounds/33.png.meta b/Assets/Resources/Backgrounds/33.png.meta new file mode 100644 index 0000000..f2bae27 --- /dev/null +++ b/Assets/Resources/Backgrounds/33.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: ca7d650c5c2766141a196fd942f99a8f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 0 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/DOTweenSettings.asset b/Assets/Resources/DOTweenSettings.asset deleted file mode 100644 index e7efc69..0000000 --- a/Assets/Resources/DOTweenSettings.asset +++ /dev/null @@ -1,54 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 16995157, guid: a811bde74b26b53498b4f6d872b09b6d, type: 3} - m_Name: DOTweenSettings - m_EditorClassIdentifier: DOTween.dll::DG.Tweening.Core.DOTweenSettings - useSafeMode: 1 - safeModeOptions: - logBehaviour: 2 - nestedTweenFailureBehaviour: 0 - timeScale: 1 - unscaledTimeScale: 1 - useSmoothDeltaTime: 0 - maxSmoothUnscaledTime: 0.15 - rewindCallbackMode: 0 - showUnityEditorReport: 0 - logBehaviour: 0 - drawGizmos: 1 - defaultRecyclable: 0 - defaultAutoPlay: 3 - defaultUpdateType: 0 - defaultTimeScaleIndependent: 0 - defaultEaseType: 6 - defaultEaseOvershootOrAmplitude: 1.70158 - defaultEasePeriod: 0 - defaultAutoKill: 1 - defaultLoopType: 0 - debugMode: 0 - debugStoreTargetId: 1 - showPreviewPanel: 1 - storeSettingsLocation: 0 - modules: - showPanel: 0 - audioEnabled: 0 - physicsEnabled: 1 - physics2DEnabled: 0 - spriteEnabled: 0 - uiEnabled: 1 - textMeshProEnabled: 0 - tk2DEnabled: 0 - deAudioEnabled: 0 - deUnityExtendedEnabled: 0 - epoOutlineEnabled: 0 - createASMDEF: 0 - showPlayingTweens: 0 - showPausedTweens: 0 diff --git a/Assets/Resources/PlatformPrefabs/Platform.prefab b/Assets/Resources/PlatformPrefabs/Platform.prefab index c9eb0ca..d1805e4 100644 --- a/Assets/Resources/PlatformPrefabs/Platform.prefab +++ b/Assets/Resources/PlatformPrefabs/Platform.prefab @@ -11,7 +11,7 @@ GameObject: - component: {fileID: 9201405920613570572} - component: {fileID: 2591802634286721888} - component: {fileID: 6988014389520471931} - - component: {fileID: 1911176482234220453} + - component: {fileID: 5987058102068268703} m_Layer: 0 m_Name: Circle.004 m_TagString: Untagged @@ -91,7 +91,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &1911176482234220453 +--- !u!64 &5987058102068268703 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -110,7 +110,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &2351581554058937824 @@ -124,7 +124,7 @@ GameObject: - component: {fileID: 6205454822984919614} - component: {fileID: 3037293388674025183} - component: {fileID: 77997371020820980} - - component: {fileID: 9132430338475437239} + - component: {fileID: 8650711679525865327} m_Layer: 0 m_Name: Circle.003 m_TagString: Untagged @@ -204,7 +204,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &9132430338475437239 +--- !u!64 &8650711679525865327 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -223,7 +223,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &2944237967182333419 @@ -237,7 +237,6 @@ GameObject: - component: {fileID: 1704598761677686259} - component: {fileID: 1300604350522770227} - component: {fileID: 4192668034414949110} - - component: {fileID: 7164618086408823861} m_Layer: 0 m_Name: Cylinder m_TagString: Untagged @@ -317,29 +316,6 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!136 &7164618086408823861 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2944237967182333419} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5000001 - m_Height: 2 - m_Direction: 1 - m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} --- !u!1 &3473090991547402070 GameObject: m_ObjectHideFlags: 0 @@ -351,7 +327,7 @@ GameObject: - component: {fileID: 3770506113860492011} - component: {fileID: 4876544692538140891} - component: {fileID: 4236828285991287248} - - component: {fileID: 7443224851660115035} + - component: {fileID: 7781462606298619948} m_Layer: 0 m_Name: Circle.005 m_TagString: Untagged @@ -431,7 +407,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &7443224851660115035 +--- !u!64 &7781462606298619948 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -450,7 +426,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &4499242860284929097 @@ -464,7 +440,7 @@ GameObject: - component: {fileID: 1140139170388772381} - component: {fileID: 6876605182136312050} - component: {fileID: 3325281704305268000} - - component: {fileID: 6607525824029435696} + - component: {fileID: 7906856544006370470} m_Layer: 0 m_Name: Circle.002 m_TagString: Untagged @@ -544,7 +520,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &6607525824029435696 +--- !u!64 &7906856544006370470 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -563,7 +539,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &4927776690971609389 @@ -577,7 +553,7 @@ GameObject: - component: {fileID: 7394920808921691318} - component: {fileID: 7353529831766104294} - component: {fileID: 4441878034651329999} - - component: {fileID: 2799303984220334285} + - component: {fileID: 5796670566650299916} m_Layer: 0 m_Name: Circle.006 m_TagString: Untagged @@ -657,7 +633,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &2799303984220334285 +--- !u!64 &5796670566650299916 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -676,7 +652,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &5879459011112232516 @@ -690,7 +666,7 @@ GameObject: - component: {fileID: 4135517938252508798} - component: {fileID: 8504129623985034772} - component: {fileID: 721555556695002580} - - component: {fileID: 6728599403587278835} + - component: {fileID: 6496082068853416386} m_Layer: 0 m_Name: Circle m_TagString: Untagged @@ -770,7 +746,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &6728599403587278835 +--- !u!64 &6496082068853416386 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -789,7 +765,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &6228166988873247203 @@ -803,7 +779,7 @@ GameObject: - component: {fileID: 6188544198554048919} - component: {fileID: 2807700111910212844} - component: {fileID: 8798934615784666207} - - component: {fileID: 6310862252339043381} + - component: {fileID: 1487198312995536644} m_Layer: 0 m_Name: Circle.007 m_TagString: Untagged @@ -883,7 +859,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &6310862252339043381 +--- !u!64 &1487198312995536644 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -902,7 +878,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &7003719052520238810 @@ -916,7 +892,7 @@ GameObject: - component: {fileID: 7592998567654863461} - component: {fileID: 3888426572158825287} - component: {fileID: 901783845651239246} - - component: {fileID: 8926849071004864761} + - component: {fileID: 7971282443249539885} m_Layer: 0 m_Name: Circle.001 m_TagString: Untagged @@ -996,7 +972,7 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &8926849071004864761 +--- !u!64 &7971282443249539885 MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1015,7 +991,7 @@ MeshCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 5 - m_Convex: 0 + m_Convex: 1 m_CookingOptions: 30 m_Mesh: {fileID: -2124705421725058983, guid: b1c41e022ae344de08711565989f6bfe, type: 3} --- !u!1 &7877931731535294895 @@ -1102,5 +1078,5 @@ BoxCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 - m_Size: {x: 2, y: 0.048438013, z: 2} - m_Center: {x: 0, y: -0.06969872, z: 0} + m_Size: {x: 2, y: 0.038609706, z: 2} + m_Center: {x: 0, y: -0.12375437, z: 0} diff --git a/Assets/Resources/Sounds/MyAudiioMixture.mixer b/Assets/Resources/Sounds/MyAudiioMixture.mixer index a3845cf..d11bd3e 100644 --- a/Assets/Resources/Sounds/MyAudiioMixture.mixer +++ b/Assets/Resources/Sounds/MyAudiioMixture.mixer @@ -68,7 +68,8 @@ AudioMixerSnapshotController: m_Name: Snapshot m_AudioMixer: {fileID: 24100000} m_SnapshotID: b125f6022dd0a104b9b54efeb28d266e - m_FloatValues: {} + m_FloatValues: + caac7c9334139f54abe11e5b47768405: -19.928473 m_TransitionOverrides: {} --- !u!244 &872118261864561489 AudioMixerEffectController: diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity index 57e41e5..8f965ad 100644 --- a/Assets/Scenes/GameScene.unity +++ b/Assets/Scenes/GameScene.unity @@ -26,7 +26,7 @@ RenderSettings: m_AmbientIntensity: 1 m_AmbientMode: 0 m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_SkyboxMaterial: {fileID: 2100000, guid: 0d723ddb1aa27eb4fbc0c3c5e8be7e79, type: 2} m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 @@ -256,6 +256,108 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 21876040} m_CullTransparentMesh: 1 +--- !u!1 &63427161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 63427162} + - component: {fileID: 63427165} + - component: {fileID: 63427164} + - component: {fileID: 63427163} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &63427162 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 933431911} + m_Father: {fileID: 330585546} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &63427163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &63427164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 2 + m_ReferenceResolution: {x: 1, y: 1} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &63427165 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 330585545} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 --- !u!1 &110731545 GameObject: m_ObjectHideFlags: 0 @@ -300,8 +402,8 @@ AudioSource: OutputAudioMixerGroup: {fileID: 936482137231856778, guid: c2e028ac02ea57942bcfe586e0fda8b0, type: 2} m_audioClip: {fileID: 0} m_Resource: {fileID: 0} - m_PlayOnAwake: 1 - m_Volume: 1 + m_PlayOnAwake: 0 + m_Volume: 0.8 m_Pitch: 1 Loop: 0 Mute: 0 @@ -1472,7 +1574,7 @@ ParticleSystem: rateOverTime: serializedVersion: 2 minMaxState: 0 - scalar: 2 + scalar: 4 minScalar: 10 maxCurve: serializedVersion: 2 @@ -10319,7 +10421,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0.000061035156} + m_AnchoredPosition: {x: 0, y: 0.00012207031} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &269796311 @@ -10393,10 +10495,10 @@ RectTransform: - {fileID: 158888001} m_Father: {fileID: 1465549299} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 9.127052, y: 359.39343} - m_SizeDelta: {x: 554.16, y: 170.4264} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 9.127052, y: -230.60657} + m_SizeDelta: {x: 554.16, y: 170.42639} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &327139368 MonoBehaviour: @@ -10473,8 +10575,8 @@ Camera: m_GameObject: {fileID: 330585543} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5943396, g: 0.5943396, b: 0.5943396, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 @@ -10527,7 +10629,8 @@ Transform: m_LocalPosition: {x: 0, y: 2, z: -6.7} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 63427162} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &330585547 @@ -10618,6 +10721,7 @@ GameObject: - component: {fileID: 341853336} - component: {fileID: 341853335} - component: {fileID: 341853334} + - component: {fileID: 341853337} m_Layer: 5 m_Name: TapToStartBtn m_TagString: Untagged @@ -10632,18 +10736,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 341853332} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1613812280} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -650.5} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 800, y: 450} - m_Pivot: {x: 0.5, y: 0.5} + m_Pivot: {x: 0.5, y: 0} --- !u!114 &341853334 MonoBehaviour: m_ObjectHideFlags: 0 @@ -10726,6 +10830,28 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 341853332} m_CullTransparentMesh: 1 +--- !u!95 &341853337 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341853332} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 5488d73ad5bec9d4980d6e72427e2bec, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &343573092 GameObject: m_ObjectHideFlags: 0 @@ -10777,6 +10903,7 @@ MonoBehaviour: pool: {fileID: 1073116393} manager: {fileID: 1850425826} inputReader: {fileID: 11400000, guid: dfe12148dc4d7ea46b49e490c1b1aad5, type: 2} + gameSession: {fileID: 11400000, guid: 166236fc288d5a343ba6dd8ab704e653, type: 2} player: {fileID: 581798942} audioController: {fileID: 1783072555} gameScreenView: {fileID: 861211733} @@ -10949,13 +11076,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 410087039} serializedVersion: 2 - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalRotation: {x: 0.16773126, y: -0.25488698, z: 0.044943444, w: 0.95125127} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} + m_LocalEulerAnglesHint: {x: 20, y: -30, z: 0} --- !u!114 &410087042 MonoBehaviour: m_ObjectHideFlags: 0 @@ -10999,6 +11126,8 @@ GameObject: - component: {fileID: 581798937} - component: {fileID: 581798941} - component: {fileID: 581798942} + - component: {fileID: 581798944} + - component: {fileID: 581798943} m_Layer: 0 m_Name: Player m_TagString: Player @@ -11146,6 +11275,179 @@ MonoBehaviour: splashParent: {fileID: 1850425825} deadParticle: {fileID: 239977915} jumpParticle: {fileID: 185655302} + cinemachineImpulseSource: {fileID: 581798944} +--- !u!96 &581798943 +TrailRenderer: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7e2e81cc0b156ce419830371ca3c39d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Time: 0.1 + m_PreviewTimeScale: 1 + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1027298 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MinVertexDistance: 0 + m_Autodestruct: 0 + m_Emitting: 1 + m_ApplyActiveColorSpace: 1 +--- !u!114 &581798944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 180ecf9b41d478f468eb3e9083753217, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineImpulseSource + ImpulseDefinition: + ImpulseChannel: 1 + ImpulseShape: 2 + CustomImpulseShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ImpulseDuration: 0.2 + ImpulseType: 0 + DissipationRate: 0.25 + RawSignal: {fileID: 0} + AmplitudeGain: 1 + FrequencyGain: 1 + RepeatMode: 0 + Randomize: 1 + TimeEnvelope: + AttackShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + DecayShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AttackTime: 0 + SustainTime: 0.2 + DecayTime: 0.7 + ScaleWithImpact: 1 + HoldForever: 0 + ImpactRadius: 100 + DirectionMode: 0 + DissipationMode: 2 + DissipationDistance: 100 + PropagationSpeed: 343 + DefaultVelocity: {x: 0, y: -1, z: 0} --- !u!1 &670778192 GameObject: m_ObjectHideFlags: 0 @@ -11560,6 +11862,7 @@ GameObject: - component: {fileID: 786621120} - component: {fileID: 786621122} - component: {fileID: 786621121} + - component: {fileID: 786621123} m_Layer: 5 m_Name: GameName m_TagString: Untagged @@ -11581,11 +11884,11 @@ RectTransform: m_Children: [] m_Father: {fileID: 1613812280} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 675.5} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -84.5} m_SizeDelta: {x: 800, y: 400} - m_Pivot: {x: 0.5, y: 0.5} + m_Pivot: {x: 0.5, y: 1} --- !u!114 &786621121 MonoBehaviour: m_ObjectHideFlags: 0 @@ -11624,6 +11927,28 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 786621119} m_CullTransparentMesh: 1 +--- !u!95 &786621123 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786621119} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: c307b377dfd77f1408cc88056fb6214e, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &791472098 GameObject: m_ObjectHideFlags: 0 @@ -11813,10 +12138,10 @@ RectTransform: - {fileID: 1465549299} m_Father: {fileID: 791472102} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1080, y: 1920} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &861211733 MonoBehaviour: @@ -11891,6 +12216,7 @@ GameObject: - component: {fileID: 926831881} - component: {fileID: 926831880} - component: {fileID: 926831879} + - component: {fileID: 926831883} m_Layer: 0 m_Name: FollowPlayerCamera m_TagString: Untagged @@ -12004,7 +12330,31 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 20, y: 0, z: 0} ---- !u!1 &970885936 +--- !u!114 &926831883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 926831878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 00b2d199b96b516448144ab30fb26aed, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineImpulseListener + ApplyAfter: 2 + ChannelMask: 1 + Gain: 1 + Use2DDistance: 0 + UseCameraSpace: 1 + SignalCombinationMode: 0 + ReactionSettings: + m_SecondaryNoise: {fileID: 0} + AmplitudeGain: 1 + FrequencyGain: 1 + Duration: 1 + m_NoiseOffsets: {x: 0, y: 0, z: 0} +--- !u!1 &933431910 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -12012,57 +12362,57 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 970885937} - - component: {fileID: 970885939} - - component: {fileID: 970885938} + - component: {fileID: 933431911} + - component: {fileID: 933431913} + - component: {fileID: 933431912} m_Layer: 5 - m_Name: StartPanel + m_Name: backgroundImage m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &970885937 +--- !u!224 &933431911 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 970885936} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 933431910} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1613812280} + m_Father: {fileID: 63427162} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: 1920, y: 1920} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &970885938 +--- !u!114 &933431912 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 970885936} + m_GameObject: {fileID: 933431910} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.078431375} + m_Color: {r: 0.7924528, g: 0.7924528, b: 0.7924528, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: 0e80aeef40cacfd48992718e49d75fac, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -12071,13 +12421,13 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &970885939 +--- !u!222 &933431913 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 970885936} + m_GameObject: {fileID: 933431910} m_CullTransparentMesh: 1 --- !u!1 &1002942599 GameObject: @@ -12328,10 +12678,10 @@ RectTransform: - {fileID: 1320482638} m_Father: {fileID: 861211732} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1080, y: 1920} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1148039065 GameObject: @@ -12366,9 +12716,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 1465549299} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 259.12653, y: -344.60657} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -280.87347, y: 245.39343} m_SizeDelta: {x: 200, y: 200} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1148039067 @@ -12623,10 +12973,10 @@ RectTransform: m_Children: [] m_Father: {fileID: 1088536452} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 655} - m_SizeDelta: {x: 235.2485, y: 79.5344} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -240} + m_SizeDelta: {x: 235.2485, y: 79.534424} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1320482639 MonoBehaviour: @@ -12762,10 +13112,10 @@ RectTransform: - {fileID: 1942266449} m_Father: {fileID: 861211732} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -0.000030518} - m_SizeDelta: {x: 980, y: 920} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -100, y: -1000} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1416564334 GameObject: @@ -12800,11 +13150,11 @@ RectTransform: m_Children: [] m_Father: {fileID: 1088536452} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 377, y: 812} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -88, y: -73} m_SizeDelta: {x: 150, y: 150} - m_Pivot: {x: 0.5, y: 0.5} + m_Pivot: {x: 1, y: 1} --- !u!114 &1416564336 MonoBehaviour: m_ObjectHideFlags: 0 @@ -12923,10 +13273,10 @@ RectTransform: - {fileID: 1311440875} m_Father: {fileID: 861211732} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1080, y: 1180} + m_SizeDelta: {x: 0, y: -750} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1548353693 GameObject: @@ -12961,10 +13311,10 @@ RectTransform: - {fileID: 670778193} m_Father: {fileID: 1396549893} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0.0005264282, y: 230.09009} - m_SizeDelta: {x: 554.16, y: 170.4264} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0.0005264282, y: -229.90991} + m_SizeDelta: {x: 554.16, y: 170.42639} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1548353695 MonoBehaviour: @@ -13032,15 +13382,14 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 970885937} - {fileID: 786621120} - {fileID: 341853333} m_Father: {fileID: 861211732} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1080, y: 1920} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1783072553 GameObject: @@ -13090,10 +13439,11 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::AudioController MusicSource: {fileID: 110731547} SFXSource: {fileID: 694958382} - backgroundMusicClip: {fileID: 8300000, guid: f32f525d79cea2d4792a0255a8199de5, type: 3} - jumpClip: {fileID: 8300000, guid: 7a08259816a815c4880f29b6934d602e, type: 3} - deathClip: {fileID: 8300000, guid: 37aed74757072c5459447a997d221fad, type: 3} - BtnPressedClip: {fileID: 8300000, guid: e1a8921df70cc324bad7155d94a07df6, type: 3} + backgroundMusicClip: {fileID: 8300000, guid: b7da48c15e710a741842583fac3307c7, type: 3} + jumpClip: {fileID: 8300000, guid: e1a8921df70cc324bad7155d94a07df6, type: 3} + deathClip: {fileID: 8300000, guid: 7e26c9daf4c32483b9c2790e662d3f1b, type: 3} + btnPressedClip: {fileID: 8300000, guid: ffb159a21c8a04135a5616979c828fab, type: 3} + scoredClip: {fileID: 8300000, guid: 0c008ee3ee72a4362a35be25fa5de043, type: 3} --- !u!1 &1829305575 GameObject: m_ObjectHideFlags: 0 @@ -13127,9 +13477,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 1396549893} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -250, y: -215.30334} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 240, y: 244.69666} m_SizeDelta: {x: 200, y: 200} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1829305577 @@ -13247,9 +13597,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 1465549299} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -240.87347, y: -344.60657} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 299.12653, y: 245.39343} m_SizeDelta: {x: 200, y: 200} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1849045416 @@ -13412,9 +13762,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 1396549893} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 250, y: -215.30334} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -240, y: 244.69666} m_SizeDelta: {x: 200, y: 200} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1942266450 diff --git a/Assets/Scripts/AudioScripts/AudioController.cs b/Assets/Scripts/AudioScripts/AudioController.cs index 6fcb15b..60a1b66 100644 --- a/Assets/Scripts/AudioScripts/AudioController.cs +++ b/Assets/Scripts/AudioScripts/AudioController.cs @@ -1,6 +1,7 @@ using UnityEngine; +using VContainer; -public class AudioController : MonoBehaviour +public class AudioController : MonoBehaviour, IAudioController { [SerializeField] private AudioSource MusicSource; [SerializeField] private AudioSource SFXSource; @@ -8,7 +9,10 @@ public class AudioController : MonoBehaviour public AudioClip backgroundMusicClip; public AudioClip jumpClip; public AudioClip deathClip; - public AudioClip BtnPressedClip; + public AudioClip btnPressedClip; + public AudioClip scoredClip; + + [Inject] private IGameSession IgameSession; private void Start() { @@ -17,8 +21,40 @@ public class AudioController : MonoBehaviour MusicSource.Play(); } + public void PlaySfx(AudioClip clip) { + if (!IgameSession.hasGameStarted) return; + SFXSource.ignoreListenerPause = true; SFXSource.PlayOneShot(clip); } + + public void PlayJumpSound() + { + PlaySfx(jumpClip); + } + + public void PlayDeathSound() + { + PlaySfx(deathClip); + } + + public void PlayBtnPressedSound() + { + PlaySfx(btnPressedClip); + } + + public void PlayScoredSound() + { + PlaySfx(scoredClip); + } +} + +public interface IAudioController +{ + void PlayJumpSound(); + void PlayDeathSound(); + void PlayBtnPressedSound(); + void PlayScoredSound(); + } diff --git a/Assets/Scripts/Input/IInputReader.cs b/Assets/Scripts/Input/IInputReader.cs index 9cf8e0a..be64b08 100644 --- a/Assets/Scripts/Input/IInputReader.cs +++ b/Assets/Scripts/Input/IInputReader.cs @@ -5,7 +5,9 @@ public interface IInputReader { event Action OnDragValueChanged; bool isMouseButtonPressed { get; } - bool blockedInput { get; set; } Vector2 dragInput { get; } + void LockInput(); + void UnlockInput(); + } diff --git a/Assets/Scripts/Input/InputReaderSO.cs b/Assets/Scripts/Input/InputReaderSO.cs index 7c8fe0a..46fbb57 100644 --- a/Assets/Scripts/Input/InputReaderSO.cs +++ b/Assets/Scripts/Input/InputReaderSO.cs @@ -15,10 +15,9 @@ public class InputReaderSO : ScriptableObject, GameInputAction.IPlayerActions , } public bool isMouseButtonPressed { get;private set; } - public bool blockedInput { get; set; } + private bool blockedInput = false; private Vector2 _dragInput; - private GameInputAction action; private void OnEnable() @@ -44,7 +43,16 @@ public class InputReaderSO : ScriptableObject, GameInputAction.IPlayerActions , public void OnMouseClicked(InputAction.CallbackContext context) { - if (blockedInput) return; isMouseButtonPressed = context.ReadValue() == 1 ? true : false; } + + public void LockInput() + { + blockedInput = true; + } + + public void UnlockInput() + { + blockedInput = false; + } } diff --git a/Assets/Scripts/LifeTimeScope/GameFlowController.cs b/Assets/Scripts/LifeTimeScope/GameFlowController.cs deleted file mode 100644 index 82083e1..0000000 --- a/Assets/Scripts/LifeTimeScope/GameFlowController.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using UnityEngine; -using VContainer.Unity; - -public class GameFlowController:IStartable -{ - private readonly Player _player; - private readonly StartScreenController _startScreenController; - private readonly GameScreenController _gameScreenController; - private readonly ScoreService _scoreService; - private readonly PauseScreenController _pauseScreenController; - private readonly DeathScreenController _deathScreenController; - private readonly IInputReader InputReader; - - public GameFlowController( - DeathScreenController deathScreenController, - Player player, - StartScreenController startScreenController, - GameScreenController gameScreenController, - ScoreService scoreService, - PauseScreenController pauseScreenController, - IInputReader inputReader) - { - _deathScreenController = deathScreenController; - _player = player; - _startScreenController = startScreenController; - _gameScreenController = gameScreenController; - _scoreService = scoreService; - _pauseScreenController = pauseScreenController; - InputReader = inputReader; - } - - public void Start() - { - Debug.Log("GameFlowController Started"); - HookEvents(); - } - - void HookEvents() - { - _startScreenController.OnStartPressed += HandleGameStart; - _gameScreenController.OnPausePressed += HandleGamePause; - _pauseScreenController.OnResumePressed += HandleGameResume; - _pauseScreenController.OnRestartPressed += HandleGameRestart; - _deathScreenController.OnRestartPressed += HandleGameRestart; - _deathScreenController.OnExitPressed += HandleGameExit; - - } - - private void HandleGameRestart() - { - throw new NotImplementedException(); - } - - private void HandleGameExit() - { - throw new NotImplementedException(); - } - - private void HandleGameResume() - { - throw new NotImplementedException(); - } - - private void HandleGamePause() - { - throw new NotImplementedException(); - } - - private void HandleGameStart() - { - throw new NotImplementedException(); - } -} diff --git a/Assets/Scripts/LifeTimeScope/GameFlowController.cs.meta b/Assets/Scripts/LifeTimeScope/GameFlowController.cs.meta deleted file mode 100644 index 4b62bfa..0000000 --- a/Assets/Scripts/LifeTimeScope/GameFlowController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 3b7284c012c95d3408acb8cc1914fe31 \ No newline at end of file diff --git a/Assets/Scripts/LifeTimeScope/GameLifetimeScope.cs b/Assets/Scripts/LifeTimeScope/GameLifetimeScope.cs index 182de37..75afca9 100644 --- a/Assets/Scripts/LifeTimeScope/GameLifetimeScope.cs +++ b/Assets/Scripts/LifeTimeScope/GameLifetimeScope.cs @@ -8,6 +8,7 @@ public class GameLifetimeScope : LifetimeScope [SerializeField] private PlatformPool pool; [SerializeField] private PlatformManager manager; [SerializeField] private InputReaderSO inputReader; + [SerializeField] private GameSession gameSession; [SerializeField] private Player player; [SerializeField] private AudioController audioController; @@ -21,16 +22,17 @@ public class GameLifetimeScope : LifetimeScope builder.RegisterComponent(pool).As(); builder.RegisterComponent(manager).As(); builder.RegisterInstance(inputReader).As(); - builder.Register(Lifetime.Singleton); - builder.RegisterComponent(player); - builder.RegisterComponent(audioController); + builder.Register(Lifetime.Singleton).As(); + builder.RegisterInstance(gameSession).As(); + builder.RegisterComponent(player).As(); + builder.RegisterComponent(audioController).As().AsSelf(); - builder.Register(Lifetime.Singleton).WithParameter(gameScreenView); - builder.Register(Lifetime.Singleton).WithParameter(startScreenView); - builder.Register(Lifetime.Singleton).WithParameter(deathScreenView); - builder.Register(Lifetime.Singleton).WithParameter(pauseScreenView); - - builder.RegisterEntryPoint(Lifetime.Singleton); + + builder.RegisterEntryPoint(Lifetime.Singleton).WithParameter(startScreenView); + builder.Register(Lifetime.Singleton).WithParameter(gameScreenView).As(); + builder.Register(Lifetime.Singleton).WithParameter(pauseScreenView).As(); + builder.Register(Lifetime.Singleton).WithParameter(deathScreenView).As(); + } } diff --git a/Assets/Scripts/LifeTimeScope/GameSession.asset b/Assets/Scripts/LifeTimeScope/GameSession.asset new file mode 100644 index 0000000..85c4528 --- /dev/null +++ b/Assets/Scripts/LifeTimeScope/GameSession.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b87b1e9ef0f8a8f4d8c0488709157211, type: 3} + m_Name: GameSession + m_EditorClassIdentifier: Assembly-CSharp::GameSession diff --git a/Assets/Resources/DOTweenSettings.asset.meta b/Assets/Scripts/LifeTimeScope/GameSession.asset.meta similarity index 79% rename from Assets/Resources/DOTweenSettings.asset.meta rename to Assets/Scripts/LifeTimeScope/GameSession.asset.meta index 9fd9741..276e631 100644 --- a/Assets/Resources/DOTweenSettings.asset.meta +++ b/Assets/Scripts/LifeTimeScope/GameSession.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8de815fe159214b4d8caf021e2561f73 +guid: 166236fc288d5a343ba6dd8ab704e653 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/Scripts/LifeTimeScope/GameSession.cs b/Assets/Scripts/LifeTimeScope/GameSession.cs new file mode 100644 index 0000000..3e36b49 --- /dev/null +++ b/Assets/Scripts/LifeTimeScope/GameSession.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +[CreateAssetMenu(fileName ="GameSession", menuName ="Scriptable Objects/GameSession") ] +public class GameSession : ScriptableObject,IGameSession +{ + public bool showStartScreen { get; set; } = false; + public bool hasGameStarted { get; set; } = false; + + private void OnEnable() + { + showStartScreen = true; + hasGameStarted = false; + } + + private void OnDisable() + { + showStartScreen = false; + hasGameStarted = false; + } +} + +public interface IGameSession +{ + bool showStartScreen { get; set; } + bool hasGameStarted { get; set; } +} diff --git a/Assets/Scripts/LifeTimeScope/GameSession.cs.meta b/Assets/Scripts/LifeTimeScope/GameSession.cs.meta new file mode 100644 index 0000000..3838350 --- /dev/null +++ b/Assets/Scripts/LifeTimeScope/GameSession.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b87b1e9ef0f8a8f4d8c0488709157211 \ No newline at end of file diff --git a/Assets/Scripts/PlatformScripts/Platform.cs b/Assets/Scripts/PlatformScripts/Platform.cs index b1405d3..8098c20 100644 --- a/Assets/Scripts/PlatformScripts/Platform.cs +++ b/Assets/Scripts/PlatformScripts/Platform.cs @@ -19,9 +19,8 @@ public class Platform : MonoBehaviour, IPlatform [Inject] Player player; [Inject] IPool pool; [Inject] IPlatformManager platformManager; - [Inject] ScoreService scoreService; - - + [Inject] IScoreService IscoreService; + [Inject] IAudioController IaudioController; public void SetPlatformRule(IPlatformRule platformRule) { _platformRule = platformRule; @@ -34,7 +33,9 @@ public class Platform : MonoBehaviour, IPlatform { hasAchievedScore = true; Debug.Log("Score Increased"); - scoreService.AddScore(); + IscoreService.AddScore(); + IaudioController.PlayScoredSound(); + } } diff --git a/Assets/Scripts/PlatformScripts/PlatformManager.cs b/Assets/Scripts/PlatformScripts/PlatformManager.cs index 130d939..ec62a86 100644 --- a/Assets/Scripts/PlatformScripts/PlatformManager.cs +++ b/Assets/Scripts/PlatformScripts/PlatformManager.cs @@ -50,7 +50,7 @@ public class PlatformManager : MonoBehaviour,IPlatformManager transform.Rotate(Vector3.up * rotAmount); #elif UNITY_IOS || UNITY_ANDROID - transform.Rotate(Vector3.up * rotAmount); + transform.Rotate(Vector3.up * rotAmount); #endif diff --git a/Assets/Scripts/PlayerScripts/Player.cs b/Assets/Scripts/PlayerScripts/Player.cs index c99ffbd..db04ece 100644 --- a/Assets/Scripts/PlayerScripts/Player.cs +++ b/Assets/Scripts/PlayerScripts/Player.cs @@ -1,3 +1,5 @@ +using System.Collections; +using Unity.Cinemachine; using UnityEngine; using VContainer; @@ -9,35 +11,34 @@ public class Player : MonoBehaviour, IPlayer [SerializeField] private Transform splashParent; [SerializeField] private ParticleSystem deadParticle; [SerializeField] private ParticleSystem jumpParticle; + [SerializeField] private CinemachineImpulseSource cinemachineImpulseSource; public bool isDead { get; private set; } - - [Inject] private IInputReader inputReader; - [Inject] private DeathScreenController deathScreenController; + [Inject] private IDeathScreenController IdeathScreenController; + [Inject] private IInputReader IinputReader; + [Inject] private IAudioController IaudioController; private void Start() { isDead = false; } + private void OnCollisionEnter(Collision collision) { ShowAndHideSplash(collision); if(isDead) return; - if (collision.gameObject.CompareTag("Safe")) + if (collision.gameObject.CompareTag("Safe") && rb.linearVelocity.y <=0.5f) { rb.linearVelocity = Vector3.up * jumpForce; jumpParticle.Play(); + IaudioController.PlayJumpSound(); } else if(collision.gameObject.CompareTag("Death")) { - isDead = true; - deadParticle.Play(); - this.GetComponent().enabled = false; - inputReader.blockedInput = true; - deathScreenController.ShowDeathScreen(); + Die(); } } @@ -47,8 +48,26 @@ public class Player : MonoBehaviour, IPlayer ContactPoint contact = collision.contacts[0]; Vector3 surfacePoint = new Vector3(contact.point.x, splashYPos, contact.point.z); GameObject instancedSplash = Instantiate(splashObject, surfacePoint, splashObject.transform.rotation, splashParent); + instancedSplash.transform.localScale = new Vector3(Random.Range(0.08f, 0.1f), Random.Range(0.08f, 0.1f),1); Destroy(instancedSplash, 2f); } + private void Die() + { + isDead = true; + IinputReader.LockInput(); + deadParticle.Play(); + this.GetComponent().enabled = false; + IaudioController.PlayDeathSound(); + Handheld.Vibrate(); //Vibration + cinemachineImpulseSource.GenerateImpulseWithForce(1); + StartCoroutine(DieRoutine()); + } + + IEnumerator DieRoutine() + { + yield return new WaitForSeconds(1f); + IdeathScreenController.ShowDeathScreen(); + } } public interface IPlayer diff --git a/Assets/Scripts/ScoreService/ScoreService.cs b/Assets/Scripts/ScoreService/ScoreService.cs index c06566d..095f97d 100644 --- a/Assets/Scripts/ScoreService/ScoreService.cs +++ b/Assets/Scripts/ScoreService/ScoreService.cs @@ -1,10 +1,12 @@ using System; using UnityEngine; -public class ScoreService +public class ScoreService : IScoreService { - public int score=0; - public int highScore=PlayerPrefs.GetInt("HighScore",0); + public event Action OnScoreChange; + public int score { get; private set; } + + public int highScore { get; private set; } = PlayerPrefs.GetInt("HighScore"); public void AddScore() { @@ -13,6 +15,7 @@ public class ScoreService { SetNewHighScore(); } + OnScoreChange?.Invoke(score); } private void SetNewHighScore() @@ -23,3 +26,11 @@ public class ScoreService } } + +public interface IScoreService +{ + int score { get; } + int highScore { get; } + event Action OnScoreChange; + void AddScore(); +} diff --git a/Assets/Scripts/UI/DeathScreenController.cs b/Assets/Scripts/UI/DeathScreenController.cs index e17d6ba..36ee6cc 100644 --- a/Assets/Scripts/UI/DeathScreenController.cs +++ b/Assets/Scripts/UI/DeathScreenController.cs @@ -1,34 +1,48 @@ using System; using UnityEngine; +using UnityEngine.SceneManagement; using VContainer; using VContainer.Unity; -public class DeathScreenController +public class DeathScreenController:IDeathScreenController { private DeathScreenView deathScreenView; - public event Action OnRestartPressed; - public event Action OnExitPressed; - [Inject] private ScoreService scoreService; + [Inject] private IScoreService IscoreService; + [Inject] private IInputReader IinputReader; + [Inject] private IAudioController IaudioController; + [Inject] private IGameSession IgameSession; public DeathScreenController(DeathScreenView _deathScreenView) { deathScreenView = _deathScreenView; - deathScreenView.restartBtn.onClick.AddListener(() => OnRestartPressed?.Invoke()); - deathScreenView.exitBtn.onClick.AddListener(()=>OnExitPressed?.Invoke()); + deathScreenView.restartBtn.onClick.AddListener(OnRestartButtonClicked); + deathScreenView.exitBtn.onClick.AddListener(OnExitButtonClicked); } public void ShowDeathScreen() { - deathScreenView.Show(scoreService.score,scoreService.highScore); + deathScreenView.Show(IscoreService.score,IscoreService.highScore); } private void OnExitButtonClicked() { Debug.Log("Exit Button Clicked"); + IinputReader.UnlockInput(); + IaudioController.PlayBtnPressedSound(); + IgameSession.showStartScreen = true; + SceneManager.LoadScene(0); } private void OnRestartButtonClicked() { Debug.Log("Restart Button Clicked"); + IinputReader.UnlockInput(); + IaudioController.PlayBtnPressedSound(); + SceneManager.LoadScene(0); } } + +public interface IDeathScreenController +{ + void ShowDeathScreen(); +} \ No newline at end of file diff --git a/Assets/Scripts/UI/GameScreenController.cs b/Assets/Scripts/UI/GameScreenController.cs index 6a36819..82e4d49 100644 --- a/Assets/Scripts/UI/GameScreenController.cs +++ b/Assets/Scripts/UI/GameScreenController.cs @@ -1,16 +1,31 @@ using System; +using Unity.VisualScripting; using UnityEngine; using VContainer; using VContainer.Unity; -public class GameScreenController +public class GameScreenController: IGameScreenController { GameScreenView gameScreenView; - public event Action OnPausePressed; - public GameScreenController(GameScreenView _gameScreenView) + [Inject] private IScoreService IscoreService; + [Inject] private IPauseScreenController IpauseScreenController; + [Inject] private IInputReader IinputReader; + [Inject] private IAudioController IaudioController; + public GameScreenController(GameScreenView _gameScreenView,IScoreService _IscoreService,IPauseScreenController _IpauseScreenController) { this.gameScreenView = _gameScreenView; - gameScreenView.pauseBtn.onClick.AddListener(()=>OnPausePressed?.Invoke()); + IscoreService = _IscoreService; + IpauseScreenController=_IpauseScreenController; + IscoreService.OnScoreChange += UpdateScore; + gameScreenView.pauseBtn.onClick.AddListener(OnPauseButtonClicked); + } + + + + private void UpdateScore(int score) + { + Debug.Log("calling Score"); + gameScreenView.UpdateScore(score); } public void ShowGameScreen() @@ -20,6 +35,14 @@ public class GameScreenController public void OnPauseButtonClicked() { - Debug.Log("Paused Btn Clicked"); + IaudioController.PlayBtnPressedSound(); + Time.timeScale = 0f; + IinputReader.LockInput(); + IpauseScreenController.ShowPauseScreen(); } + +} + +public interface IGameScreenController { + void ShowGameScreen(); } diff --git a/Assets/Scripts/UI/GameScreenView.cs b/Assets/Scripts/UI/GameScreenView.cs index 72eccbd..a0e8899 100644 --- a/Assets/Scripts/UI/GameScreenView.cs +++ b/Assets/Scripts/UI/GameScreenView.cs @@ -8,9 +8,9 @@ public class GameScreenView : MonoBehaviour public Button pauseBtn; [SerializeField] private TextMeshProUGUI scoreText; - private void Start() + public void UpdateScore(int score) { - gameScreen.SetActive(false); + scoreText.text = score.ToString(); } public void Show() diff --git a/Assets/Scripts/UI/PauseScreenController.cs b/Assets/Scripts/UI/PauseScreenController.cs index c8593b4..83d7388 100644 --- a/Assets/Scripts/UI/PauseScreenController.cs +++ b/Assets/Scripts/UI/PauseScreenController.cs @@ -1,17 +1,19 @@ using System; using UnityEngine; +using UnityEngine.SceneManagement; +using VContainer; -public class PauseScreenController +public class PauseScreenController:IPauseScreenController { private PauseScreenView pauseScreenView; - public event Action OnResumePressed; - public event Action OnRestartPressed; + [Inject] private IInputReader IinputReader; + [Inject] private IAudioController IaudioController; public PauseScreenController(PauseScreenView _pauseScreenView) { pauseScreenView = _pauseScreenView; - pauseScreenView.resumeBtn.onClick.AddListener(()=>OnRestartPressed?.Invoke()); - pauseScreenView.restartBtn.onClick.AddListener(()=>OnRestartPressed?.Invoke()); + pauseScreenView.resumeBtn.onClick.AddListener(OnResumeButtonClicked); + pauseScreenView.restartBtn.onClick.AddListener(OnRestartButtonClicked); } public void ShowPauseScreen() @@ -21,11 +23,23 @@ public class PauseScreenController private void OnRestartButtonClicked() { - Debug.Log("Restart Button Clicked"); + Time.timeScale = 1.0f; + IinputReader.UnlockInput(); + IaudioController.PlayBtnPressedSound(); + SceneManager.LoadScene(0); //Restart This Scene } private void OnResumeButtonClicked() { - Debug.Log("Resume Button Clicked"); + Time.timeScale = 1.0f; + pauseScreenView.Hide(); + IinputReader.UnlockInput(); + IaudioController.PlayBtnPressedSound(); + } } + +public interface IPauseScreenController +{ + void ShowPauseScreen(); +} diff --git a/Assets/Scripts/UI/StartScreenController.cs b/Assets/Scripts/UI/StartScreenController.cs index 2c7e277..2f9d73a 100644 --- a/Assets/Scripts/UI/StartScreenController.cs +++ b/Assets/Scripts/UI/StartScreenController.cs @@ -1,24 +1,45 @@ using System; using UnityEngine; using VContainer; +using VContainer.Unity; -public class StartScreenController +public class StartScreenController:IStartable { private StartScreenView startScreenView; - public event Action OnStartPressed; - public StartScreenController(StartScreenView _startScreenView) + [Inject] IGameScreenController gameScreenController; + [Inject] IInputReader IinputReader; + [Inject] private IAudioController IaudioController; + [Inject] private IGameSession IgameSession; + public StartScreenController(StartScreenView _startScreenView, IGameScreenController _gameScreenController) { Debug.Log("StartScreenController Constructor Called"); startScreenView = _startScreenView; - startScreenView.tapToStartButton.onClick.AddListener(() => OnStartPressed?.Invoke()); + gameScreenController = _gameScreenController; + startScreenView.tapToStartButton.onClick.AddListener(OnTapToStartButtonClicked); + } + public void Start() + { + if(IgameSession.showStartScreen) + { + startScreenView.Show(); + IinputReader.LockInput(); + IgameSession.showStartScreen = false; + IgameSession.hasGameStarted = false; + } + else + { + gameScreenController.ShowGameScreen(); + IgameSession.hasGameStarted = true; + } + } private void OnTapToStartButtonClicked() { + IaudioController.PlayBtnPressedSound(); startScreenView.Hide(); - } - public void ShowStartScreen() - { - startScreenView.Show(); + IinputReader.UnlockInput(); + gameScreenController.ShowGameScreen(); + IgameSession.hasGameStarted = true; } } diff --git a/Assets/Scripts/UI/StartScreenView.cs b/Assets/Scripts/UI/StartScreenView.cs index 12a2248..33eed8e 100644 --- a/Assets/Scripts/UI/StartScreenView.cs +++ b/Assets/Scripts/UI/StartScreenView.cs @@ -6,11 +6,6 @@ public class StartScreenView : MonoBehaviour [SerializeField] private GameObject startScreen; public Button tapToStartButton; - private void Start() - { - //startScreen.SetActive(true); - } - public void Show() { startScreen.SetActive(true); diff --git a/Assets/Settings/Mobile_RPAsset.asset b/Assets/Settings/Mobile_RPAsset.asset index fedee07..ab8cc15 100644 --- a/Assets/Settings/Mobile_RPAsset.asset +++ b/Assets/Settings/Mobile_RPAsset.asset @@ -101,24 +101,24 @@ MonoBehaviour: m_Keys: [] m_Values: m_PrefilteringModeMainLightShadows: 3 - m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLight: 3 m_PrefilteringModeAdditionalLightShadows: 0 m_PrefilterXRKeywords: 1 - m_PrefilteringModeForwardPlus: 1 + m_PrefilteringModeForwardPlus: 0 m_PrefilteringModeDeferredRendering: 0 m_PrefilteringModeScreenSpaceOcclusion: 0 m_PrefilterDebugKeywords: 1 m_PrefilterWriteRenderingLayers: 1 m_PrefilterHDROutput: 1 - m_PrefilterAlphaOutput: 0 + m_PrefilterAlphaOutput: 1 m_PrefilterSSAODepthNormals: 1 m_PrefilterSSAOSourceDepthLow: 1 - m_PrefilterSSAOSourceDepthMedium: 0 + m_PrefilterSSAOSourceDepthMedium: 1 m_PrefilterSSAOSourceDepthHigh: 1 - m_PrefilterSSAOInterleaved: 0 + m_PrefilterSSAOInterleaved: 1 m_PrefilterSSAOBlueNoise: 1 m_PrefilterSSAOSampleCountLow: 1 - m_PrefilterSSAOSampleCountMedium: 0 + m_PrefilterSSAOSampleCountMedium: 1 m_PrefilterSSAOSampleCountHigh: 1 m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT2: 1 @@ -128,14 +128,14 @@ MonoBehaviour: m_PrefilterSoftShadowsQualityHigh: 1 m_PrefilterSoftShadows: 0 m_PrefilterScreenCoord: 1 - m_PrefilterScreenSpaceIrradiance: 0 + m_PrefilterScreenSpaceIrradiance: 1 m_PrefilterNativeRenderPass: 1 m_PrefilterUseLegacyLightmaps: 0 - m_PrefilterBicubicLightmapSampling: 0 - m_PrefilterReflectionProbeRotation: 0 + m_PrefilterBicubicLightmapSampling: 1 + m_PrefilterReflectionProbeRotation: 1 m_PrefilterReflectionProbeBlending: 0 m_PrefilterReflectionProbeBoxProjection: 0 - m_PrefilterReflectionProbeAtlas: 0 + m_PrefilterReflectionProbeAtlas: 1 m_ShaderVariantLogLevel: 0 m_ShadowCascades: 0 m_Textures: diff --git a/Assets/Settings/SampleSceneProfile.asset b/Assets/Settings/SampleSceneProfile.asset index c15c008..80c7e47 100644 --- a/Assets/Settings/SampleSceneProfile.asset +++ b/Assets/Settings/SampleSceneProfile.asset @@ -45,11 +45,11 @@ MonoBehaviour: m_Value: 6 dirtTexture: m_OverrideState: 0 - m_Value: {fileID: 0} + m_Value: {fileID: 2800000, guid: bb541db0e6579ab44872c3d75c5e6ccf, type: 3} dimension: 1 dirtIntensity: m_OverrideState: 0 - m_Value: 0 + m_Value: 7.48 --- !u!114 &-3357603926938260329 MonoBehaviour: m_ObjectHideFlags: 3 diff --git a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset index 6527a18..6856850 100644 --- a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset +++ b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset @@ -66,7 +66,19 @@ MonoBehaviour: - rid: 4749339662125367306 - rid: 4749339662125367307 m_RuntimeSettings: - m_List: [] + m_List: + - rid: 6852985685364965378 + - rid: 6852985685364965379 + - rid: 6852985685364965380 + - rid: 6852985685364965381 + - rid: 6852985685364965384 + - rid: 6852985685364965385 + - rid: 6852985685364965392 + - rid: 6852985685364965394 + - rid: 8712630790384254976 + - rid: 4749339662125367301 + - rid: 4749339662125367306 + - rid: 4749339662125367307 m_AssetVersion: 9 m_ObsoleteDefaultVolumeProfile: {fileID: 0} m_RenderingLayerNames: diff --git a/Assets/_Recovery.meta b/Assets/_Recovery.meta new file mode 100644 index 0000000..3ce4786 --- /dev/null +++ b/Assets/_Recovery.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 663cfec7166f8f746939f02dd157025e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Recovery/0.unity b/Assets/_Recovery/0.unity new file mode 100644 index 0000000..2818f1a --- /dev/null +++ b/Assets/_Recovery/0.unity @@ -0,0 +1,13893 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 0d723ddb1aa27eb4fbc0c3c5e8be7e79, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &21876040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 21876041} + - component: {fileID: 21876043} + - component: {fileID: 21876042} + m_Layer: 5 + m_Name: HighScore + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &21876041 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21876040} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1311440875} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 388.28693, y: -4} + m_SizeDelta: {x: 229.804, y: 71.1528} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &21876042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21876040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 560 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 70 + m_fontSizeBase: 70 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &21876043 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21876040} + m_CullTransparentMesh: 1 +--- !u!1 &63427161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 63427162} + - component: {fileID: 63427165} + - component: {fileID: 63427164} + - component: {fileID: 63427163} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &63427162 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 933431911} + m_Father: {fileID: 330585546} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &63427163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &63427164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 0, y: 50} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &63427165 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63427161} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 330585545} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &110731545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 110731546} + - component: {fileID: 110731547} + m_Layer: 0 + m_Name: MusicSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &110731546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110731545} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1783072554} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &110731547 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110731545} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 936482137231856778, guid: c2e028ac02ea57942bcfe586e0fda8b0, type: 2} + m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} + m_PlayOnAwake: 0 + m_Volume: 0.8 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &158888000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 158888001} + - component: {fileID: 158888003} + - component: {fileID: 158888002} + m_Layer: 5 + m_Name: GameOverText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &158888001 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158888000} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 327139367} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.0005187984, y: 5} + m_SizeDelta: {x: 554.1621, y: 170.42} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &158888002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158888000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Game Over + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 75 + m_fontSizeBase: 75 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &158888003 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158888000} + m_CullTransparentMesh: 1 +--- !u!1 &185655299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 185655300} + - component: {fileID: 185655302} + - component: {fileID: 185655301} + m_Layer: 0 + m_Name: Jump particle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &185655300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185655299} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581798940} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!199 &185655301 +ParticleSystemRenderer: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185655299} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6888e6f8804259149a238ce4c6a74f59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_RenderMode: 0 + m_MeshDistribution: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_UseCustomVertexStreams: 0 + m_VertexStreams: 00010304 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MeshWeighting: 1 + m_MeshWeighting1: 1 + m_MeshWeighting2: 1 + m_MeshWeighting3: 1 +--- !u!198 &185655302 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185655299} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 0 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 3 + scalar: 0.6 + minScalar: 0.4 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 2 + minScalar: 3 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 0, g: 1, b: 0.9098039, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 3 + scalar: 0.05 + minScalar: 0.025 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + gravitySource: 0 + maxNumParticles: 1000 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 4 + angle: 20 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 0 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.3 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 3 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 32768 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 1 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 4 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: [] + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: [] + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + textureScale: {x: 1, y: 1} + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &239977912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 239977913} + - component: {fileID: 239977915} + - component: {fileID: 239977914} + m_Layer: 0 + m_Name: DeathParticle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &239977913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239977912} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 581798940} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!199 &239977914 +ParticleSystemRenderer: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239977912} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6888e6f8804259149a238ce4c6a74f59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_RenderMode: 0 + m_MeshDistribution: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_UseCustomVertexStreams: 0 + m_VertexStreams: 00010304 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MeshWeighting: 1 + m_MeshWeighting1: 1 + m_MeshWeighting2: 1 + m_MeshWeighting3: 1 +--- !u!198 &239977915 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239977912} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 0 + prewarm: 0 + playOnAwake: 0 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0.5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 3 + scalar: 2.2 + minScalar: 2 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 0, g: 1, b: 0.9098039, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 3 + scalar: 0.12 + minScalar: 0.1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + gravitySource: 0 + maxNumParticles: 1000 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.5 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 60 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 0} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 1, g: 1, b: 1, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 65535 + ctime3: 65535 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 45875 + atime1: 65535 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 1 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 4 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: [] + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: [] + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + textureScale: {x: 1, y: 1} + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &268692279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 268692280} + m_Layer: 0 + m_Name: PlatformContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &268692280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 268692279} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1850425825} + - {fileID: 1073116392} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &269796309 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 269796310} + - component: {fileID: 269796312} + - component: {fileID: 269796311} + m_Layer: 5 + m_Name: PausedScreenPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &269796310 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269796309} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1396549893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.000061035156} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &269796311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269796309} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -2082995382, guid: 6d1a2570067e3ae4cb5c72a2bca3b8d5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &269796312 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269796309} + m_CullTransparentMesh: 1 +--- !u!1 &327139366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 327139367} + - component: {fileID: 327139369} + - component: {fileID: 327139368} + m_Layer: 5 + m_Name: GameOverImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &327139367 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327139366} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 158888001} + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 9.127052, y: 359.39343} + m_SizeDelta: {x: 554.16, y: 170.4264} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &327139368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327139366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -775807451, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &327139369 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327139366} + m_CullTransparentMesh: 1 +--- !u!1 &330585543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 330585546} + - component: {fileID: 330585545} + - component: {fileID: 330585544} + - component: {fileID: 330585547} + - component: {fileID: 330585548} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &330585544 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 +--- !u!20 &330585545 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5943396, g: 0.5943396, b: 0.5943396, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 55 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &330585546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + serializedVersion: 2 + m_LocalRotation: {x: 0.08746121, y: 0, z: 0, w: 0.99616796} + m_LocalPosition: {x: 0, y: 2, z: -6.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 63427162} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &330585547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!114 &330585548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineBrain + ShowDebugText: 0 + ShowCameraFrustum: 1 + IgnoreTimeScale: 0 + WorldUpOverride: {fileID: 0} + ChannelMask: -1 + UpdateMethod: 2 + BlendUpdateMethod: 1 + LensModeOverride: + Enabled: 0 + DefaultMode: 2 + DefaultBlend: + Style: 1 + Time: 2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} +--- !u!1 &341853332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 341853333} + - component: {fileID: 341853336} + - component: {fileID: 341853335} + - component: {fileID: 341853334} + m_Layer: 5 + m_Name: TapToStartBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &341853333 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341853332} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1613812280} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -650.5} + m_SizeDelta: {x: 800, y: 450} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &341853334 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341853332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 341853335} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &341853335 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341853332} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 101b8fdb0a49a7b41a04d586970c0273, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &341853336 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341853332} + m_CullTransparentMesh: 1 +--- !u!1 &343573092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 343573093} + - component: {fileID: 343573094} + m_Layer: 0 + m_Name: GameLifetimeScope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &343573093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 343573092} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &343573094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 343573092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 336cf259e80318a4288740b3b0b06838, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::GameLifetimeScope + parentReference: + TypeName: + autoRun: 1 + autoInjectGameObjects: [] + pool: {fileID: 1073116393} + manager: {fileID: 1850425826} + inputReader: {fileID: 11400000, guid: dfe12148dc4d7ea46b49e490c1b1aad5, type: 2} + player: {fileID: 581798942} + audioController: {fileID: 1783072555} + gameScreenView: {fileID: 861211733} + startScreenView: {fileID: 861211736} + deathScreenView: {fileID: 861211734} + pauseScreenView: {fileID: 861211735} +--- !u!1 &345728572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 345728573} + - component: {fileID: 345728575} + - component: {fileID: 345728574} + m_Layer: 5 + m_Name: DeathScreenPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &345728573 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345728572} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &345728574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345728572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -2082995382, guid: 6d1a2570067e3ae4cb5c72a2bca3b8d5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &345728575 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345728572} + m_CullTransparentMesh: 1 +--- !u!1 &410087039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 410087041} + - component: {fileID: 410087040} + - component: {fileID: 410087042} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &410087040 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 5000 + m_UseColorTemperature: 1 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &410087041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + serializedVersion: 2 + m_LocalRotation: {x: 0.16773126, y: -0.25488698, z: 0.044943444, w: 0.95125127} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 20, y: -30, z: 0} +--- !u!114 &410087042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 410087039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 1 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!1 &581798936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581798940} + - component: {fileID: 581798939} + - component: {fileID: 581798938} + - component: {fileID: 581798937} + - component: {fileID: 581798941} + - component: {fileID: 581798942} + - component: {fileID: 581798943} + m_Layer: 0 + m_Name: Player + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &581798937 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &581798938 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7e2e81cc0b156ce419830371ca3c39d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &581798939 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &581798940 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -0.7} + m_LocalScale: {x: 0.15, y: 0.15, z: 0.15} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 185655300} + - {fileID: 239977913} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &581798941 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 1 + m_Constraints: 122 + m_CollisionDetection: 1 +--- !u!114 &581798942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 614bffbd597c49349a47f76b0ba8b277, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Player + jumpForce: 3 + rb: {fileID: 581798941} + splashObject: {fileID: 9000420296853654146, guid: 28c1e4391077e5c4e98f5924dc346fd9, type: 3} + splashParent: {fileID: 1850425825} + deadParticle: {fileID: 239977915} + jumpParticle: {fileID: 185655302} +--- !u!96 &581798943 +TrailRenderer: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581798936} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7e2e81cc0b156ce419830371ca3c39d5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Time: 0.1 + m_PreviewTimeScale: 1 + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.1027298 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + 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} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MinVertexDistance: 0 + m_Autodestruct: 0 + m_Emitting: 1 + m_ApplyActiveColorSpace: 1 +--- !u!1 &670778192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 670778193} + - component: {fileID: 670778195} + - component: {fileID: 670778194} + m_Layer: 5 + m_Name: PauseText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &670778193 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 670778192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1548353694} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.0005187984, y: 5} + m_SizeDelta: {x: 554.1621, y: 170.42} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &670778194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 670778192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Paused + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 75 + m_fontSizeBase: 75 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &670778195 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 670778192} + m_CullTransparentMesh: 1 +--- !u!1 &694958380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 694958381} + - component: {fileID: 694958382} + m_Layer: 0 + m_Name: SfxSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &694958381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694958380} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1783072554} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &694958382 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694958380} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 4161368961764744457, guid: c2e028ac02ea57942bcfe586e0fda8b0, type: 2} + m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &717201480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 717201481} + - component: {fileID: 717201483} + - component: {fileID: 717201482} + m_Layer: 5 + m_Name: Score + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &717201481 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717201480} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1050760848} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 300, y: -4} + m_SizeDelta: {x: 229.804, y: 71.1528} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &717201482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717201480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 50 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 70 + m_fontSizeBase: 70 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &717201483 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717201480} + m_CullTransparentMesh: 1 +--- !u!1 &786621119 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 786621120} + - component: {fileID: 786621122} + - component: {fileID: 786621121} + m_Layer: 5 + m_Name: GameName + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &786621120 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786621119} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1613812280} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 675.5} + m_SizeDelta: {x: 800, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &786621121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786621119} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: bb541db0e6579ab44872c3d75c5e6ccf, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &786621122 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786621119} + m_CullTransparentMesh: 1 +--- !u!1 &791472098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 791472102} + - component: {fileID: 791472101} + - component: {fileID: 791472100} + - component: {fileID: 791472099} + m_Layer: 5 + m_Name: UICanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &791472099 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791472098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &791472100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791472098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1080, y: 1920} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &791472101 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791472098} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &791472102 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 791472098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 861211732} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &832575517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832575519} + - component: {fileID: 832575518} + m_Layer: 0 + m_Name: Global Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &832575518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2} +--- !u!4 &832575519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &861211731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 861211732} + - component: {fileID: 861211736} + - component: {fileID: 861211733} + - component: {fileID: 861211735} + - component: {fileID: 861211734} + m_Layer: 5 + m_Name: Screens + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &861211732 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861211731} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1613812280} + - {fileID: 1088536452} + - {fileID: 1396549893} + - {fileID: 1465549299} + m_Father: {fileID: 791472102} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 1920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &861211733 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861211731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 808ee37de5cf8b546b46962c901f0332, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::GameScreenView + gameScreen: {fileID: 1088536451} + pauseBtn: {fileID: 1416564336} + scoreText: {fileID: 1320482639} +--- !u!114 &861211734 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861211731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c438a869d58da489fc53c68f98d32d, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::DeathScreenView + deathScreen: {fileID: 1465549298} + restartBtn: {fileID: 1849045416} + exitBtn: {fileID: 1148039067} + score: {fileID: 717201482} + highScore: {fileID: 21876042} +--- !u!114 &861211735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861211731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9139af2b841ef584da86e7b387b494d5, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PauseScreenView + pauseScreen: {fileID: 1396549892} + resumeBtn: {fileID: 1829305577} + restartBtn: {fileID: 1942266450} +--- !u!114 &861211736 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861211731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e48dcf0a824cead4d8c1339c10b81b3b, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::StartScreenView + startScreen: {fileID: 1613812279} + tapToStartButton: {fileID: 341853334} +--- !u!1 &926831878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 926831882} + - component: {fileID: 926831881} + - component: {fileID: 926831880} + - component: {fileID: 926831879} + m_Layer: 0 + m_Name: FollowPlayerCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &926831879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 926831878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineRotationComposer + Composition: + ScreenPosition: {x: 0, y: 0} + DeadZone: + Enabled: 1 + Size: {x: 0.2, y: 0.15} + HardLimits: + Enabled: 0 + Size: {x: 0.8, y: 1.16} + Offset: {x: 0, y: 0} + CenterOnActivate: 0 + TargetOffset: {x: 0, y: 0, z: -2} + Damping: {x: 0.5, y: 0.5} + Lookahead: + Enabled: 0 + Time: 0 + Smoothing: 0 + IgnoreY: 0 +--- !u!114 &926831880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 926831878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineFollow + TrackerSettings: + BindingMode: 4 + PositionDamping: {x: 1, y: 1, z: 1} + AngularDampingMode: 0 + RotationDamping: {x: 1, y: 1, z: 1} + QuaternionDamping: 1 + FollowOffset: {x: 0, y: 1, z: -6} +--- !u!114 &926831881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 926831878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineCamera + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20241001 + m_LegacyPriority: 0 + Target: + TrackingTarget: {fileID: 581798940} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 55 + OrthographicSize: 5 + NearClipPlane: 0.3 + FarClipPlane: 1000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 21.946, y: 16.002} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 0 +--- !u!4 &926831882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 926831878} + serializedVersion: 2 + m_LocalRotation: {x: 0.08746121, y: 0, z: 0, w: 0.99616796} + m_LocalPosition: {x: 0, y: 2, z: -6.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 20, y: 0, z: 0} +--- !u!1 &933431910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 933431911} + - component: {fileID: 933431913} + - component: {fileID: 933431912} + m_Layer: 5 + m_Name: backgroundImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &933431911 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 933431910} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 63427162} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1100, y: 1920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &933431912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 933431910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.7264151, g: 0.7264151, b: 0.7264151, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1f9987f7b014f424e9fcea3949340146, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &933431913 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 933431910} + m_CullTransparentMesh: 1 +--- !u!1 &970885936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 970885937} + - component: {fileID: 970885939} + - component: {fileID: 970885938} + m_Layer: 5 + m_Name: StartPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &970885937 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970885936} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1613812280} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &970885938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970885936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &970885939 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970885936} + m_CullTransparentMesh: 1 +--- !u!1 &1002942599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002942600} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1002942600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002942599} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1073116392} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1050760847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1050760848} + - component: {fileID: 1050760850} + - component: {fileID: 1050760849} + m_Layer: 5 + m_Name: ScoreText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1050760848 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050760847} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 717201481} + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -21.873474, y: 96.39343} + m_SizeDelta: {x: 296.2339, y: 71.1528} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1050760849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050760847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Score :' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 80 + m_fontSizeBase: 80 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1050760850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050760847} + m_CullTransparentMesh: 1 +--- !u!1 &1073116391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073116392} + - component: {fileID: 1073116393} + m_Layer: 0 + m_Name: PlatformPool + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1073116392 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073116391} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1002942600} + m_Father: {fileID: 268692280} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1073116393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073116391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4977d8686efb09b40a678a0fb6037eee, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PlatformPool + platformPrefab: {fileID: 7976989308632488510, guid: e8873770c9532bc4a9fd735810830ed5, type: 3} + platformParent: {fileID: 1850425825} + poolSize: 15 +--- !u!1 &1088536451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088536452} + m_Layer: 5 + m_Name: GameScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1088536452 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088536451} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1416564335} + - {fileID: 1320482638} + m_Father: {fileID: 861211732} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 1920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1148039065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1148039066} + - component: {fileID: 1148039069} + - component: {fileID: 1148039068} + - component: {fileID: 1148039067} + m_Layer: 5 + m_Name: ExitBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1148039066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148039065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 259.12653, y: -344.60657} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1148039067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148039065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1148039068} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1148039068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148039065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -1652847993, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1148039069 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148039065} + m_CullTransparentMesh: 1 +--- !u!1 &1311440874 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1311440875} + - component: {fileID: 1311440877} + - component: {fileID: 1311440876} + m_Layer: 5 + m_Name: HighScoretext + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1311440875 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311440874} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 21876041} + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -116.44107, y: -61.606567} + m_SizeDelta: {x: 485.3709, y: 71.1528} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1311440876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311440874} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'HighScore :' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 80 + m_fontSizeBase: 80 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1311440877 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1311440874} + m_CullTransparentMesh: 1 +--- !u!1 &1320482637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1320482638} + - component: {fileID: 1320482640} + - component: {fileID: 1320482639} + m_Layer: 5 + m_Name: Score + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1320482638 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320482637} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1088536452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 720} + m_SizeDelta: {x: 235.2485, y: 79.5344} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1320482639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320482637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4282832861 + m_fontColor: {r: 0.8679245, g: 0.8423158, b: 0.27429688, a: 1} + m_enableVertexGradient: 1 + m_colorMode: 2 + m_fontColorGradient: + topLeft: {r: 0.9339623, g: 0.84734297, b: 0.013216423, a: 1} + topRight: {r: 0.9339623, g: 0.84734297, b: 0.013216423, a: 1} + bottomLeft: {r: 1, g: 0.75756127, b: 0.5330188, a: 1} + bottomRight: {r: 1, g: 0.75756127, b: 0.5330188, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 100 + m_fontSizeBase: 100 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 4 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1320482640 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1320482637} + m_CullTransparentMesh: 1 +--- !u!1 &1396549892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1396549893} + m_Layer: 5 + m_Name: PauseScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1396549893 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396549892} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 269796310} + - {fileID: 1548353694} + - {fileID: 1829305576} + - {fileID: 1942266449} + m_Father: {fileID: 861211732} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -0.000030518} + m_SizeDelta: {x: 980, y: 920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1416564334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1416564335} + - component: {fileID: 1416564338} + - component: {fileID: 1416564337} + - component: {fileID: 1416564336} + m_Layer: 5 + m_Name: PauseButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1416564335 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1416564334} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1088536452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 377, y: 812} + m_SizeDelta: {x: 150, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1416564336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1416564334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1416564337} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1416564337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1416564334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -2031289094, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1416564338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1416564334} + m_CullTransparentMesh: 1 +--- !u!1 &1465549298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1465549299} + m_Layer: 5 + m_Name: DeathScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1465549299 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1465549298} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 345728573} + - {fileID: 1849045415} + - {fileID: 1148039066} + - {fileID: 327139367} + - {fileID: 1050760848} + - {fileID: 1311440875} + m_Father: {fileID: 861211732} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 1180} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1548353693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1548353694} + - component: {fileID: 1548353696} + - component: {fileID: 1548353695} + m_Layer: 5 + m_Name: Pauseimage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1548353694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548353693} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 670778193} + m_Father: {fileID: 1396549893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.0005264282, y: 230.09009} + m_SizeDelta: {x: 554.16, y: 170.4264} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1548353695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548353693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -775807451, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1548353696 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548353693} + m_CullTransparentMesh: 1 +--- !u!1 &1613812279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1613812280} + m_Layer: 5 + m_Name: StartScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1613812280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613812279} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 970885937} + - {fileID: 786621120} + - {fileID: 341853333} + m_Father: {fileID: 861211732} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 1920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1783072553 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1783072554} + - component: {fileID: 1783072555} + m_Layer: 0 + m_Name: AudioSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1783072554 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783072553} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 110731546} + - {fileID: 694958381} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1783072555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783072553} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ef25ef6976b18845b4fa4ea67c8b39b, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::AudioController + MusicSource: {fileID: 110731547} + SFXSource: {fileID: 694958382} + backgroundMusicClip: {fileID: 8300000, guid: b7da48c15e710a741842583fac3307c7, type: 3} + jumpClip: {fileID: 8300000, guid: e1a8921df70cc324bad7155d94a07df6, type: 3} + deathClip: {fileID: 8300000, guid: 7e26c9daf4c32483b9c2790e662d3f1b, type: 3} + btnPressedClip: {fileID: 8300000, guid: ffb159a21c8a04135a5616979c828fab, type: 3} + scoredClip: {fileID: 8300000, guid: 0c008ee3ee72a4362a35be25fa5de043, type: 3} +--- !u!1 &1829305575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1829305576} + - component: {fileID: 1829305579} + - component: {fileID: 1829305578} + - component: {fileID: 1829305577} + m_Layer: 5 + m_Name: ResumeBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1829305576 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829305575} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1396549893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -250, y: -215.30334} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1829305577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829305575} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1829305578} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1829305578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829305575} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 846439721, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1829305579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829305575} + m_CullTransparentMesh: 1 +--- !u!1 &1849045414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1849045415} + - component: {fileID: 1849045418} + - component: {fileID: 1849045417} + - component: {fileID: 1849045416} + m_Layer: 5 + m_Name: ReStartBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1849045415 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849045414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1465549299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -240.87347, y: -344.60657} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1849045416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849045414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1849045417} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1849045417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849045414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -1800940749, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1849045418 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849045414} + m_CullTransparentMesh: 1 +--- !u!1 &1850425824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1850425825} + - component: {fileID: 1850425826} + m_Layer: 0 + m_Name: PlatformManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1850425825 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850425824} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 268692280} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1850425826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850425824} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 393df497de02fce4399040e619446397, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PlatformManager + rotSpeed: 5 +--- !u!1 &1942266448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1942266449} + - component: {fileID: 1942266452} + - component: {fileID: 1942266451} + - component: {fileID: 1942266450} + m_Layer: 5 + m_Name: ReStartBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1942266449 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942266448} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1396549893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 250, y: -215.30334} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1942266450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942266448} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1942266451} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1942266451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942266448} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -1800940749, guid: 156ec492e516ccb4099add479601d65e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1942266452 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942266448} + m_CullTransparentMesh: 1 +--- !u!1 &2056622161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2056622164} + - component: {fileID: 2056622163} + - component: {fileID: 2056622162} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2056622162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2056622161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 + m_ScrollDeltaPerTick: 6 +--- !u!114 &2056622163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2056622161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &2056622164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2056622161} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 330585546} + - {fileID: 926831882} + - {fileID: 410087041} + - {fileID: 832575519} + - {fileID: 268692280} + - {fileID: 581798940} + - {fileID: 343573093} + - {fileID: 791472102} + - {fileID: 2056622164} + - {fileID: 1783072554} diff --git a/Assets/_Recovery/0.unity.meta b/Assets/_Recovery/0.unity.meta new file mode 100644 index 0000000..5033d04 --- /dev/null +++ b/Assets/_Recovery/0.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b7272c0e7caac547af14c5f1532179c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/CHANGELOG.md b/Packages/com.merry-yellow.code-assist/CHANGELOG.md new file mode 100644 index 0000000..60c1ac7 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/CHANGELOG.md @@ -0,0 +1,304 @@ +List of new features, bug fixes and improvements + +# Version 1.4.19 +* AGENTS.md support for agentic AI, copilot-instructions.md support is deprecated +* Visual Studio 2026 compatibility +* Bugfix for completions and inline visuals for sorting layer related members +* Can unspecify max_tokens,temperature and top_p in the gpt request options +* Gpt libraries and models are updated + +# Version 1.4.18 +* New code completions: Material/Shader +* New inline visuals: Material/Shader +* Bugfix for inline text visuals when document is edited +* Bugfix for completions for constructor method arguments +* Hotfix for InputManager data fetching with custom tags +* Gpt models are updated + +# Version 1.4.17 +* Hotfix for Unity compile error + +# Version 1.4.16 +* New code completions: RenderingLayerMask (Unity 6 and newer only) +* New inline visuals: RenderingLayerMask (Unity 6 and newer only), and LayerMask +* Hotfix for Unity editor freezes +* Hotfix for inline visuals not showing properly when changing document in Visual Studio +* Category SortingLayer removed, its items are now under category Layer +* Minor fix for output window in Visual Studio +* Gpt libraries and models are updated + +# Version 1.4.15 +* Hotfix for code completion for attributes + +# Version 1.4.14 +* New code completions: Attributes and preprocessor directives (#if, #elif) +* New gpt feature: Add mode, gpt can add new files to the project +* New gpt feature: For CodeLens, follow-up question and custom prompt +* Gpt responses are logged to Visual Studio output window + +# Version 1.4.13 +* Hotfix for gpt requests of OpenAI-API-Compatible platforms + +# Version 1.4.12 +* Additional properties options added for gpt requests +* Version number mistype fix for Unity asset package + +# Version 1.4.11 +* Hotfix for gpt options page +* Fix for applying transformers for newer versions of Visual Studio +* Arm64 architecture support + +# Version 1.4.10 +* Animations added to context aware instructions +* Hotfix for context aware integrations (for GitHub Copilot) + +# Version 1.4.9 +* Hotfix for gpt options page + +# Version 1.4.8 +* Version bump for sister Visual Studio extensions + +# Version 1.4.7 +* New gpt feature: Integration into GitHub Copilot. Can now feed GitHub Copilot with project/scene/game-object details. +* Auto updater for itch.io builds + +# Version 1.4.6 +* Updated binaries with new build parameters + +# Version 1.4.5 +* Version skipped by mistake ^-^ + +# Version 1.4.4 +* Hotfix for Unity package compile error + +# Version 1.4.3 +* New gpt provider: OpenAI API Compatible, for web/cloud services that supports OpenAI SDK standards + +# Version 1.4.2 +* Bugfix for formatting and title of logging +* Bugfix for CodeLens2Gpt when closing document + +# Version 1.4.1 +* New gpt provider: Ollama, can use LLMs from local machine or private network + +# Version 1.4.0 +* Gpt backend has been reimplemented for latest models and LLM trends +* New gpt provider: Anthropic (Claude), can be used as an alternative to OpenAI ChatGPT and Google Gemini +* New gpt provider: DeepSeek, can be used as an alternative to OpenAI ChatGPT and Google Gemini +* New code completions: Scene management classes can be auto completed +* New inline visuals: Scene management classes can display inline information + +# Version 1.3.12 +* Hotfix for Microsoft Marketplace manifest file + +# Version 1.3.11 +* Hotfix for Microsoft Marketplace manifest file + +# Version 1.3.10 +* Hotfix for type resolving +* Usability improvements for VSCode exporter +* More filters for expected error logs + +# Version 1.3.9 +* Hotfix for Unity sink + +# Version 1.3.8 +* Hotfix for Unity sink + +# Version 1.3.7 +* Bugfix for exporter/updater +* Bugfix for logging options + +# Version 1.3.6 +* VSCode readme updated + +# Version 1.3.5 +* JSON library switched back to Newtonsoft.JSON +* Rule xml files removed from Unity asset +* Unnessary analyzer binaries are removed from Roslyn Analyzer + +# Version 1.3.4 +* Stability improvements for network (mqttnet) +* Hotfix for JSON mapping + +# Version 1.3.3 +* Full version for VSCode is released! +* Fix for VSCode adorments when document is modified +* Binary files removed from Unity asset +* Bugfix for network (mqttnet server) +* VSCode extension stability improvements +* VSCode roslyn analyzer stability improvements + +# Version 1.3.2 +* Fixed cross-platform issues for Linux and macOS + +# Version 1.3.1 +* Updated VSCode manifest and readme + +# Version 1.3.0 +* Initial release for VSCode + +# Version 1.2.6 +* Exporting when Unity is in play mode +* Some error messages have been made more user friendly + +# Version 1.2.5 +* Released on itch.io https://meryel.itch.io/unity-code-assist +* Url changes + +# Version 1.2.4 +* Bugfix for exporter with long file paths +* Bugfix for retrieving animation and animator data + +# Version 1.2.3 +* Bugfix for exporter when overwriting files +* Bugfix for inline visuals when active game object changes + +# Version 1.2.2 +* Bugfix for exporter when facing race condition + +# Version 1.2.1 +* Typo fix for Options page +* Bugfix for retrieving animation and animator data + +# Version 1.2.0 +* New gpt provider: Google Gemini, can be used as an alternative to OpenAI ChatGPT +* New feature: CodeLens2Gpt. Can request gpt queries from the CodeLens of methods and classes +* New feature: Context aware gpt, gpt prompts are embedded with Unity, scene and object information +* New feature: Package, asset has relocated under Packages directory (from Assets directry), along with Unity setup menu items +* New code completions: Animation and Animator classes and Invoke/Coroutine/Broadcast methods can be auto completed +* New inline visuals: Animation and Animator classes can display inline information + +# Version 1.1.12 +* External binary files have been customized and minimized +* Domain reloading time have been reduced +* Stability and usability improvements for exporter/updater +* Bugfix for Feedback window + +# Version 1.1.11 +* Gpt completion endpoint fixed for OpenAI API changes +* Bugfix for Input Manager monitor +* Bugfix for logging to Visual Studio output window +* Bugfix for About window + +# Version 1.1.10 +* Version skipped for compatibility with other assets + +# Version 1.1.9 +* Gpt support for chat and edit +* More options added for Gpt +* Overall stability improvements +* Exporter shows file locks if update/export is unsuccessful + +# Version 1.1.8 +* Bugfix for non-Unity solutions + +# Version 1.1.7 +* Bugfix for Visual Studio freeze + +# Version 1.1.6 +* Gpt support added for shader files +* Stability improvements for Unity.ScriptFinder + +# Version 1.1.5 +* Stability and usability improvements for exporter/updater +* Bugfix for Transformer Linq and Auto Input Manager +* Usability for Transformer window, disabling it if not connected to Unity +* Enhancement for completions, sorting numerical values correctly https://github.com/merryyellow/Unity-Code-Assist/issues/6 + +# Version 1.1.4 +* Auto Input Manager is now compatible with binary asset files +* Stability and usability improvements for Transformer windows + +# Version 1.1.3 +* Analyzers are working at a separate process https://github.com/merryyellow/Unity-Code-Assist/issues/20 +* Inline visuals stability and performance improvements https://github.com/merryyellow/Unity-Code-Assist/issues/22 https://github.com/merryyellow/Unity-Code-Assist/issues/24 +* Exporter/updater stability improvements https://github.com/merryyellow/Unity-Code-Assist/issues/19 https://github.com/merryyellow/Unity-Code-Assist/issues/23 +* Transformer window stability improvements https://github.com/merryyellow/Unity-Code-Assist/issues/21 +* Bugfix for Gpt busy icon positioning https://github.com/merryyellow/Unity-Code-Assist/issues/24 + +# Version 1.1.2 +* Bugfix for Yaml file parsing of InputManager + +# Version 1.1.1 +* Bugfix for error handling of binary file parsing + +# Version 1.1.0 +* New feature: Generative AI. Use OpenAI ChatGPT within comments to complete your code +* New feature: Visual Studio menus. Access Unity Code Assist from "Extensions"->"Unity Code Assist" +* New code completions: PlayerPrefs, EditorPrefs and Input classes' methods can be auto completed +* New inline visuals: PlayerPrefs, EditorPrefs and Input classes' methods can display inline information +* New code transformer: Auto Input Manager. Converts legacy input code into the new Input Manager + +# Version 1.0.0.21 +* Stability improvements for Unity ScriptFinder class + +# Version 1.0.0.20 +* Bugfix for crash at startup https://github.com/merryyellow/Unity-Code-Assist/issues/18 + +# Version 1.0.0.19 +* More logging for error tracking + +# Version 1.0.0.18 +* Overall stability improvements, nullable references enabled for codebase +* Stability improvements for communications, when reconnection occurs + +# Version 1.0.0.17 +* Stability improvements for Unity ScriptFinder class + +# Version 1.0.0.16 +* Bugfix for Visual Studio events concurrency + +# Version 1.0.0.15 +* Visual Studio events are reimplemented for both stability and performance +* Removal of possible Task deadlocks +* Usability improvements for exporter/updater +* Bugfix for exporter/updater, where prompts can appear twice +* Bugfix for Inline Texts, where const null identifier may raise exceptions https://github.com/merryyellow/Unity-Code-Assist/issues/16 +* Bugfix for communications, where tags&layers are sent for the first time + +# Version 1.0.0.14 +* Usability improvements for Visual Studio Status window where project is not a Unity project +* Bugfix for communication reinitialization, where projects are closed and opened from Visual Studio https://github.com/merryyellow/Unity-Code-Assist/issues/15 +* Bugfix for Visual Studio events' initialization https://github.com/merryyellow/Unity-Code-Assist/issues/14 + +# Version 1.0.0.13 +* Bugfix for Unity where target object is neither Component nor MonoBehaviour https://github.com/merryyellow/Unity-Code-Assist/issues/13 + +# Version 1.0.0.12 +* New Feature: Updating Unity asset from Visual Studio +* New Feature: Online error reporting of Unity errors +* Usability improvement for Visual Studio Feedback window +* Bugfix for Inline Texts where there is no class declaration https://github.com/merryyellow/Unity-Code-Assist/issues/5 +* Bugfix for Code Completion where there is no class declaration https://github.com/merryyellow/Unity-Code-Assist/issues/10 +* Bugfix for Visual Studio output window, where it may be unavailable + +# Version 1.0.0.11 +* Bugfix for Visual Studio events' initialization https://github.com/merryyellow/Unity-Code-Assist/issues/3 +* Exporter now has more logs + +# Version 1.0.0.10 +* Bugfix for Inline Texts where leading trivia is absent https://github.com/merryyellow/Unity-Code-Assist/issues/1 +* Bugfix for Visual Studio events' initialization https://github.com/merryyellow/Unity-Code-Assist/issues/2 + +# Version 1.0.0.9 +* Minor adjustments for initialization logging + +# Version 1.0.0.8 +* Online analytics added +* Bugfix for Inline Texts, Visual Studio code preview screen does not raise any exception anymore + +# Version 1.0.0.7 +* Online error tracker added + +# Version 1.0.0.6 +* Exporter is always disabled for non Unity projects + +# Version 1.0.0.5 +* Lite version released at Visual Studio Marketplace +* Exporting Unity asset from Visual Studio +* Unity package become package independent (Removed Newtonsoft.Json dependency) + +# Version 1.0.0 +* First release! +* Released on Unity Asset Store \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/CHANGELOG.md.meta b/Packages/com.merry-yellow.code-assist/CHANGELOG.md.meta new file mode 100644 index 0000000..96b626a --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c541f26362738d45ad369a0458b7559 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor.meta b/Packages/com.merry-yellow.code-assist/Editor.meta new file mode 100644 index 0000000..d3990a5 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e33cd3b7ea2de540b2cf6dce580c330 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs b/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs new file mode 100644 index 0000000..cba22c5 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs @@ -0,0 +1,75 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + public class AboutWindow : EditorWindow + { + GUIStyle? styleLabel; + + public static void Display() + { + // Get existing open window or if none, make a new one: + var window = GetWindow(); + window.Show(); + + Serilog.Log.Debug("Displaying about window"); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "AboutWindow_Display"); + } + + private void OnEnable() + { + //**--icon + //var icon = AssetDatabase.LoadAssetAtPath("Assets/Sprites/Gear.png"); + //titleContent = new GUIContent("Code Assist", icon); + titleContent = new GUIContent("Code Assist About"); + } + + private void OnGUI() + { + styleLabel ??= new GUIStyle(GUI.skin.label) + { + wordWrap = true, + alignment = TextAnchor.MiddleLeft, + }; + + EditorGUILayout.LabelField($"Version number: {Assister.Version}", styleLabel, GUILayout.ExpandWidth(true)); + +#if MERYEL_UCA_LITE_VERSION + EditorGUILayout.LabelField($"License type: Lite", styleLabel, GUILayout.ExpandWidth(true)); +#else // MERYEL_UCA_LITE_VERSION + EditorGUILayout.LabelField($"License type: Full", styleLabel, GUILayout.ExpandWidth(true)); +#endif // MERYEL_UCA_LITE_VERSION + + if (GUILayout.Button("Update")) + { + Updater.CheckUpdateForced(); + } + + if (GUILayout.Button("View changelog")) + { + Application.OpenURL("https://unitycodeassist.netlify.app/changelog"); + } + + if (GUILayout.Button("View third party notices")) + { + Application.OpenURL("https://unitycodeassist.netlify.app/thirdpartynotices"); + } + + } + } + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs.meta new file mode 100644 index 0000000..8b02d9f --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/AboutWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b773a1d4b9561324fa0bc568c62c3770 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs b/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs new file mode 100644 index 0000000..d5b7332 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + // according to documentation, https://docs.unity3d.com/2023.2/Documentation/Manual/roslyn-analyzers.html + // if analyzers are under any asmdef file, they are bound to the asmdef's scope + // to declare out analyzers globally, had to write custom AssetPostprocessor and don't use "RoslynAnalyzer" asset label + + public class AnalyzerPostProcessor : AssetPostprocessor + { + public static string OnGeneratedCSProject(string path, string content) + { + // do not add roslyn analyzers to Visual Studio projects for performance + if (Assister.GetCodeEditor(false, out var isVisualStudio, out _, out _) && isVisualStudio) + return content; + + var analyzerGroup = new StringBuilder(); + analyzerGroup.Append(NewLine); + analyzerGroup.Append(" "); + analyzerGroup.Append(NewLine); + analyzerGroup.Append(" "); + + var prefix = $"{NewLine} "; + + foreach (var analyzer in Analyzers) + { + analyzerGroup.Append(prefix); + analyzerGroup.Append(analyzer); + analyzerGroup.Append(suffix); + } + + analyzerGroup.Append(NewLine); + analyzerGroup.Append(" "); + //analyzerGroup.Append(NewLine); + + + //content = Regex.Replace(content, $"[{NewLine}]*[{NewLine}]*", $"{analyzerGroup.ToString()}$&"); + var matches = Regex.Matches(content, $"[{NewLine}]*"); + var index = matches.LastOrDefault(m => m.Success)?.Index ?? -1; + //var index = content.LastIndexOf(""); + + if (index >= 0) + content = content.Insert(index, analyzerGroup.ToString()); + + return content; + } + + private const string NewLine = "\r\n"; + + private readonly static string[] Analyzers = new string[] + { +#if MERYEL_UCA_LITE_VERSION + "Meryel.UnityCodeAssist.AnalyzersLite.dll", +#else + "Meryel.UnityCodeAssist.Analyzers.dll", +#endif + "Meryel.UnityCodeAssist.Common.dll", + "Meryel.UnityCodeAssist.Completion.dll", + "Meryel.UnityCodeAssist.CompletionInternals.dll", + "Meryel.UnityCodeAssist.Logger.dll", + "Meryel.UnityCodeAssist.MQTTnet.dll", + "Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll", + "Meryel.UnityCodeAssist.Newtonsoft.Json.dll", + "Meryel.UnityCodeAssist.ProjectData.dll", + "Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll", + "Meryel.UnityCodeAssist.Synchronizer.dll", + "Meryel.UnityCodeAssist.SynchronizerModel.dll", + "Meryel.UnityCodeAssist.VSIXLibrary.dll", + }; + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs.meta new file mode 100644 index 0000000..c2430e5 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/AnalyzerPostProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17f8bf228c22bbb438ef36b16a18652c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Assister.cs b/Packages/com.merry-yellow.code-assist/Editor/Assister.cs new file mode 100644 index 0000000..ea0f5be --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Assister.cs @@ -0,0 +1,609 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + +using CodeEditor = Unity.CodeEditor.CodeEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + public class Assister + { + public const string Version = "1.4.19"; //do NOT modify this line, except the number value, its being used by VSCode/Typescript for version detection (in exporter.ts.getVersionOfUnitySide()) + +#if MERYEL_UCA_LITE_VERSION + public const string Title = "Code Assist Lite"; +#else + public const string Title = "Code Assist"; +#endif + + [MenuItem("Tools/" + Title + "/Status", false, 1)] + static void DisplayStatusWindow() + { + StatusWindow.Display(); + } + + + [MenuItem("Tools/" + Title + "/Synchronize", false, 2)] + static void Sync() + { + EditorCoroutines.EditorCoroutineUtility.StartCoroutine(SyncAux(), MQTTnetInitializer.Publisher); + + //MQTTnetInitializer.Publisher.SendConnect(); + //Serilog.Log.Information("Code Assist is looking for more IDEs to connect to..."); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "Synchronize_MenuItem"); + } + + + [MenuItem("Tools/" + Title + "/Report error", false, 91)] + static void DisplayFeedbackWindow() + { + FeedbackWindow.Display(); + } + + [MenuItem("Tools/" + Title + "/About", false, 92)] + static void DisplayAboutWindow() + { + AboutWindow.Display(); + } + +#if MERYEL_UCA_LITE_VERSION + [MenuItem("Tools/" + Title + "/Compare versions", false, 31)] + static void CompareVersions() + { + Application.OpenURL("http://unitycodeassist.netlify.app/compare"); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "CompareVersions_MenuItem"); + } + + [MenuItem("Tools/" + Title + "/Get full version", false, 32)] + static void GetFullVersion() + { + Application.OpenURL("https://unitycodeassist.netlify.app/purchase?utm_source=unity_getfull"); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "FullVersion_MenuItem"); + } +#endif // MERYEL_UCA_LITE_VERSION + + [MenuItem("Tools/" + Title + "/Setup/Upgrade to full version", false, 65)] + public static void Upgrade() + { + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "Upgrade_MenuItem"); + +#if MERYEL_UCA_LITE_VERSION + Serilog.Log.Information("Purchase Unity Code Assist from the Asset Store or itch.io first. Then download it from the package manager or itch.io"); + return; +#else + if (GetCodeEditor(true, out var isVisualStudio, out var isVisualStudioCode, out var error)) + { + if (isVisualStudio) + { + var vsixPath = CommonTools.GetInstallerPath("CodeAssist.Full.VisualStudio.Installer.vsix"); + if (System.IO.File.Exists(vsixPath)) + { + CallVisualStudioInstaller(vsixPath); + return; + } + + var zipPath = CommonTools.GetInstallerPath("CodeAssist.Full.VisualStudio.Installer.zip"); + if (System.IO.File.Exists(zipPath)) + { + var tempVsixPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "CodeAssist.Full.VisualStudio.Installer.vsix"); + System.IO.File.Copy(zipPath, tempVsixPath, true); + + CallVisualStudioInstaller(tempVsixPath); + return; + } + + Serilog.Log.Information("Installer for Visual Studio couldn't be found at {ZipPath}. Please try re-importing the asset from the package manager", zipPath); + return; + } + else if (isVisualStudioCode) + { + var vsixPath = CommonTools.GetInstallerPath("CodeAssist.Full.VSCode.Installer.vsix"); + if (System.IO.File.Exists(vsixPath)) + { + CallVSCodeInstaller(vsixPath); + return; + } + + var zipPath = CommonTools.GetInstallerPath("CodeAssist.Full.VSCode.Installer.zip"); + if (System.IO.File.Exists(zipPath)) + { + var tempVsixPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "CodeAssist.Full.VSCode.Installer.vsix"); + System.IO.File.Copy(zipPath, tempVsixPath, true); + + CallVSCodeInstaller(tempVsixPath); + return; + } + + Serilog.Log.Information("Installer for VS Code couldn't be found at {ZipPath}. Please try re-importing the asset from the package manager", zipPath); + return; + } + } + else + { + Serilog.Log.Information(error!); + } +#endif + + } + + /* + [MenuItem("Tools/" + Title + "/Setup/Update", false, 61)] + static void Update() + { + //UnityEditor.PackageManager.Client. + } + */ + + [MenuItem("Tools/" + Title + "/Setup/Re-import package", false, 62)] + static void RepairFiles() + { + if (MQTTnetInitializer.Publisher?.Clients.Any() != true) + Serilog.Log.Information("No connected IDE found. Please start up Visual Studio or VS Code first"); + + //var cleanupPath = CommonTools.GetToolPath("CleanupObsoleteFiles.bat"); + //Execute(cleanupPath); + Cleanup.DoCleanup(); + + MQTTnetInitializer.Publisher?.SendRequestUpdate("Unity", string.Empty, true); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "Reimport_MenuItem"); + } + + [MenuItem("Tools/" + Title + "/Setup/Import files for .NET Standard 2.0", false, 63)] + static void ImportSystemBinariesForDotNetStandard20() + { + var solutionDirectory = CommonTools.GetProjectPath(); + var cSharpVersion = Cleanup.GetCSharpVersionFromUnityProjectVersionFile(solutionDirectory); + + if (cSharpVersion >= 9) + { + if (!EditorUtility.DisplayDialog("Import files for .NET Standard 2.0", + "This is not required for versions of Unity 2021.2 and newer. Do you still want to continue?", + "Okay", "Cancel")) + { + Serilog.Log.Debug("ImportNetStandard20_MenuItem cancelled via confirm dialog"); + return; + } + } + + if (MQTTnetInitializer.Publisher?.Clients.Any() != true) + Serilog.Log.Information("No connected IDE found. Please start up Visual Studio or VS Code first"); + + MQTTnetInitializer.Publisher?.SendRequestUpdate("SystemBinariesForDotNetStandard20", string.Empty, true); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "ImportNetStandard20_MenuItem"); + } + + [MenuItem("Tools/" + Title + "/Setup/Regenerate project files", false, 64)] + public static void RegenerateProjectFiles() => RegenerateProjectFilesAux(true); + + public static void RegenerateProjectFilesAux(bool showError) + { + try + { + if (GetCodeEditor(true, out _, out _, out var error)) + { + CodeEditor.Editor.CurrentCodeEditor.SyncAll(); + } + else + { + if (showError && error != null) + Serilog.Log.Information(error); + + // other similar approaches + // https://www.reddit.com/r/Unity3D/comments/s1joc6/help_with_generating_csproj_and_sln_for_github/ + // https://discussions.unity.com/t/manually-generate-sln-and-csproj-files/648686/6 + // https://discussions.unity.com/t/how-can-i-generate-csproj-files-during-continuous-integration-builds/842493/3 + // https://github.com/Unity-Technologies/UnityCsReference/blob/f45f297f342239326ea865a57a1bb8ddf93e38c6/Editor/Mono/CodeEditor/SyncVS.cs#L22 + var t = ScriptFinder.GetType123("Microsoft.Unity.VisualStudio.Editor.Cli"); + var m = t!.GetMethod("GenerateSolution", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); + m.Invoke(null, null); + } + } + catch (System.Exception ex) + { + Serilog.Log.Error(ex, "Couldn't invoke GenerateSolution"); + Serilog.Log.Information("Please 'Regenerate project files' manually. 'Edit'->'Preferences'->'External Tools'->'Regenerate project files'"); + } + } + + + static IEnumerator CallShell(string command, string ide) + { + Serilog.Log.Debug("calling shell with command: {Command}", command); + var task = Shell.UnityEditorShell.Execute(command); + task.OnLog += (logType, log) => + { + Serilog.Log.Debug("shell log: {Log}", log); + }; + task.OnExit += (code) => + { + Serilog.Log.Debug("shell exit: {Code}", code); + if (code == 0) + Serilog.Log.Information($"{ide} extension installed successfully. Please restart {ide}"); + else + Serilog.Log.Information($"{ide} extension installation failed. Please try manual installition at {CommonTools.GetInstallerPath(string.Empty)}"); + }; + yield return new Shell.ShellCommandYieldable(task); + } + + static void CallVisualStudioInstaller(string vsixPath) + { + EditorCoroutines.EditorCoroutineUtility.StartCoroutine(CallShell( + $"@for /f \"usebackq delims=\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -latest -prerelease -products * -property enginePath`) do @set enginePath=%i & if exist \"%i\\VSIXInstaller.exe\" call \"%i\\VSIXInstaller.exe\" /u:VSIXLite2.6815b720-6186-48a1-a405-1387e54b41c6 & call \"%i\\VSIXInstaller.exe\" \"{vsixPath}\"", "Visual Studio"), MQTTnetInitializer.Publisher); + } + + static void CallVSCodeInstaller(string vsixPath) + { + string command; +#if UNITY_EDITOR_WIN + command = $"code --uninstall-extension MerryYellow.uca-lite-vscode & code --install-extension \"{vsixPath}\""; +#elif UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX + command = $"code --uninstall-extension MerryYellow.uca-lite-vscode ; code --install-extension \"{vsixPath}\""; +#else + Serilog.Log.Error("invalid platform at {Location}", nameof(CallVSCodeInstaller)); + command = string.Empty; +#endif + + EditorCoroutines.EditorCoroutineUtility.StartCoroutine(CallShell(command, "VS Code"), MQTTnetInitializer.Publisher); + } + + internal static string Execute(string vsixPath, bool isVisualStudio = false, bool isVSCode = false) + { + var startInfo = new System.Diagnostics.ProcessStartInfo + { + WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden, + //startInfo.FileName = GetExePath(); + FileName = vsixPath, + //startInfo.Arguments = args; + UseShellExecute = false, + RedirectStandardOutput = true + //startInfo.WorkingDirectory = workingDirectoryPath; + }; + var process = new System.Diagnostics.Process + { + StartInfo = startInfo + }; + + try + { + process.Start(); + } + catch (System.ComponentModel.Win32Exception ex) + { + Serilog.Log.Error(ex, "Error at running bat file {File}", vsixPath); + } + + string output = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + + return output; + } + + + static IEnumerator SyncAux() + { + var clientCount = MQTTnetInitializer.Publisher?.Clients.Count() ?? 0; + MQTTnetInitializer.Publisher?.SendConnect(); + Serilog.Log.Information("Code Assist is looking for more IDEs to connect to..."); + + //yield return new WaitForSeconds(3); + yield return new EditorCoroutines.EditorWaitForSeconds(3); + + var newClientCount = MQTTnetInitializer.Publisher?.Clients.Count() ?? 0; + + var dif = newClientCount - clientCount; + + if (dif <= 0) + Serilog.Log.Information("Code Assist couldn't find any new IDE to connect to."); + else + Serilog.Log.Information("Code Assist is connected to {Dif} new IDE(s).", dif); + } + +#if MERYEL_DEBUG + + [MenuItem("Code Assist/Binary2Text")] + static void Binary2Text() + { + var filePath = CommonTools.GetInputManagerFilePath(); + var hash = Input.UnityInputManager.GetMD5Hash(filePath); + var convertedPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"UCA_IM_{hash}.txt"); + + var b = new Input.Binary2TextExec(); + b.Exec(filePath, convertedPath, detailed: false, largeBinaryHashOnly: false, hexFloat: false); + } + + [MenuItem("Code Assist/Bump InputManager")] + static void BumpInputManager() + { + Input.InputManagerMonitor.Instance.Bump(); + } + + + [MenuItem("Code Assist/Layer Check")] + static void UpdateLayers() + { + var names = UnityEditorInternal.InternalEditorUtility.layers; + var indices = names.Select(l => LayerMask.NameToLayer(l).ToString()).ToArray(); + MQTTnetInitializer.Publisher?.SendLayers(indices, names); + + var sls = SortingLayer.layers; + var sortingNames = sls.Select(sl => sl.name).ToArray(); + var sortingIds = sls.Select(sl => sl.id.ToString()).ToArray(); + var sortingValues = sls.Select(sl => sl.value.ToString()).ToArray(); + + MQTTnetInitializer.Publisher?.SendSortingLayers(sortingNames, sortingIds, sortingValues); + + /* + for (var i = 0; i < 32; i++) + { + var name = LayerMask.LayerToName(i); + if (!string.IsNullOrEmpty(name)) + { + Debug.Log(i + ":" + name); + } + } + + if (ScriptFinder.FindGameObjectOfType("Deneme", out var go)) + MQTTnetInitializer.Publisher.SendGameObject(go); + */ + } + + [MenuItem("Code Assist/Tag Check")] + static void UpdateTags() + { + Serilog.Log.Debug("Listing tags {Count}", UnityEditorInternal.InternalEditorUtility.tags.Length); + + foreach (var tag in UnityEditorInternal.InternalEditorUtility.tags) + { + if (!string.IsNullOrEmpty(tag)) + { + Serilog.Log.Debug("{Tag}", tag); + } + } + + MQTTnetInitializer.Publisher?.SendTags(UnityEditorInternal.InternalEditorUtility.tags); + + } + + [MenuItem("Code Assist/GO Check")] + + static void TestGO() + { + + var go = GameObject.Find("Deneme"); + //var go = MonoBehaviour.FindObjectOfType().gameObject; + + MQTTnetInitializer.Publisher?.SendGameObject(go); + } + + [MenuItem("Code Assist/Undo Records Test")] + static void UndoTest() + { + var undos = new List(); + var redos = new List(); + + var type = typeof(Undo); + System.Reflection.MethodInfo dynMethod = type.GetMethod("GetRecords", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); + dynMethod.Invoke(null, new object[] { undos, redos }); + + Serilog.Log.Debug("undos:{UndoCount},redos:{RedoCount}", undos.Count, redos.Count); + + var last = undos.LastOrDefault(); + if (last != null) + { + Serilog.Log.Debug("last:{Last}", last); + Serilog.Log.Debug("group:{UndoCurrentGroup},{UndoCurrentGroupName}", + Undo.GetCurrentGroup(), Undo.GetCurrentGroupName()); + } + } + + + [MenuItem("Code Assist/Undo List Test")] + static void Undo2Test() + { + + //List undoList, out int undoCursor + var undoList = new List(); + int undoCursor = int.MaxValue; + var type = typeof(Undo); + System.Reflection.MethodInfo dynMethod = type.GetMethod("GetUndoList", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); + + dynMethod = type.GetMethod("GetUndoList", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static, + null, + new System.Type[] { typeof(List), typeof(int).MakeByRefType() }, + null); + + + dynMethod.Invoke(null, new object[] { undoList, undoCursor }); + + Serilog.Log.Debug("undo count: {Count}", undoList.Count); + + } + + [MenuItem("Code Assist/Reload Domain")] + static void ReloadDomain() + { + EditorUtility.RequestScriptReload(); + } + + /* + [MenuItem("Code Assist/TEST")] + static void TEST() + { + //if (ScriptFinder.FindGameObjectOfType("Deneme_OtherScene", out var go)) + if (ScriptFinder.FindInstanceOfType("Deneme_SO", out var go, out var so)) + { + MQTTnetInitializer.Publisher.SendScriptableObject(so); + } + + ScriptFinder.DENEMEEEE(); + + + + } + */ + +#endif // MERYEL_DEBUG + + + public static void SendTagsAndLayers() + { + Serilog.Log.Debug(nameof(SendTagsAndLayers)); + + var tags = UnityEditorInternal.InternalEditorUtility.tags; + MQTTnetInitializer.Publisher?.SendTags(tags); + + var layerNames = UnityEditorInternal.InternalEditorUtility.layers; + var layerIndices = layerNames.Select(l => LayerMask.NameToLayer(l).ToString()).ToArray(); + MQTTnetInitializer.Publisher?.SendLayers(layerNames, layerIndices); + + var sls = SortingLayer.layers; + var sortingNames = sls.Select(sl => sl.name).ToArray(); + var sortingIds = sls.Select(sl => sl.id.ToString()).ToArray(); + var sortingValues = sls.Select(sl => sl.value.ToString()).ToArray(); + MQTTnetInitializer.Publisher?.SendSortingLayers(sortingNames, sortingIds, sortingValues); + +#if UNITY_6000_0_OR_NEWER + // Version 6+ only, 2022.3 doesn't have class RenderingLayerMask, even though some renderingLayerMask fields/properties are declared + + var renderingLayerCount = RenderingLayerMask.GetRenderingLayerCount(); + var renderingLayerIndices = new string[renderingLayerCount]; + var renderingLayerNames = new string[renderingLayerCount]; + for (var i = 0; i < renderingLayerCount; i++) + { + renderingLayerIndices[i] = i.ToString(); + renderingLayerNames[i] = RenderingLayerMask.RenderingLayerToName(i); + } + MQTTnetInitializer.Publisher?.SendRenderingLayers(renderingLayerNames, renderingLayerIndices); + +#endif // UNITY_6000_0_OR_NEWER + } + + public static bool GetCodeEditor(bool checkVersion, out bool isVisualStudio, out bool isVisualStudioCode, out string? error) + { + isVisualStudio = false; + isVisualStudioCode = false; + + if (CodeEditor.Editor.CurrentCodeEditor.TryGetInstallationForPath(CodeEditor.CurrentEditorInstallation, out var installation)) + { + if (installation.Name.StartsWith("Visual Studio Code")) + isVisualStudioCode = true; + else if (installation.Name.StartsWith("Visual Studio")) + isVisualStudio = true; + + if (!isVisualStudioCode && !isVisualStudio) + { + error = $"Unsupported code editor: {installation.Name}. Unity Code Assist only supports Visual Studio and Visual Studio Code"; + return false; + } + + if (installation.Name.Contains("(internal)")) + { + error = "Code editor set but not working properly. Please try updating 'Visual Studio Editor' package"; + return false; + } + + if (!checkVersion) + { + error = null; + return true; + } + + var versionRegex = new System.Text.RegularExpressions.Regex(".*\\[([\\d\\.]+)\\]"); + var versionStr = versionRegex.Match(installation.Name).Groups.ElementAtOrDefault(1)?.Value; + + if (isVisualStudioCode && !string.IsNullOrEmpty(versionStr) && (VersionCompare(versionStr!, "1.76") < 0)) + { + error = $"Version {versionStr} of Visual Studio Code is not supported by Unity Code Assist. Please update Visual Studio Code"; + return false; + } + + if (isVisualStudio && !string.IsNullOrEmpty(versionStr) && (VersionCompare(versionStr!, "17") < 0)) + { + error = $"Version {versionStr} of Visual Studio is not supported by Unity Code Assist. Please update Visual Studio"; + return false; + } + + error = null; + return true; + } + else + { + error = "No code editor found. Please set it through 'Edit'->'Preferences'->'External Tools'->'External Script Editor'"; + return false; + } + + + } + + + //https://www.geeksforgeeks.org/compare-two-version-numbers/amp/ + public static int VersionCompare(string v1, string v2) + { + // vnum stores each numeric + + // part of version + + int vnum1 = 0, vnum2 = 0; + + // loop until both string are + // processed + + for (int i = 0, j = 0; (i < v1.Length || j < v2.Length);) + + { + // storing numeric part of + // version 1 in vnum1 + while (i < v1.Length && v1[i] != '.') + { + + vnum1 = vnum1 * 10 + (v1[i] - '0'); + + i++; + } + // storing numeric part of + + // version 2 in vnum2 + + while (j < v2.Length && v2[j] != '.') + { + vnum2 = vnum2 * 10 + (v2[j] - '0'); + j++; + } + if (vnum1 > vnum2) + return 1; + + if (vnum2 > vnum1) + return -1; + + // if equal, reset variables and + + // go for next numeric part + vnum1 = vnum2 = 0; + i++; + j++; + } + + return 0; + } + + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Assister.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Assister.cs.meta new file mode 100644 index 0000000..643c2ae --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Assister.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 394bf783968f6dd4ab2ca0e1e7258147 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs b/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs new file mode 100644 index 0000000..854fc8b --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs @@ -0,0 +1,390 @@ +using System; +using System.IO; +using System.Linq; +using System.Security.AccessControl; +using System.Security.Principal; + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + // copied from Exporter.cs in VSIX + public static class Cleanup + { + public static bool DoCleanup() + { + var assetsPath = UnityEngine.Application.dataPath; + + var _solutionDirectory = CommonTools.GetProjectPath(); + var destination = _solutionDirectory; + var oldDestination = assetsPath; + + + var succeed = true; + try + { + Cleanup1(oldDestination); + Cleanup2(oldDestination); + Cleanup3(oldDestination, _solutionDirectory); + Cleanup4(oldDestination); + } + catch (Exception ex) + { + succeed = false; + Serilog.Log.Error(ex, "DoCleanup failed at {Destination}", destination); + } + + return succeed; + } + + + private static void DeleteFileAndItsMeta(string filePath) + { + if (File.Exists(filePath)) + { + Serilog.Log.Debug("Deleting file {File}", filePath); + //File.Delete(filePath); + DeleteFileAux(filePath); + Serilog.Log.Debug("Deleted file {File} {Exists}", filePath, File.Exists(filePath)); + } + var metaFilePath = filePath + ".meta"; + if (File.Exists(metaFilePath)) + { + Serilog.Log.Debug("Deleting meta file {File}", metaFilePath); + //File.Delete(metaFilePath); + DeleteFileAux(metaFilePath); + Serilog.Log.Debug("Deleted file {File} {Exists}", metaFilePath, File.Exists(metaFilePath)); + } + } + + private static bool IsDirectoryExistsAndEmpty(string path) + { + return Directory.Exists(path) && !Directory.EnumerateFileSystemEntries(path).Any(); + } + + private static void DeleteDirectoryAndItsMeta(string directoryPath) + { + if (IsDirectoryExistsAndEmpty(directoryPath)) + { + Serilog.Log.Debug("Deleting directory {Dir}", directoryPath); + Directory.Delete(directoryPath); + Serilog.Log.Debug("Deleted directory {Dir} {Exists}", directoryPath, IsDirectoryExistsAndEmpty(directoryPath)); + + var metaFilePath = directoryPath + ".meta"; + if (File.Exists(metaFilePath)) + { + Serilog.Log.Debug("Deleting directory meta file {File}", metaFilePath); + //File.Delete(metaFilePath); + DeleteFileAux(metaFilePath); + Serilog.Log.Debug("Deleted directory meta file {File} {Exists}", metaFilePath, File.Exists(metaFilePath)); + } + } + } + + private static void DeleteFileAux(string filePath) + { + try + { + File.Delete(filePath); + } + catch (UnauthorizedAccessException) + { + var fileDirectoryPath = Path.GetDirectoryName(filePath); + SetEveryoneAccessToDirectory(fileDirectoryPath, out _); + TakeOwnership(filePath); + File.Delete(filePath); + } + } + + + /// + /// Set Everyone Full Control permissions for selected directory + /// + /// + /// + static bool SetEveryoneAccessToDirectory(string dirName, out string _lastError) + { + + try + { + // Make sure directory exists + if (Directory.Exists(dirName) == false) + throw new Exception(string.Format("Directory {0} does not exist, so permissions cannot be set.", dirName)); + + // Get directory access info + DirectoryInfo dinfo = new DirectoryInfo(dirName); + DirectorySecurity dSecurity = dinfo.GetAccessControl(); + + // Add the FileSystemAccessRule to the security settings. + dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); + + // Set the access control + dinfo.SetAccessControl(dSecurity); + + _lastError = String.Format("Everyone FullControl Permissions were set for directory {0}", dirName); + + return true; + + } + catch (Exception ex) + { + _lastError = ex.Message; + return false; + } + + + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// 7 if C# 7.3 or lower, + /// 8 if C# 8.0 (.netstandard2.0), + /// 9 if C# 9.0 (.netstandard2.1), + /// -1 if error + /// + public static int GetCSharpVersionFromUnityProjectVersionFile(string? solutionDirectory) + { + if (string.IsNullOrEmpty(solutionDirectory)) + return -1; + + var projectVersionFilePath = System.IO.Path.Combine(solutionDirectory, "ProjectSettings/ProjectVersion.txt"); + if (!System.IO.File.Exists(projectVersionFilePath)) + return -1; + + + string? version = null; + string[]? readText = null; + try + { + readText = System.IO.File.ReadAllLines(projectVersionFilePath); + // format is m_EditorVersion: 2018.2.0b7 + string[] versionText = readText[0].Split(' '); + version = versionText[1]; + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "Project version file parsing error {FirstLine}", readText?.FirstOrDefault()); + return -1; + } + + if (version == null) + { + Serilog.Log.Error("Parsed project version is null"); + return -1; + } + + // see my personal notes for Unity version X C# version table + // which is at OneNote->ShinSekai->CEPostRelease->UnityCompilerC#VersionTable + + if (version.StartsWith("5.") || version.StartsWith("2017.") || + version.StartsWith("2018.") || version.StartsWith("2019.") || version.StartsWith("2020.1.")) + return 7; + + if (version.StartsWith("2020.") || version.StartsWith("2021.1.")) + return 8; + + if (version.StartsWith("2021.") || version.StartsWith("2022.") || + version.StartsWith("2023.") || version.StartsWith("6000.")) + return 9; + + Serilog.Log.Error("Parsed project version is unknown {Version}", version); + return -1; + } + + private static void TakeOwnership(string filename) + { + // Remove read-only attribute + File.SetAttributes(filename, File.GetAttributes(filename) & ~FileAttributes.ReadOnly); + + FileSecurity security = new FileSecurity(); + + SecurityIdentifier sid = WindowsIdentity.GetCurrent().User; + security.SetOwner(sid); + security.SetAccessRule(new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow)); + + File.SetAccessControl(filename, security); + } + + private static void Cleanup1(string destination) + { + // prior to version UCA.v.1.1.9, syncronizerModel and yamlDotNet dll files were located at ProjectPath/Assets/Plugins/CodeAssist/Editor/ExternalReferences/Release/netstandard2.0 + // with version UCA.v.1.1.9 and newer versions, they are located at ProjectPath/Assets/Plugins/CodeAssist/Editor/ExternalReferences + // delete ProjectPath/Assets/Plugins/CodeAssist/Editor/ExternalReferences/Release + var oldBinariesDirectory = Path.Combine(destination, "Plugins/CodeAssist/Editor/ExternalReferences/Release/netstandard2.0"); + if (Directory.Exists(oldBinariesDirectory)) + { + // dont just delete the directory for security reasons, instead delete binary files one by one + + Serilog.Log.Debug("Old binaries directory exists at {Location}", oldBinariesDirectory); + + var files = new string[] + { + "UnityCodeAssistSynchronizerModel.deps.json", + "UnityCodeAssistSynchronizerModel.dll", + "UnityCodeAssistSynchronizerModel.pdb", + "UnityCodeAssistYamlDotNet.deps.json", + "UnityCodeAssistYamlDotNet.dll", + "UnityCodeAssistYamlDotNet.pdb", + "UnityCodeAssistYamlDotNet.xml", + }; + + foreach (var file in files) + { + var filePath = Path.Combine(oldBinariesDirectory, file); + DeleteFileAndItsMeta(filePath); + } + + DeleteDirectoryAndItsMeta(oldBinariesDirectory); + } + + var oldBinariesDirectory2 = Path.Combine(destination, "Plugins/CodeAssist/Editor/ExternalReferences/Release"); + DeleteDirectoryAndItsMeta(oldBinariesDirectory2); + + + // also delete old vsix, it's now renamed as Meryel.UnityCodeAssist.VSIX.vsix + var oldVsixFilePath = Path.Combine(destination, "Plugins/CodeAssist/UnityCodeAssistVSIX.vsix"); + DeleteFileAndItsMeta(oldVsixFilePath); + } + + private static void Cleanup2(string destination) + { + // with version 1.1.12, dll files has been customized (renamed and changed their namespace) (so that they dont conflict with user's other dll files, if he tries to use them) + // delete AsyncIO.dll, and use Meryel.UnityCodeAssist.AsyncIO.dll instead + var files = new string[] + { + "AsyncIO.dll", + "NaCl.dll", + "NetMQ.dll", + "Serilog.dll", + "Serilog.Sinks.PersistentFile.dll", + }; + + var binariesDirectory = Path.Combine(destination, "Plugins/CodeAssist/Editor/ExternalReferences"); + + foreach (var file in files) + { + var filePath = Path.Combine(binariesDirectory, file); + DeleteFileAndItsMeta(filePath); + } + } + + private static void Cleanup3(string destination, string solutionDirectory) + { + // as it turns out, .netstandard2.1 does not need system binaries (for C#9.0, unity versions 2021.2 and newer) + + //var cSharpVersion = CommonVS.VSCommonTools.GetCSharpVersionFromUnityProjectVersionFile(solutionDirectory); + var cSharpVersion = GetCSharpVersionFromUnityProjectVersionFile(solutionDirectory); + if (cSharpVersion < 9) + return; + + var systemBinaryFiles = new string[] + { + "System.Buffers.dll", + "System.Memory.dll", + "System.Runtime.CompilerServices.Unsafe.dll", + "System.Threading.Tasks.Extensions.dll", + }; + + var binariesDirectory = Path.Combine(destination, "Plugins/CodeAssist/Editor/ExternalReferences"); + + foreach (var file in systemBinaryFiles) + { + var filePath = Path.Combine(binariesDirectory, file); + DeleteFileAndItsMeta(filePath); + } + + } + + private static void Cleanup4(string destination) + { + // with version 1.2, asset directory moved from Assets/Plugins/CodeAssist to Packages/com.merry-yellow.code-assist + // so remove all files from the old directory + + var directory = Path.Combine(destination, "Plugins/CodeAssist/Editor"); + + var content = new string[] + { +@"TinyJson/JsonWriter.cs", +@"TinyJson/JsonParser.cs", +@"Preferences/RegistryMonitor.cs", +@"Preferences/PreferenceStorageAccessor.cs", +@"Preferences/PreferenceMonitor.cs", +@"Preferences/PreferenceEntryHolder.cs", +@"Logger/UnitySink.cs", +@"Logger/MemorySink.cs", +@"Logger/ELogger.cs", +@"Logger/DomainHashEnricher.cs", +@"Logger/CommonTools.cs", +@"Logger/Attributes.cs", +@"Input/UnityInputManager.cs", +@"Input/Text2Yaml.cs", +@"Input/InputManagerMonitor.cs", +@"Input/Binary2TextExec.cs", +@"ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.xml", +@"ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.deps.json", +@"ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.deps.json", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.xml", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.Sinks.PersistentFile.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.Sinks.PersistentFile.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.Sinks.PersistentFile.deps.json", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.Serilog.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.NetMQ.xml", +@"ExternalReferences/Meryel.UnityCodeAssist.NetMQ.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.NetMQ.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.NetMQ.deps.json", +@"ExternalReferences/Meryel.UnityCodeAssist.NaCl.xml", +@"ExternalReferences/Meryel.UnityCodeAssist.NaCl.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.NaCl.dll", +@"ExternalReferences/Meryel.UnityCodeAssist.AsyncIO.pdb", +@"ExternalReferences/Meryel.UnityCodeAssist.AsyncIO.dll", +@"EditorCoroutines/EditorWindowCoroutineExtension.cs", +@"EditorCoroutines/EditorWaitForSeconds.cs", +@"EditorCoroutines/EditorCoroutineUtility.cs", +@"EditorCoroutines/EditorCoroutine.cs", +@"UnityClassExtensions.cs", +@"StatusWindow.cs", +@"ScriptFinder.cs", +@"NetMQPublisher.cs", +@"NetMQInitializer.cs", +@"Monitor.cs", +@"MerryYellow.CodeAssist.Editor.asmdef", +@"MainThreadDispatcher.cs", +@"LazyInitializer.cs", +@"FeedbackWindow.cs", +@"Assister.cs", +@"AboutWindow.cs", +//@"TinyJson", +//@"Preferences", +//@"Logger", +//@"Input", +//@"ExternalReferences", +//@"EditorCoroutines", + }; + + foreach (var c in content) + { + var path = Path.Combine(directory, c); + DeleteFileAndItsMeta(path); + } + } + + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs.meta new file mode 100644 index 0000000..9d5dd2d --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Cleanup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f03bf638663c69e41a0cc01055bc4ad4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines.meta b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines.meta new file mode 100644 index 0000000..8d18ffa --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90e331117e4d0f4428e4a702405e3a8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs new file mode 100644 index 0000000..adcb8f9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs @@ -0,0 +1,157 @@ +/* + * Derived from Unity package + * https://docs.unity3d.com/Packages/com.unity.editorcoroutines@0.0/api/Unity.EditorCoroutines.Editor.html + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +//namespace Unity.EditorCoroutines.Editor +namespace Meryel.UnityCodeAssist.Editor.EditorCoroutines +{ + /// + /// A handle to an EditorCoroutine, can be passed to EditorCoroutineUtility methods to control lifetime. + /// + public class EditorCoroutine + { + private struct YieldProcessor + { + enum DataType : byte + { + None = 0, + WaitForSeconds = 1, + EditorCoroutine = 2, + AsyncOP = 3, + } + struct ProcessorData + { + public DataType type; + public double targetTime; + public object current; + } + + ProcessorData data; + + public void Set(object yield) + { + if (yield == data.current) + return; + + var type = yield.GetType(); + var dataType = DataType.None; + double targetTime = -1; + + if(type == typeof(EditorWaitForSeconds)) + { + targetTime = EditorApplication.timeSinceStartup + (yield as EditorWaitForSeconds).WaitTime; + dataType = DataType.WaitForSeconds; + } + else if(type == typeof(EditorCoroutine)) + { + dataType = DataType.EditorCoroutine; + } + else if(type == typeof(AsyncOperation) || type.IsSubclassOf(typeof(AsyncOperation))) + { + dataType = DataType.AsyncOP; + } + + data = new ProcessorData { current = yield, targetTime = targetTime, type = dataType }; + } + + public bool MoveNext(IEnumerator enumerator) + { + var advance = data.type switch + { + DataType.WaitForSeconds => data.targetTime <= EditorApplication.timeSinceStartup, + DataType.EditorCoroutine => (data.current as EditorCoroutine).m_IsDone, + DataType.AsyncOP => (data.current as AsyncOperation).isDone, + _ => data.current == enumerator.Current,//a IEnumerator or a plain object was passed to the implementation + }; + if (advance) + { + data = default;// (ProcessorData); + return enumerator.MoveNext(); + } + return true; + } + } + + internal WeakReference m_Owner; + IEnumerator m_Routine; + YieldProcessor m_Processor; + + bool m_IsDone; + + internal EditorCoroutine(IEnumerator routine) + { + m_Owner = null; + m_Routine = routine; + EditorApplication.update += MoveNext; + } + + internal EditorCoroutine(IEnumerator routine, object owner) + { + m_Processor = new YieldProcessor(); + m_Owner = new WeakReference(owner); + m_Routine = routine; + EditorApplication.update += MoveNext; + } + + internal void MoveNext() + { + if (m_Owner != null && !m_Owner.IsAlive) + { + EditorApplication.update -= MoveNext; + return; + } + + bool done = ProcessIEnumeratorRecursive(m_Routine); + m_IsDone = !done; + + if (m_IsDone) + EditorApplication.update -= MoveNext; + } + + static readonly Stack kIEnumeratorProcessingStack = new Stack(32); + private bool ProcessIEnumeratorRecursive(IEnumerator enumerator) + { + var root = enumerator; + while(enumerator.Current as IEnumerator != null) + { + kIEnumeratorProcessingStack.Push(enumerator); + enumerator = enumerator.Current as IEnumerator; + } + + //process leaf + m_Processor.Set(enumerator.Current); + var result = m_Processor.MoveNext(enumerator); + + while (kIEnumeratorProcessingStack.Count > 1) + { + if (!result) + { + result = kIEnumeratorProcessingStack.Pop().MoveNext(); + } + else + kIEnumeratorProcessingStack.Clear(); + } + + if (kIEnumeratorProcessingStack.Count > 0 && !result && root == kIEnumeratorProcessingStack.Pop()) + { + result = root.MoveNext(); + } + + return result; + } + + internal void Stop() + { + m_Owner = null; + m_Routine = null; + EditorApplication.update -= MoveNext; + } + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs.meta new file mode 100644 index 0000000..19b7380 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c1e3c1846518ae4da27dcaf08ef85f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs new file mode 100644 index 0000000..2427c36 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs @@ -0,0 +1,128 @@ +/* + * Derived from Unity package + * https://docs.unity3d.com/Packages/com.unity.editorcoroutines@0.0/api/Unity.EditorCoroutines.Editor.html + */ + +using System.Collections; +using UnityEngine; + +//namespace Unity.EditorCoroutines.Editor +namespace Meryel.UnityCodeAssist.Editor.EditorCoroutines +{ + public static class EditorCoroutineUtility + { + /// + /// Starts an EditorCoroutine with the specified owner object. + /// If the garbage collector collects the owner object, while the resulting coroutine is still executing, the coroutine will stop running. + /// + /// using System.Collections; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// + /// public class ExampleWindow : EditorWindow + /// { + /// int m_Updates = 0; + /// void OnEnable() + /// { + /// EditorCoroutineUtility.StartCoroutine(CountEditorUpdates(), this); + /// } + /// + /// IEnumerator CountEditorUpdates() + /// { + /// while (true) + /// { + /// ++m_Updates; + /// yield return null; + /// } + /// } + /// } + /// + /// + /// IEnumerator to iterate over. + /// Object owning the coroutine. + /// + /// Only types that don't inherit from UnityEngine.Object will get collected the next time the GC runs instead of getting null-ed immediately. + /// + /// A handle to an EditorCoroutine. + public static EditorCoroutine StartCoroutine(IEnumerator routine, object owner) + { + return new EditorCoroutine(routine, owner); + } + + /// + /// This method starts an EditorCoroutine without an owning object. The EditorCoroutine runs until it completes or is canceled using StopCoroutine. + /// + /// using System.Collections; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// using UnityEngine; + /// + /// public class ExampleWindow : EditorWindow + /// { + /// void OnEnable() + /// { + /// EditorCoroutineUtility.StartCoroutineOwnerless(LogTimeSinceStartup()); + /// } + /// + /// IEnumerator LogTimeSinceStartup() + /// { + /// while (true) + /// { + /// Debug.LogFormat("Time since startup: {0} s", Time.realtimeSinceStartup); + /// yield return null; + /// } + /// } + /// } + /// + /// + /// Generator function to execute. + /// A handle to an EditorCoroutine. + public static EditorCoroutine StartCoroutineOwnerless(IEnumerator routine) + { + return new EditorCoroutine(routine); + } + + /// + /// Immediately stop an EditorCoroutine. This method is safe to call on an already completed EditorCoroutine. + /// + /// using System.Collections; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// using UnityEngine; + /// + /// public class ExampleWindow : EditorWindow + /// { + /// EditorCoroutine m_LoggerCoroutine; + /// void OnEnable() + /// { + /// m_LoggerCoroutine = EditorCoroutineUtility.StartCoroutineOwnerless(LogRunning()); + /// } + /// + /// void OnDisable() + /// { + /// EditorCoroutineUtility.StopCoroutine(m_LoggerCoroutine); + /// } + /// + /// IEnumerator LogRunning() + /// { + /// while (true) + /// { + /// Debug.Log("Running"); + /// yield return null; + /// } + /// } + /// } + /// + /// + /// A handle to an EditorCoroutine. + public static void StopCoroutine(EditorCoroutine coroutine) + { + if (coroutine == null) + { + Serilog.Log.Warning("EditorCoroutine handle is null."); + return; + } + coroutine.Stop(); + } + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs.meta new file mode 100644 index 0000000..bf55147 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorCoroutineUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3d162669c5693a47bf42827686f73d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs new file mode 100644 index 0000000..347c7f5 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs @@ -0,0 +1,49 @@ +/* + * Derived from Unity package + * https://docs.unity3d.com/Packages/com.unity.editorcoroutines@0.0/api/Unity.EditorCoroutines.Editor.html + */ + +//namespace Unity.EditorCoroutines.Editor +namespace Meryel.UnityCodeAssist.Editor.EditorCoroutines +{ + /// + /// Suspends the EditorCoroutine execution for the given amount of seconds, using unscaled time. + /// The coroutine execution continues after the specified time has elapsed. + /// + /// using System.Collections; + /// using UnityEngine; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// + /// public class MyEditorWindow : EditorWindow + /// { + /// IEnumerator PrintEachSecond() + /// { + /// var waitForOneSecond = new EditorWaitForSeconds(1.0f); + /// + /// while (true) + /// { + /// yield return waitForOneSecond; + /// Debug.Log("Printing each second"); + /// } + /// } + /// } + /// + /// + public class EditorWaitForSeconds + { + /// + /// The time to wait in seconds. + /// + public float WaitTime { get; } + + /// + /// Creates a instruction object for yielding inside a generator function. + /// + /// The amount of time to wait in seconds. + public EditorWaitForSeconds(float time) + { + WaitTime = time; + } + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs.meta new file mode 100644 index 0000000..8bce721 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWaitForSeconds.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d8612ff14468214aad7600138a50b79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs new file mode 100644 index 0000000..25014c9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs @@ -0,0 +1,109 @@ +/* + * Derived from Unity package + * https://docs.unity3d.com/Packages/com.unity.editorcoroutines@0.0/api/Unity.EditorCoroutines.Editor.html + */ + +using System.Collections; +using UnityEditor; +using UnityEngine; + +//namespace Unity.EditorCoroutines.Editor +namespace Meryel.UnityCodeAssist.Editor.EditorCoroutines +{ + public static class EditorWindowCoroutineExtension + { + /// + /// Start an EditorCoroutine, owned by the calling EditorWindow instance. + /// + /// using System.Collections; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// + /// public class ExampleWindow : EditorWindow + /// { + /// void OnEnable() + /// { + /// this.StartCoroutine(CloseWindowDelayed()); + /// } + /// + /// IEnumerator CloseWindowDelayed() //close the window after 1000 frames have elapsed + /// { + /// int count = 1000; + /// while (count > 0) + /// { + /// yield return null; + /// } + /// Close(); + /// } + /// } + /// + /// + /// + /// + public static EditorCoroutine StartCoroutine(this EditorWindow window, IEnumerator routine) + { + return new EditorCoroutine(routine, window); + } + + /// + /// Immediately stop an EditorCoroutine that was started by the calling instance. This method is safe to call on an already completed EditorCoroutine. + /// + /// using System.Collections; + /// using Unity.EditorCoroutines.Editor; + /// using UnityEditor; + /// using UnityEngine; + /// + /// public class ExampleWindow : EditorWindow + /// { + /// EditorCoroutine coroutine; + /// void OnEnable() + /// { + /// coroutine = this.StartCoroutine(CloseWindowDelayed()); + /// } + /// + /// private void OnDisable() + /// { + /// this.StopCoroutine(coroutine); + /// } + /// + /// IEnumerator CloseWindowDelayed() + /// { + /// while (true) + /// { + /// Debug.Log("Running"); + /// yield return null; + /// } + /// } + /// } + /// + /// + /// + public static void StopCoroutine(this EditorWindow window, EditorCoroutine coroutine) + { + if(coroutine == null) + { + Serilog.Log.Warning("Provided EditorCoroutine handle is null."); + return; + } + + if(coroutine.m_Owner == null) + { + Serilog.Log.Error("The EditorCoroutine is ownerless. Please use EditorCoroutineEditor.StopCoroutine to terminate such coroutines."); + return; + } + + if (!coroutine.m_Owner.IsAlive) + return; //The EditorCoroutine's owner was already terminated execution will cease next time it is processed + + var owner = coroutine.m_Owner.Target as EditorWindow; + + if (owner == null || owner != null && owner != window) + { + Serilog.Log.Error("The EditorCoroutine is owned by another object: {0}.", coroutine.m_Owner.Target); + return; + } + + EditorCoroutineUtility.StopCoroutine(coroutine); + } + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs.meta new file mode 100644 index 0000000..d127e02 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/EditorCoroutines/EditorWindowCoroutineExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64c15e0c4e36aa84193d4acb3c63afc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences.meta new file mode 100644 index 0000000..90faec9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c442647f0e4e1ed40b80269bf6a4d02e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll new file mode 100644 index 0000000..c3c274e Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll.meta new file mode 100644 index 0000000..a7d754d --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.AnalyzersLite.dll.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 37e44dd86f563cf40a81ef1fdf1f1b54 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll new file mode 100644 index 0000000..c3c4993 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll.meta new file mode 100644 index 0000000..97944ae --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Common.dll.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 7d7e4808a93371242b38476718f4d4cc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll new file mode 100644 index 0000000..f449b4b Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll.meta new file mode 100644 index 0000000..53bf5ef --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Completion.dll.meta @@ -0,0 +1,43 @@ +fileFormatVersion: 2 +guid: ed466bfa2ad216b41acde183e7706352 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll new file mode 100644 index 0000000..16e3c9a Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll.meta new file mode 100644 index 0000000..6b31d01 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.CompletionInternals.dll.meta @@ -0,0 +1,43 @@ +fileFormatVersion: 2 +guid: e70477d38c7ca2841971b35549d1477f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll new file mode 100644 index 0000000..8ef429a Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll.meta new file mode 100644 index 0000000..d33a8d1 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Logger.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: aaca88d50145a3041a4ccab964c5793d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll new file mode 100644 index 0000000..78b77b9 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll.meta new file mode 100644 index 0000000..a6d50e7 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.Extensions.ManagedClient.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 6d55f65d499dd354a9c086ab6420c8f1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll new file mode 100644 index 0000000..11ef841 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll.meta new file mode 100644 index 0000000..173a623 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.MQTTnet.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: dfd80cce2d0a99b4ba669e989eceafe5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll new file mode 100644 index 0000000..e045d4c Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..e759cfa --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Newtonsoft.Json.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4adc17866ec41ac4e9ce6c47070aeef5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll new file mode 100644 index 0000000..6ff2ff4 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll.meta new file mode 100644 index 0000000..36dd2f6 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.ProjectData.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: ca15dd8e239d5d6468333cbdacbb55d2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll new file mode 100644 index 0000000..21b7617 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll.meta new file mode 100644 index 0000000..1ebfba2 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.RoslynAnalyzerManager.dll.meta @@ -0,0 +1,43 @@ +fileFormatVersion: 2 +guid: 3ff40589a33e8a2458503b2391a96a83 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll new file mode 100644 index 0000000..39ff9ac Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll.meta new file mode 100644 index 0000000..6a9dcb8 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.Synchronizer.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 94a257e1b1239d94589fe96db62b03a7 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll new file mode 100644 index 0000000..5644402 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll.meta new file mode 100644 index 0000000..ecf9582 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.SynchronizerModel.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 849ce1048cc324a46b0fe21149770a3f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll new file mode 100644 index 0000000..1a72285 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll.meta new file mode 100644 index 0000000..4d045a9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.VSIXLibrary.dll.meta @@ -0,0 +1,43 @@ +fileFormatVersion: 2 +guid: dd39e32872afc47418c75a05b559debf +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll new file mode 100644 index 0000000..b45dc85 Binary files /dev/null and b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll differ diff --git a/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll.meta b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll.meta new file mode 100644 index 0000000..8a2ebdb --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ExternalReferences/Meryel.UnityCodeAssist.YamlDotNet.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 582b34ab8eec62a4c87693272b9bc6ab +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs b/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs new file mode 100644 index 0000000..ab5e0d5 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs @@ -0,0 +1,181 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + public class FeedbackWindow : EditorWindow + { + + GUIStyle? styleLabel; + + public static void Display() + { + MQTTnetInitializer.Publisher?.SendRequestInternalLog(); + + // Get existing open window or if none, make a new one: + var window = GetWindow(); + window.Show(); + + Serilog.Log.Debug("Displaying feedback window"); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "FeedbackWindow_Display"); + } + + + private void OnEnable() + { + //**--icon + //var icon = AssetDatabase.LoadAssetAtPath("Assets/Sprites/Gear.png"); + //titleContent = new GUIContent("Code Assist", icon); + titleContent = new GUIContent("Code Assist Feedback"); + } + + private void OnGUI() + { + var errorCount = Logger.ELogger.GetErrorCountInInternalLog(); + var warningCount = Logger.ELogger.GetWarningCountInInternalLog(); + var logContent = Logger.ELogger.GetInternalLogContent(); + if (!string.IsNullOrEmpty(Logger.ELogger.VsInternalLog)) + logContent += Logger.ELogger.VsInternalLog; + + styleLabel ??= new GUIStyle(GUI.skin.label) + { + wordWrap = true, + alignment = TextAnchor.MiddleCenter, + }; + + if (errorCount > 0) + EditorGUILayout.LabelField($"{errorCount} error(s) found in logs. Please submit a feedback (via e-mail, Discord or GitHub) with the logs if possible.", styleLabel, GUILayout.ExpandWidth(true)); + else if (warningCount > 0) + EditorGUILayout.LabelField($"{warningCount} warnings(s) found in logs. Please submit a feedback (via e-mail, Discord or GitHub) with the logs if possible.", styleLabel, GUILayout.ExpandWidth(true)); + else + EditorGUILayout.LabelField("No errors found in logs. Please submit a feedback (via e-mail, Discord or GitHub) describing what went wrong or unexpected.", styleLabel, GUILayout.ExpandWidth(true)); + + if (GUILayout.Button("Send e-mail")) + { + var uri = "mailto:merryyellow@outlook.com"; + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(uri)); + } + + if (GUILayout.Button("Send Discord message")) + { + //var uri = "discord://invites/2CgKHDq"; + var uri = "https://discord.gg/2CgKHDq"; + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(uri)); + } + + if (GUILayout.Button("Submit GitHub issue")) + { + var uri = "https://github.com/merryyellow/Unity-Code-Assist/issues/new/choose"; + Application.OpenURL(uri); + } + + EditorGUILayout.Separator(); + + if (GUILayout.Button("Open Unity full log")) + { + var filePath = Logger.ELogger.FilePath; + System.Diagnostics.Process.Start(filePath); + } + if (GUILayout.Button("Reveal Unity full log")) + { + var filePath = Logger.ELogger.FilePath; + ShowInFileExplorer(filePath); + } + + if (GUILayout.Button("Open Visual Studio full log")) + { + var filePath = Logger.ELogger.VSFilePath; + System.Diagnostics.Process.Start(filePath); + } + if (GUILayout.Button("Reveal Visual Studio full log")) + { + var filePath = Logger.ELogger.VSFilePath; + ShowInFileExplorer(filePath); + } + + if (GUILayout.Button("Copy recent logs to clipboard")) + { + GUIUtility.systemCopyBuffer = logContent; + } + + EditorGUILayout.LabelField("Recent logs:", styleLabel, GUILayout.ExpandWidth(true)); + EditorGUILayout.SelectableLabel(logContent, EditorStyles.textArea, GUILayout.ExpandHeight(true)); + } + + public static void ShowInFileExplorer(string? filePath) + { + if (string.IsNullOrEmpty(filePath)) + { + Serilog.Log.Error("Argument {Arg} is null or empty at {Location}", nameof(filePath), nameof(ShowInFileExplorer)); + return; + } + + filePath = System.IO.Path.GetFullPath(filePath); + + if (!System.IO.File.Exists(filePath) && !System.IO.Directory.Exists(filePath)) + { + Serilog.Log.Error("Argument {Arg} is not found at {Location}, value: {Value}", nameof(filePath), nameof(ShowInFileExplorer), filePath); + return; + } + + if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows)) + { + // Windows: highlight the file in Explorer + System.Diagnostics.Process.Start("explorer.exe", $"/select,\"{filePath}\""); + } + else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX)) + { + // macOS: reveal in Finder + System.Diagnostics.Process.Start("open", $"-R \"{filePath}\""); + } + else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Linux)) + { + // Linux: open containing folder in a common file manager + string? directory = System.IO.Path.GetDirectoryName(filePath); + if (directory == null) + return; + + string[] managers = { "xdg-open", "nautilus", "dolphin", "nemo", "thunar" }; + + foreach (string manager in managers) + { + if (TryStart(manager, directory)) + return; // success + } + + Serilog.Log.Error("No supported file manager found to open the directory at {Location}", nameof(ShowInFileExplorer)); + } + else + { + Serilog.Log.Error("Unsupported OS platform at {Location}", nameof(ShowInFileExplorer)); + } + + // static local function for cleaner structure + static bool TryStart(string command, string args) + { + try + { + System.Diagnostics.Process.Start(command, $"\"{args}\""); + return true; + } + catch + { + return false; + } + } + } + + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs.meta new file mode 100644 index 0000000..033382b --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/FeedbackWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f84a1c080c184e48920a0124c3e9257 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input.meta b/Packages/com.merry-yellow.code-assist/Editor/Input.meta new file mode 100644 index 0000000..9fdaf09 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d2480df7d4d1ec4448a90b6a15026eeb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs b/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs new file mode 100644 index 0000000..6313183 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using UnityEditor; +using UnityEngine; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +//namespace UTJ.UnityCommandLineTools +namespace Meryel.UnityCodeAssist.Editor.Input +{ + // + // bin2textをUnityEditorから実行する為のClass + // programed by Katsumasa.Kimura + // + public class Binary2TextExec : EditorToolExec + { + public Binary2TextExec() : base("binary2text") { } + + // + // bin2text filePath outPath options + // /summary> + public int Exec(string filePath, string outPath, string options) + { + var args = string.Format(@"""{0}"" ""{1}"" {2}", filePath, outPath, options); + return Exec(args); + } + + public int Exec(string filePath, string outPath, bool detailed = false, bool largeBinaryHashOnly = false, bool hexFloat = false) + { + //var args = string.Format(@"""{0}"" ""{1}"" {2}", filePath, outPath, options); + var args = string.Format(@"""{0}"" ""{1}""", filePath, outPath); + + if (detailed) + args += " -detailed"; + if (largeBinaryHashOnly) + args += " -largebinaryhashonly"; + if (hexFloat) + args += " -hexfloat"; + + return Exec(args); + } + } + + // + // UnityEditorに含まれるコマンドラインツールを実行する為の基底Class + // programed by Katsumasa.Kimura + // + public class EditorToolExec + { + // + // UnityEditorがインストールされているディレクトリへのパス + // + protected string mEditorPath; + + // + // Toolsディレクトリへのパス + // + protected string mToolsPath; + + // + // 実行ファイル名 + // + protected string mExecFname; + + // + // 実行ファイルへのフルパス + // + protected string mExecFullPath; + + // + // 実行結果のOUTPUT + // + private string? mOutput; + + // + // 実行結果のOUTPUT + // + public string? Output + { + get { return mOutput; } + } + + // + // コンストラクタ + // + // mExecFname : 実行ファイル名 + // + // /summary> + public EditorToolExec(string mExecFname) + { + mEditorPath = Path.GetDirectoryName(EditorApplication.applicationPath); + mToolsPath = Path.Combine(mEditorPath, @"Data/Tools"); + this.mExecFname = mExecFname; + //var files = Directory.GetFiles(mToolsPath, mExecFname, SearchOption.AllDirectories); + var files = Directory.GetFiles(mEditorPath, mExecFname + "*", SearchOption.AllDirectories); + + if (files.Length == 0) + Serilog.Log.Error("{App} app couldn't be found at {Path}", mExecFname, mEditorPath); + + mExecFullPath = files[0]; + } + + // + // コマンドラインツールを実行する + // + // arg : コマンドラインツールに渡す引数 + // + // + public int Exec(string arg) + { + int exitCode = -1; + + try + { + using var process = new Process(); + process.StartInfo.FileName = mExecFullPath; + process.StartInfo.Arguments = arg; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.CreateNoWindow = true; + process.Start(); + mOutput = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + exitCode = process.ExitCode; + process.Close(); + } + catch (Exception e) + { + //UnityEngine.Debug.Log(e); + Serilog.Log.Error(e, "Exception while running process at {Scope}.{Location}", nameof(EditorToolExec), nameof(Exec)); + } + + return exitCode; + } + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs.meta new file mode 100644 index 0000000..cec7b88 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/Binary2TextExec.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13d464c749e33e043b94d94c82365823 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs b/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs new file mode 100644 index 0000000..cd5cd84 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs @@ -0,0 +1,164 @@ +using System; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Input +{ + + public class InputManagerMonitor + { + private static readonly Lazy _instance = new Lazy(() => new InputManagerMonitor()); + public static InputManagerMonitor Instance => _instance.Value; + + //UnityInputManager inputManager; + readonly string inputManagerFilePath; + DateTime previousTagManagerLastWrite; + + public InputManagerMonitor() + { + EditorApplication.update += Update; + inputManagerFilePath = CommonTools.GetInputManagerFilePath(); + + if (!System.IO.File.Exists(inputManagerFilePath)) + { + Serilog.Log.Error("InputManager file not found at {location}", inputManagerFilePath); + return; + } + + try + { + previousTagManagerLastWrite = System.IO.File.GetLastWriteTime(inputManagerFilePath); + } + catch (Exception ex) + { + Serilog.Log.Debug(ex, "Exception at {Location}", nameof(System.IO.File.GetLastWriteTime)); + } + } + + void Update() + { +#if !ENABLE_LEGACY_INPUT_MANAGER + return; +#endif + +#pragma warning disable CS0162 +#pragma warning disable IDE0035 + + var currentInputManagerLastWrite = previousTagManagerLastWrite; + try + { + if (System.IO.File.Exists(inputManagerFilePath)) + currentInputManagerLastWrite = System.IO.File.GetLastWriteTime(inputManagerFilePath); + } + catch (Exception ex) + { + Serilog.Log.Debug(ex, "Exception at {Location}", nameof(System.IO.File.GetLastWriteTime)); + } + if (currentInputManagerLastWrite != previousTagManagerLastWrite) + { + previousTagManagerLastWrite = currentInputManagerLastWrite; + Bump(); + } + +#pragma warning restore CS0162 +#pragma warning restore IDE0035 + } + + public void Bump() + { +#if !ENABLE_LEGACY_INPUT_MANAGER + return; +#endif +#pragma warning disable CS0162 +#pragma warning disable IDE0035 + + Serilog.Log.Debug("InputMonitor {Event}", nameof(Bump)); + + if (!System.IO.File.Exists(inputManagerFilePath)) + { + Serilog.Log.Error("InputManager file not found at {location}", inputManagerFilePath); + return; + } + + var inputManager = new UnityInputManager(); + inputManager.ReadFromPath(inputManagerFilePath); + inputManager.SendData(); + + +#pragma warning restore CS0162 +#pragma warning restore IDE0035 + } + + } + + + public static partial class Extensions + { + public static string GetInfo(this List axes, string? name) + { + if (name == null || string.IsNullOrEmpty(name)) + return string.Empty; + + //axis.descriptiveName + var axesWithName = axes.Where(a => a.Name == name); + + int threshold = 80; + + var sb = new System.Text.StringBuilder(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.descriptiveName)) + sb.Append($"{axis.descriptiveName} "); + + if (sb.Length > threshold) + return sb.ToString(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.descriptiveNegativeName)) + sb.Append($"{axis.descriptiveNegativeName} "); + + if (sb.Length > threshold) + return sb.ToString(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.positiveButton)) + sb.Append($"[{axis.positiveButton}] "); + + if (sb.Length > threshold) + return sb.ToString(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.altPositiveButton)) + sb.Append($"{{{axis.altPositiveButton}}} "); + + if (sb.Length > threshold) + return sb.ToString(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.negativeButton)) + sb.Append($"-[{axis.negativeButton}] "); + + if (sb.Length > threshold) + return sb.ToString(); + + foreach (var axis in axesWithName) + if (!string.IsNullOrEmpty(axis.altNegativeButton)) + sb.Append($"-{{{axis.altNegativeButton}}} "); + + return sb.ToString(); + } + } + +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs.meta new file mode 100644 index 0000000..eb6b582 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/InputManagerMonitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9c9772cbc184d74dbdb770fec5ff76c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs b/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs new file mode 100644 index 0000000..d1ba92e --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Input +{ + + public class Text2Yaml + { + public static string Convert(IEnumerable textLines) + { + var sb = new StringBuilder(); + var stack = new Stack<(string typeName, string identifier, int indentation)>(); + + sb.AppendLine(@"%YAML 1.1"); + sb.AppendLine(@"%TAG !u! tag:unity3d.com,2011:"); + sb.AppendLine(@"--- !u!13 &1"); + sb.AppendLine(@"InputManager:"); + + var regexIndentation = new Regex("^\\s*"); + + var regexString = new Regex("^(\\s+)(\\w+)\\s+\"([a-zA-Z0-9_ \\/\\.\\-]*)\"\\s+\\(string\\)$"); + var regexValue = new Regex("^(\\s+)(\\w+)\\s+(-?[0-9.]*)\\s+\\(((bool)|(int)|(float)|(unsigned int))\\)$"); + var regexType = new Regex("^(\\s+)(\\w+)\\s+\\((\\w+)\\)$"); + + var regexVectorSize = new Regex("(\\s+)size\\s+(\\d)+\\s+\\(int\\)"); + //var regexVectorData = new Regex("(\\s+)data \\(InputAxis\\)"); // remove InputAxis to make it more generic + + string curTextLine; + var curTextLineNo = 3; + var textIndentation = 1; + var indentationPrefix = new string(' ', textIndentation * 2); + stack.Push(("InputManager", "InputManager", textIndentation)); + + + foreach (var line in textLines.Skip(4)) + { + curTextLine = line; + curTextLineNo++; + + + // Skip empty lines + if (line.Length == 0) + continue; + + // Check if type undeclared, scope goes down, indentation decrements + { + var indentationMatch = regexIndentation.Match(line); + if (indentationMatch.Success) + { + var indentation = indentationMatch.Groups[0].Value.Length; + + if (indentation > textIndentation) + Error($"indentation({indentation}) > textIndentation({textIndentation})"); + + while (indentation < textIndentation) + { + stack.Pop(); + textIndentation--; + var typeIndentation = textIndentation; + if (stack.TryPeek(out var curType2)) + typeIndentation = curType2.indentation; + else if (line.Length > 0) + Error("stack empty at type undeclaration"); + indentationPrefix = new string(' ', typeIndentation * 2); + } + + } + else + { + Error($"{nameof(regexIndentation)} failed"); + } + } + + // Skip size field of vectors + if (stack.TryPeek(out var curType1) && curType1.typeName == "vector") + { + var vectorSizeMatch = regexVectorSize.Match(line); + if (vectorSizeMatch.Success) + { + continue; + } + } + + // Read string fields + { + var stringMatch = regexString.Match(line); + if (stringMatch.Success) + { + AddLine(stringMatch.Groups[2] + ": " + stringMatch.Groups[3]); + continue; + } + } + + // Read bool/int/float/unsignedInt fields + { + var valueMatch = regexValue.Match(line); + if (valueMatch.Success) + { + AddLine(valueMatch.Groups[2] + ": " + valueMatch.Groups[3]); + continue; + } + } + + // Check if new type declared, scope goes up, indentation increases + { + var typeMatch = regexType.Match(line); + if (typeMatch.Success) + { + var identifier = typeMatch.Groups[2].Value; + var typeName = typeMatch.Groups[3].Value; + + var isVectorData = false; + if (stack.TryPeek(out var curType2) && curType2.typeName == "vector" && identifier == "data") + isVectorData = true; + + var typeIndentation = textIndentation; + if (stack.TryPeek(out var curType3)) + typeIndentation = curType3.indentation; + else if (line.Length > 0) + Error("stack empty at type declaration"); + + if (!isVectorData) + { + AddLine(typeMatch.Groups[2] + ":"); + } + else + { + var customIndentation = typeIndentation - 1; + if (customIndentation < 0) + Error($"customIndentation({customIndentation}) < 0"); + var customIndentationPrefix = new string(' ', customIndentation * 2); + AddLine("- serializedVersion: 3", customIndentationPrefix); + } + + + textIndentation++; + typeIndentation++; + + if (isVectorData) + typeIndentation--; + + stack.Push((typeName, identifier, typeIndentation)); + indentationPrefix = new string(' ', typeIndentation * 2); + + continue; + } + } + + + Error("line failed to match all cases"); + + } + + + + return sb.ToString(); + + + void AddLine(string line, string? customIndentationPrefix = null) + { + string suffix; + if (stack.TryPeek(out var top)) + suffix = $" # {textIndentation}, {top.indentation}, {top.typeName} {top.identifier}"; + else + suffix = $" # {textIndentation}, nil"; + + if (customIndentationPrefix != null) + sb.AppendLine(customIndentationPrefix + line + suffix); + else + sb.AppendLine(indentationPrefix + line + suffix); + } + + void Error(string message) + { + var errorMessage = $"Text2Yaml error '{message}' at lineNo: {curTextLineNo}, line: '{curTextLine}' at {Environment.StackTrace}"; + //throw new Exception(errorMessage); + Serilog.Log.Warning(errorMessage); + } + + } + + + } + + public static partial class Extensions + { + public static bool TryPeek(this Stack stack, /*[MaybeNullWhen(false)]*/ out T result) + { + if (stack.Count > 0) + { + result = stack.Peek(); + return true; + } + else + { + result = default!; + return false; + } + } + } + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs.meta new file mode 100644 index 0000000..ad1d84c --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/Text2Yaml.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e191fef871d30041a55c3c8af5aab43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs b/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs new file mode 100644 index 0000000..5aed5c1 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs @@ -0,0 +1,429 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Linq; +using System.Security.Cryptography; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +using YamlDotNet = Meryel.UnityCodeAssist.YamlDotNet; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Input +{ + + + internal class UnityInputManager + { + //string yamlPath; + TextReader? reader; + InputManager? inputManager; + + public void ReadFromText(string text) + { + reader = new StringReader(text); + ReadAux(false, out _); + } + + public void ReadFromPath(string yamlPath) + { + + switch (UnityEditor.EditorSettings.serializationMode) + { + case UnityEditor.SerializationMode.ForceText: + { + reader = new StreamReader(yamlPath); + ReadAux(false, out _); + } + break; + + case UnityEditor.SerializationMode.ForceBinary: + { + // this approach will work for InputManager since its file size is small and limited + // but in the future, we may need to switch to reading binary files for big files + // like this https://github.com/Unity-Technologies/UnityDataTools + // or this https://github.com/SeriousCache/UABE + var converted = GetOrCreateConvertedFile(yamlPath); + if (!File.Exists(converted)) + { + Serilog.Log.Warning("Temp file {TempFile} couldn't found for converted yaml input file. Auto Input Manager will not work!", converted); + return; + } + var rawLines = File.ReadLines(converted); + var yamlText = Text2Yaml.Convert(rawLines); + reader = new StringReader(yamlText); + ReadAux(false, out _); + } + break; + + case UnityEditor.SerializationMode.Mixed: + { + reader = new StreamReader(yamlPath); + ReadAux(true, out var hasSemanticError); + if (hasSemanticError) + { + var converted = GetOrCreateConvertedFile(yamlPath); + if (!File.Exists(converted)) + { + Serilog.Log.Warning("Temp file {TempFile} couldn't found for converted yaml input file. Auto Input Manager will not work!", converted); + return; + } + var rawLines = File.ReadLines(converted); + var yamlText = Text2Yaml.Convert(rawLines); + reader = new StringReader(yamlText); + ReadAux(false, out _); + } + } + break; + + } + } + + + void ReadAux(bool canHaveSemanticError, out bool hasSemanticError) + { + hasSemanticError = false; + + if (reader == null) + { + Serilog.Log.Warning($"{nameof(UnityInputManager)}.{nameof(reader)} is null"); + return; + } + + //var reader = new StreamReader(yamlPath); + var deserializer = new YamlDotNet.Serialization.DeserializerBuilder() + //.WithTagMapping("tag:unity3d.com,2011:13", typeof(Class13Mapper)) + .WithNodeTypeResolver(new Tag13Resolver()) // some users have "tag:yousandi.cn,2023:13" instead, so use a more generic approach + .IgnoreUnmatchedProperties() + .Build(); + //serializer.Settings.RegisterTagMapping("tag:unity3d.com,2011:13", typeof(Class13)); + //serializer.Settings.ComparerForKeySorting = null; + Class13Mapper? result; + try + { + result = deserializer.Deserialize(reader); + } + catch (YamlDotNet.Core.SemanticErrorException semanticErrorException) + { + Serilog.Log.Debug(semanticErrorException, "Couldn't parse InputManager.asset yaml file"); + if (!canHaveSemanticError) + Serilog.Log.Error(semanticErrorException, "Couldn't parse InputManager.asset yaml file unexpectedly"); + + hasSemanticError = true; + return; + } + finally + { + reader.Close(); + } + + var inputManagerMapper = result?.InputManager; + if (inputManagerMapper == null) + { + Serilog.Log.Warning($"{nameof(inputManagerMapper)} is null"); + return; + } + + inputManager = new InputManager(inputManagerMapper); + } + + + public void SendData() + { + if (inputManager == null) + return; + + var axisNames = inputManager.Axes.Select(a => a.Name!).Where(n => !string.IsNullOrEmpty(n)).Distinct().ToArray(); + var axisInfos = axisNames.Select(a => inputManager.Axes.GetInfo(a)).ToArray(); + if (!CreateBindingsMap(out var buttonKeys, out var buttonAxis)) + return; + + string[] joystickNames; + try + { + joystickNames = UnityEngine.Input.GetJoystickNames(); + } + catch (InvalidOperationException) + { + // Occurs if user have switched active Input handling to Input System package in Player Settings. + joystickNames = new string[0]; + } + + MQTTnetInitializer.Publisher?.SendInputManager(axisNames, axisInfos, buttonKeys, buttonAxis, joystickNames); + + /* + MQTTnetInitializer.Publisher?.SendInputManager( + inputManager.Axes.Select(a => a.Name).Distinct().ToArray(), + inputManager.Axes.Select(a => a.positiveButton).ToArray(), + inputManager.Axes.Select(a => a.negativeButton).ToArray(), + inputManager.Axes.Select(a => a.altPositiveButton).ToArray(), + inputManager.Axes.Select(a => a.altNegativeButton).ToArray(), + UnityEngine.Input.GetJoystickNames() + ); + */ + + } + + + bool CreateBindingsMap([System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string[]? inputKeys, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string[]? inputAxis) + { + if (inputManager == null) + { + inputKeys = null; + inputAxis = null; + return false; + } + + var dict = new Dictionary(); + + foreach (var axis in inputManager.Axes) + { + if (axis.altNegativeButton != null && !string.IsNullOrEmpty(axis.altNegativeButton)) + dict[axis.altNegativeButton] = axis.Name; + } + foreach (var axis in inputManager.Axes) + { + if (axis.negativeButton != null && !string.IsNullOrEmpty(axis.negativeButton)) + dict[axis.negativeButton] = axis.Name; + } + foreach (var axis in inputManager.Axes) + { + if (axis.altPositiveButton != null && !string.IsNullOrEmpty(axis.altPositiveButton)) + dict[axis.altPositiveButton] = axis.Name; + } + foreach (var axis in inputManager.Axes) + { + if (axis.positiveButton != null && !string.IsNullOrEmpty(axis.positiveButton)) + dict[axis.positiveButton] = axis.Name; + } + + var keys = new string[dict.Count]; + var values = new string[dict.Count]; + dict.Keys.CopyTo(keys, 0); + dict.Values.CopyTo(values, 0); + + inputKeys = keys; + inputAxis = values; + return true; + } + + + + static string GetOrCreateConvertedFile(string filePath) + { + var hash = GetMD5Hash(filePath); + var convertedPath = Path.Combine(Path.GetTempPath(), $"UCA_IM_{hash}.txt"); + + if (!File.Exists(convertedPath)) + { + Serilog.Log.Debug("Converting binary to text format of {File} to {Target}", filePath, convertedPath); + var converter = new Binary2TextExec(); + converter.Exec(filePath, convertedPath); + } + else + { + Serilog.Log.Debug("Converted file already exists at {Target}", convertedPath); + } + + return convertedPath; + } + + /// + /// Gets a hash of the file using MD5. + /// + /// + /// + public static string GetMD5Hash(string filePath) + { + using var md5 = new MD5CryptoServiceProvider(); + return GetHash(filePath, md5); + } + + /// + /// Gets a hash of the file using MD5. + /// + /// + /// + public static string GetMD5Hash(Stream s) + { + using var md5 = new MD5CryptoServiceProvider(); + return GetHash(s, md5); + } + + private static string GetHash(string filePath, HashAlgorithm hasher) + { + using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + return GetHash(fs, hasher); + } + + private static string GetHash(Stream s, HashAlgorithm hasher) + { + var hash = hasher.ComputeHash(s); + var hashStr = Convert.ToBase64String(hash); + //return hashStr.TrimEnd('='); + var hashStrAlphaNumeric = System.Text.RegularExpressions.Regex.Replace(hashStr, "[^A-Za-z0-9]", ""); + return hashStrAlphaNumeric; + } + + } + + public enum AxisType + { + KeyOrMouseButton = 0, + MouseMovement = 1, + JoystickAxis = 2 + }; + +#pragma warning disable IDE1006 + + public class InputAxisMapper + { + public int serializedVersion { get; set; } + + public string? m_Name { get; set; } + public string? descriptiveName { get; set; } + public string? descriptiveNegativeName { get; set; } + public string? negativeButton { get; set; } + public string? positiveButton { get; set; } + public string? altNegativeButton { get; set; } + public string? altPositiveButton { get; set; } + + //public float gravity { get; set; } + //public float dead { get; set; } + //public float sensitivity { get; set; } + public string? gravity { get; set; } + public string? dead { get; set; } + public string? sensitivity { get; set; } + + //public bool snap { get; set; } + public int snap { get; set; } + //public bool invert { get; set; } + public int invert { get; set; } + + //public AxisType type { get; set; } + public int type { get; set; } + + public int axis { get; set; } + public int joyNum { get; set; } + } + + public class InputAxis + { + readonly InputAxisMapper map; + + public InputAxis(InputAxisMapper map) + { + this.map = map; + } + + public int SerializedVersion + { + get { return map.serializedVersion; } + set { map.serializedVersion = value; } + } + + public string? Name => map.m_Name; + public string? descriptiveName => map.descriptiveName; + public string? descriptiveNegativeName => map.descriptiveNegativeName; + public string? negativeButton => map.negativeButton; + public string? positiveButton => map.positiveButton; + public string? altNegativeButton => map.altNegativeButton; + public string? altPositiveButton => map.altPositiveButton; + + public float gravity => float.Parse(map.gravity);//**--format + public float dead => float.Parse(map.dead);//**--format + public float sensitivity => float.Parse(map.sensitivity);//**--format + + public bool snap => map.snap != 0; + public bool invert => map.invert != 0; + + public AxisType type => (AxisType)map.type; + + public int axis => map.axis; + public int joyNum => map.joyNum; + } + + public class InputManagerMapper + { + public int m_ObjectHideFlags { get; set; } + public int serializedVersion { get; set; } + public int m_UsePhysicalKeys { get; set; } + public List? m_Axes { get; set; } + } + +#pragma warning restore IDE1006 + + public class InputManager + { + readonly InputManagerMapper map; + readonly List axes; + + public InputManager(InputManagerMapper map) + { + this.map = map; + this.axes = new List(); + + if (map.m_Axes == null) + { + Serilog.Log.Warning($"map.m_Axes is null"); + return; + } + + foreach (var a in map.m_Axes) + this.axes.Add(new InputAxis(a)); + } + + public int ObjectHideFlags + { + get { return map.m_ObjectHideFlags; } + set { map.m_ObjectHideFlags = value; } + } + + public int SerializedVersion + { + get { return map.serializedVersion; } + set { map.serializedVersion = value; } + } + + public bool UsePhysicalKeys + { + get { return map.m_UsePhysicalKeys != 0; } + set { map.m_UsePhysicalKeys = value ? 1 : 0; } + } + + /*public List Axes + { + get { return map.m_Axes; } + set { map.m_Axes = value; } + }*/ + public List Axes => axes; + } + + public class Class13Mapper + { + public InputManagerMapper? InputManager { get; set; } + } + + public class Tag13Resolver : YamlDotNet.Serialization.INodeTypeResolver + { + public bool Resolve(YamlDotNet.Core.Events.NodeEvent? nodeEvent, ref Type currentType) + { + if (nodeEvent != null && !nodeEvent.Tag.IsEmpty && !nodeEvent.Tag.IsNonSpecific) + { + var tagValue = nodeEvent.Tag.Value; + if (tagValue.EndsWith(":13")) + { + currentType = typeof(Class13Mapper); + return true; + } + } + return false; + } + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs.meta new file mode 100644 index 0000000..2a51956 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Input/UnityInputManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abdf2bf92986f1d4f802bfedb8faf551 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs b/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs new file mode 100644 index 0000000..3fa82a1 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Concurrent; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + [InitializeOnLoad] + public static class LazyInitializer + { + static int counter; + + static LazyInitializer() + { + counter = -5;// start initializing five frames later + EditorApplication.update += OnUpdate; + } + + static void OnUpdate() + { + counter++; + + if (counter == 1) + MainThreadDispatcher.Bump(); + else if (counter == 2) + Logger.ELogger.Bump(); + else if (counter == 3) + Monitor.Bump(); + else if (counter == 4) + MQTTnetInitializer.Bump(); + else if (counter == 5) + Updater.CheckUpdateSilent(); + else if (counter >= 6) + EditorApplication.update -= OnUpdate; + } + + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs.meta new file mode 100644 index 0000000..dce0c84 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/LazyInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc6e883c86567a34a94d52b99adf98bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger.meta b/Packages/com.merry-yellow.code-assist/Editor/Logger.meta new file mode 100644 index 0000000..3001cad --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cf68cc5d4c752c489220a20f31005f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs b/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs new file mode 100644 index 0000000..05bc53e --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using static System.IO.Path; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + public static class CommonTools + { + public static string GetScriptPath(string script) + { + var projectPath = GetProjectPathRaw(); + var toolPath = Combine(projectPath, "Packages/com.merry-yellow.code-assist/Editor/", script); + return toolPath; + } + + /// + /// does NOT include the trailing slash + /// + /// + public static string GetExternalReferencesPath() + { + var projectPath = GetProjectPathRaw(); + var extRefPath = Combine(projectPath, "Packages/com.merry-yellow.code-assist/Editor/ExternalReferences"); + return extRefPath; + } + + [Obsolete] + public static string GetToolPath(string tool) + { + var projectPath = GetProjectPathRaw(); + var toolPath = Combine(projectPath, "Packages/com.merry-yellow.code-assist/Tools~/", tool); + return toolPath; + } + + public static string GetInstallerPath(string installer) + { + var projectPath = GetProjectPathRaw(); + var installerPath = Combine(projectPath, "Packages/com.merry-yellow.code-assist/Installers~/", installer); + return installerPath; + } + + public static string GetTagManagerFilePath() + { + var projectPath = GetProjectPathRaw(); + var tagManagerPath = Combine(projectPath, "ProjectSettings/TagManager.asset"); + return tagManagerPath; + } + + public static string GetInputManagerFilePath() + { + var projectPath = GetProjectPathRaw(); + var inputManagerPath = Combine(projectPath, "ProjectSettings/InputManager.asset"); + return inputManagerPath; + } + + public static string GetProjectPath() + { + var rawPath = GetProjectPathRaw(); + //var pathWithoutWhiteSpace = rawPath.Trim(); // this is done in OSPath ctor + var osPath = new OSPath(rawPath); + var unixPath = osPath.Unix; + var trimmed = unixPath.TrimEnd('\\', '/'); + var capitalized = FirstCharToUpper(trimmed); // this is required for TypeScript, so doing it here as well just in case + return capitalized!; + } + + static string? FirstCharToUpper(string? input) + { + switch (input) + { + case null: return null; + case "": return ""; + default: return input[0].ToString().ToUpper() + input.Substring(1); + } + } + + /// + /// Get the path to the project folder. + /// + /// The project folder path + static string GetProjectPathRaw() + { + // Application.dataPath returns the path including /Assets, which we need to strip off + var path = UnityEngine.Application.dataPath; + var directory = new DirectoryInfo(path); + var parent = directory.Parent; + if (parent != null) + return parent.FullName; + + return path; + } + + public static string GetHashForLogFile(string path) => Synchronizer.Model.Utilities.GetHashForLogFile(path); + } + + // https://github.com/dmitrynogin/cdsf/blob/master/Cds.Folders/OSPath.cs + internal class OSPath + { + public static readonly OSPath Empty = ""; + + public static bool IsWindows => DirectorySeparatorChar == '\\'; + + public OSPath(string text) + { + Text = text.Trim(); + } + + public static implicit operator OSPath(string text) => new OSPath(text); + public static implicit operator string(OSPath path) => path.Normalized; + public override string ToString() => Normalized; + + protected string Text { get; } + + public string Normalized => IsWindows ? Windows : Unix; + public string Windows => Text.Replace('/', '\\'); + //public string Unix => Simplified.Text.Replace('\\', '/'); + public string Unix => Text.Replace('\\', '/'); + + public OSPath Relative => Simplified.Text.TrimStart('/', '\\'); + public OSPath Absolute => IsAbsolute ? this : "/" + Relative; + + public bool IsAbsolute => IsRooted || HasVolume; + public bool IsRooted => Text.Length >= 1 && (Text[0] == '/' || Text[0] == '\\'); + public bool HasVolume => Text.Length >= 2 && Text[1] == ':'; + public OSPath Simplified => HasVolume ? Text.Substring(2) : Text; + + public OSPath Parent => GetDirectoryName(Text); + + public bool Contains(OSPath path) => + Normalized.StartsWith(path); + + public static OSPath operator +(OSPath left, OSPath right) => + new OSPath(Combine(left, right.Relative)); + + public static OSPath operator -(OSPath left, OSPath right) => + left.Contains(right) + ? new OSPath(left.Normalized.Substring(right.Normalized.Length)).Relative + : left; + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs.meta new file mode 100644 index 0000000..88355e2 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/CommonTools.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9066c480a2fcb9940a432377a49262af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs b/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs new file mode 100644 index 0000000..a25de07 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs @@ -0,0 +1,203 @@ +//using Meryel.UnityCodeAssist.Serilog; +//using Meryel.UnityCodeAssist.Serilog.Core; +using UnityEngine; +using UnityEditor; +using System.Linq; + +#if ELOGGER + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Logger +{ + + //[InitializeOnLoad] + public static class ELogger + { + public static event System.Action? OnVsInternalLogChanged; + + + // Change 'new LoggerConfiguration().MinimumLevel.Debug();' if you change these values + const Serilog.Events.LogEventLevel fileMinLevel = Serilog.Events.LogEventLevel.Debug; + const Serilog.Events.LogEventLevel outputWindowMinLevel = Serilog.Events.LogEventLevel.Information; + static LoggingLevelSwitch? fileLevelSwitch, outputWindowLevelSwitch; + + //static bool IsInitialized { get; set; } + + static ILogEventSink? _outputWindowSink; + static ILogEventSink? _memorySink; + + + public static string GetInternalLogContent() => _memorySink == null ? string.Empty : ((MemorySink)_memorySink).Export(); + public static int GetErrorCountInInternalLog() => _memorySink == null ? 0 : ((MemorySink)_memorySink).ErrorCount; + public static int GetWarningCountInInternalLog() => _memorySink == null ? 0 : ((MemorySink)_memorySink).WarningCount; + + public static string? FilePath { get; private set; } + public static string? VSFilePath { get; private set; } + + //**-- make it work with multiple clients + static string? _vsInternalLog; + public static string? VsInternalLog + { + get => _vsInternalLog; + set + { + _vsInternalLog = value; + OnVsInternalLogChanged?.Invoke(); + } + } + + + + static ELogger() + { + var isFirst = false; + const string stateName = "isFirst"; + if (!SessionState.GetBool(stateName, false)) + { + isFirst = true; + SessionState.SetBool(stateName, true); + } + + var projectPath = CommonTools.GetProjectPath(); + var outputWindowSink = new System.Lazy(() => new UnityOutputWindowSink(null)); + + Init(isFirst, projectPath, outputWindowSink); + + if (isFirst) + LogHeader(Application.unityVersion, projectPath); + } + + /// + /// Empty method for invoking static class ctor + /// + public static void Bump() { } + + + static void LogHeader(string unityVersion, string solutionDir) + { + var os = System.Runtime.InteropServices.RuntimeInformation.OSDescription; + var assisterVersion = Assister.Version; + var syncModel = Synchronizer.Model.Utilities.Version; + var hash = CommonTools.GetHashForLogFile(solutionDir); + var port = Synchronizer.Model.Utilities.GetPortForMQTTnet(solutionDir); + Serilog.Log.Debug( + "Beginning logging {OS}, Unity {U}, Unity Code Assist {A}, Communication Protocol {SM}, Project: '{Dir}', Project Hash: {Hash}, Port: {Port}", + os, unityVersion, assisterVersion, syncModel, solutionDir, hash, port); + } + + + + + + + + static string GetFilePath(string solutionDir) + { + var solutionHash = CommonTools.GetHashForLogFile(solutionDir); + var tempDir = System.IO.Path.GetTempPath(); + var fileName = $"UnityCodeAssist_U_Log_{solutionHash}_.TXT"; // hour code will be appended to the end of file, so add a trailing '_' + var filePath = System.IO.Path.Combine(tempDir, fileName); + return filePath; + } + + static string GetVSFilePath(string solutionDir) + { + var solutionHash = CommonTools.GetHashForLogFile(solutionDir); + var tempDir = System.IO.Path.GetTempPath(); +#if MERYEL_UCA_LITE_VERSION + var fileName = $"UnityCodeAssistLite_VS_Log_{solutionHash}_.TXT"; // hour code will be appended to the end of file, so add a trailing '_' +#else + var fileName = $"UnityCodeAssist_VS_Log_{solutionHash}_.TXT"; // hour code will be appended to the end of file, so add a trailing '_' +#endif + var filePath = System.IO.Path.Combine(tempDir, fileName); + return filePath; + } + + + public static void Init(bool isFirst, string solutionDir, System.Lazy outputWindowSink) + { + + FilePath = GetFilePath(solutionDir); + VSFilePath = GetVSFilePath(solutionDir); + + fileLevelSwitch = new LoggingLevelSwitch(fileMinLevel); + outputWindowLevelSwitch = new LoggingLevelSwitch(outputWindowMinLevel); + + var config = new LoggerConfiguration() + .MinimumLevel.Debug() + .Enrich.With(new DomainHashEnricher()); + + const string outputTemplate = "{Timestamp:HH:mm:ss.fff} [U] [{Level:u3}] [{DomainHash}] {Message:lj}{NewLine}{Exception}"; + + config = config.WriteTo.PersistentFile(FilePath + , outputTemplate: outputTemplate + , shared: true + , persistentFileRollingInterval: PersistentFileRollingInterval.Day + , preserveLogFilename: true + , levelSwitch: fileLevelSwitch + , rollOnEachProcessRun: isFirst + ); + + _outputWindowSink ??= outputWindowSink.Value; + if (_outputWindowSink != null) + config = config.WriteTo.Sink(_outputWindowSink, outputWindowMinLevel, outputWindowLevelSwitch); + + _memorySink ??= new MemorySink(outputTemplate); + config = config.WriteTo.Sink(_memorySink, fileMinLevel, null); + + config = config.Destructure.With(new MyDestructuringPolicy()); + + Serilog.Log.Logger = config.CreateLogger(); + //switchableLogger.Set(config.CreateLogger(), disposePrev: true); + + OnOptionsChanged(); + + //IsInitialized = true; + } + + public static void OnOptionsChanged() + { + // Since we don't use LogEventLevel.Fatal, we can use it for disabling sinks + + var isLoggingToFile = OptionsIsLoggingToFile; + var targetFileLevel = isLoggingToFile ? fileMinLevel : Serilog.Events.LogEventLevel.Fatal; + if (fileLevelSwitch != null) + fileLevelSwitch.MinimumLevel = targetFileLevel; + + var isLoggingToOutputWindow = OptionsIsLoggingToOutputWindow; + var targetOutputWindowLevel = isLoggingToOutputWindow ? outputWindowMinLevel : Serilog.Events.LogEventLevel.Fatal; + if (outputWindowLevelSwitch != null) + outputWindowLevelSwitch.MinimumLevel = targetOutputWindowLevel; + } + + //**-- UI for these two + static bool OptionsIsLoggingToFile => true; + static bool OptionsIsLoggingToOutputWindow => true; + } + + public class MyDestructuringPolicy : IDestructuringPolicy + { + // serilog cannot destruct StringArrayContainer by default, so do it manually + public bool TryDestructure(object value, ILogEventPropertyValueFactory propertyValueFactory, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out Serilog.Events.LogEventPropertyValue? result) + { + if (value is Synchronizer.Model.StringArrayContainer sac) + { + var items = sac.Container.Select(item => propertyValueFactory.CreatePropertyValue(item, true)); + result = new Serilog.Events.SequenceValue(items); + return true; + } + + result = null; + return false; + } + } +} + +#endif \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs.meta new file mode 100644 index 0000000..54239c3 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/ELogger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca3b9ef056f0ba843936ff335d12b0a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs b/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs new file mode 100644 index 0000000..e652bea --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs @@ -0,0 +1,137 @@ +//using Meryel.UnityCodeAssist.Serilog; +//using Meryel.UnityCodeAssist.Serilog.Core; +using UnityEngine; +using UnityEditor; +using System.Linq; + +using Meryel.Serilog; +using Meryel.Serilog.Core; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Logger +{ + + //[InitializeOnLoad] + public static class ELogger + { + public static event System.Action? OnVsInternalLogChanged; + + + // Change 'new LoggerConfiguration().MinimumLevel.Debug();' if you change these values + const Serilog.Events.LogEventLevel fileMinLevel = Serilog.Events.LogEventLevel.Debug; + const Serilog.Events.LogEventLevel outputWindowMinLevel = Serilog.Events.LogEventLevel.Information; + static LoggingLevelSwitch? fileLevelSwitch, outputWindowLevelSwitch; + + //static bool IsInitialized { get; set; } + + static ILogEventSink? _outputWindowSink; + static ILogEventSink? _memorySink; + + + public static string GetInternalLogContent() => _memorySink == null ? string.Empty : ((Meryel.UnityCodeAssist.Logger.MemorySink)_memorySink).Export(); + public static int GetErrorCountInInternalLog() => _memorySink == null ? 0 : ((Meryel.UnityCodeAssist.Logger.MemorySink)_memorySink).ErrorCount; + public static int GetWarningCountInInternalLog() => _memorySink == null ? 0 : ((Meryel.UnityCodeAssist.Logger.MemorySink)_memorySink).WarningCount; + + public static string? FilePath => Meryel.UnityCodeAssist.Logger.ELogger.UnityFilePath; + public static string? VSFilePath => Meryel.UnityCodeAssist.Logger.ELogger.VisualStudioFilePath; + + //**-- make it work with multiple clients + static string? _vsInternalLog; + public static string? VsInternalLog + { + get => _vsInternalLog; + set + { + _vsInternalLog = value; + OnVsInternalLogChanged?.Invoke(); + } + } + + + + static ELogger() + { + fileLevelSwitch = null; + outputWindowLevelSwitch = null; + _memorySink = null; + + var isFirst = false; + const string stateName = "isFirst"; + if (!SessionState.GetBool(stateName, false)) + { + isFirst = true; + SessionState.SetBool(stateName, true); + } + + var projectPath = CommonTools.GetProjectPath(); + var outputWindowSink = new System.Lazy(() => new UnityOutputWindowSink(null)); + + Init(isFirst, projectPath, outputWindowSink); + + if (isFirst) + LogHeader(Application.unityVersion, projectPath); + } + + /// + /// Empty method for invoking static class ctor + /// + public static void Bump() { } + + + static void LogHeader(string unityVersion, string solutionDir) + { + var os = System.Runtime.InteropServices.RuntimeInformation.OSDescription; + var assisterVersion = Assister.Version; + var syncModel = Synchronizer.Model.Utilities.Version; + var hash = CommonTools.GetHashForLogFile(solutionDir); + var port = Synchronizer.Model.Utilities.GetPortForMQTTnet(solutionDir); + Serilog.Log.Debug( + "Beginning logging {OS}, Unity {U}, Unity Code Assist {A}, Communication Protocol {SM}, Project: '{Dir}', Project Hash: {Hash}, Port: {Port}", + os, unityVersion, assisterVersion, syncModel, solutionDir, hash, port); + } + + + public static void Init(bool isFirst, string solutionDir, System.Lazy outputWindowSink) + { + //var solutionHash = Common.CommonTools.GetHashOfPath(solutionDir); + var solutionHash = CommonTools.GetHashForLogFile(solutionDir); // dir is osSafePath + _outputWindowSink ??= outputWindowSink.Value; + var sinkWrapper = new System.Lazy(() => _outputWindowSink); + + Meryel.UnityCodeAssist.Logger.ELogger.Init( + UnityCodeAssist.Logger.ELogger.State.FullyInitialized, + UnityCodeAssist.Logger.ELogger.PackagePriority.High, + solutionDir, solutionHash, "UnityCodeAssist", ProjectData.Domain.Unity, + sinkWrapper, null, null, null, null); + } + + public static void OnOptionsChanged() + { + // Since we don't use LogEventLevel.Fatal, we can use it for disabling sinks + + var isLoggingToFile = OptionsIsLoggingToFile; + var targetFileLevel = isLoggingToFile ? fileMinLevel : Serilog.Events.LogEventLevel.Fatal; + if (fileLevelSwitch != null) + fileLevelSwitch.MinimumLevel = targetFileLevel; + + var isLoggingToOutputWindow = OptionsIsLoggingToOutputWindow; + var targetOutputWindowLevel = isLoggingToOutputWindow ? outputWindowMinLevel : Serilog.Events.LogEventLevel.Fatal; + if (outputWindowLevelSwitch != null) + outputWindowLevelSwitch.MinimumLevel = targetOutputWindowLevel; + } + + //**-- UI for these two + static bool OptionsIsLoggingToFile => true; + static bool OptionsIsLoggingToOutputWindow => true; + } + +} + diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs.meta new file mode 100644 index 0000000..bb8bb23 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/LoggerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44a33ba3272c55d4fad27588d4bdcb2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs b/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs new file mode 100644 index 0000000..14f5091 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs @@ -0,0 +1,62 @@ +using System; +using System.Linq; +//using Meryel.UnityCodeAssist.Serilog; +//using Meryel.UnityCodeAssist.Serilog.Core; +//using Meryel.UnityCodeAssist.Serilog.Events; +//using Meryel.UnityCodeAssist.Serilog.Configuration; +using Meryel.Serilog; +using Meryel.Serilog.Core; +using Meryel.Serilog.Events; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Logger +{ + public class UnityOutputWindowSink : ILogEventSink + { + private readonly IFormatProvider? _formatProvider; + + public UnityOutputWindowSink(IFormatProvider? formatProvider) + { + _formatProvider = formatProvider; + } + + public void Emit(LogEvent? logEvent) + { + if (logEvent == null) + return; + + var message = logEvent.RenderMessage(_formatProvider, false); + + switch (logEvent.Level) + { + //case LogEventLevel.Verbose: + //case LogEventLevel.Debug: + case LogEventLevel.Information: + UnityEngine.Debug.Log(message); + break; + case LogEventLevel.Warning: + UnityEngine.Debug.LogWarning(message); + break; + case LogEventLevel.Error: + case LogEventLevel.Fatal: + UnityEngine.Debug.LogError(message); + break; + default: + break; + } + } + + public void Dispose() + { + } + } + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs.meta new file mode 100644 index 0000000..23dfe1e --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Logger/UnitySink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0cc7f1339aeef54898503bd5cdc51fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs new file mode 100644 index 0000000..a47c273 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs @@ -0,0 +1,134 @@ +using System; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +using MQTTnet = Meryel.UnityCodeAssist.MQTTnet; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + //[InitializeOnLoad] + public static class MQTTnetInitializer + { + public static MQTTnetPublisher? Publisher; + + static MQTTnetInitializer() + { + EditorApplication.quitting += EditorApplication_quitting; + AssemblyReloadEvents.beforeAssemblyReload += AssemblyReloadEvents_beforeAssemblyReload; + //AssemblyReloadEvents.afterAssemblyReload += AssemblyReloadEvents_afterAssemblyReload; + + RunOnceOnUpdate(Initialize); + } + + /// + /// Empty method for invoking static class ctor + /// + public static void Bump() { } + + /// + /// false for profiler standalone process + /// + /// + public static bool IsMainUnityEditorProcess() + { +#if UNITY_2020_2_OR_NEWER + if (UnityEditor.AssetDatabase.IsAssetImportWorkerProcess()) + return false; +#elif UNITY_2019_3_OR_NEWER + if (UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess()) + return false; +#endif + +#if UNITY_2021_1_OR_NEWER + if (UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Secondary) + return false; +#elif UNITY_2020_2_OR_NEWER + if (UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Slave) + return false; +#elif UNITY_2020_1_OR_NEWER + if (global::Unity.MPE.ProcessService.level == global::Unity.MPE.ProcessLevel.UMP_SLAVE) + return false; +#endif + + return true; + } + + public static void Initialize() + { + if (!IsMainUnityEditorProcess()) + { + // if try to creaate NetMQ, will recieve AddressAlreadyInUseException during binding + Serilog.Log.Debug("MQTTnet won't initialize on secondary processes"); + return; + } + + Serilog.Log.Debug("MQTTnet initializing"); + + //Serilog.Log.Debug("MQTTnet constructing"); + Publisher = new MQTTnetPublisher(); + + RunOnShutdown(OnShutDown); + Serilog.Log.Debug("MQTTnet initialized"); + } + + private static void OnShutDown() + { + Serilog.Log.Debug("MQTTnet OnShutDown"); + Clear(); + } + + //private static void AssemblyReloadEvents_afterAssemblyReload() + //{ + // Serilog.Log.Debug("MQTTnet AssemblyReloadEvents_afterAssemblyReload"); + //} + + private static void AssemblyReloadEvents_beforeAssemblyReload() + { + Serilog.Log.Debug("MQTTnet AssemblyReloadEvents_beforeAssemblyReload"); + + Clear(); + } + + private static void EditorApplication_quitting() + { + Serilog.Log.Debug("MQTTnet EditorApplication_quitting"); + + Publisher?.SendDisconnect(); + Clear(); + } + + static void Clear() => Publisher?.Clear(); + + + private static void RunOnceOnUpdate(Action action) + { + void callback() + { + EditorApplication.update -= callback; + action(); + } + + EditorApplication.update += callback; + } + + private static void RunOnShutdown(Action action) + { + // Mono on OSX has all kinds of quirks on AppDomain shutdown + //if (!VisualStudioEditor.IsWindows) + //return; +#if !UNITY_EDITOR_WIN + return; +#else + AppDomain.CurrentDomain.DomainUnload += (_, __) => action(); +#endif + + } + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs.meta new file mode 100644 index 0000000..0b60f0e --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a503036d3d400042a5d9fdd5564202b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs new file mode 100644 index 0000000..caf6a5c --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs @@ -0,0 +1,926 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using UnityEngine; +using UnityEditor; +using System.Threading; +using Task = System.Threading.Tasks.Task; +using Application = UnityEngine.Application; + +using Meryel.UnityCodeAssist.MQTTnet; +using Meryel.UnityCodeAssist.MQTTnet.Server; +using Meryel.UnityCodeAssist.MQTTnet.Protocol; +using Meryel.UnityCodeAssist.MQTTnet.Adapter; +using Meryel.UnityCodeAssist.MQTTnet.Implementations; +using Meryel.UnityCodeAssist.MQTTnet.Diagnostics; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +using MQTTnet = Meryel.UnityCodeAssist.MQTTnet; +using Newtonsoft = Meryel.UnityCodeAssist.Newtonsoft; +#pragma warning restore IDE0005 + + +#nullable enable + + +//**-- +// can also do this for better clear, sometimes it gets locked +// https://answers.unity.com/questions/704066/callback-before-unity-reloads-editor-assemblies.html# + +namespace Meryel.UnityCodeAssist.Editor +{ + public class MQTTnetPublisher : Synchronizer.Model.IProcessor + { + MqttServer? broker; + + CancellationTokenSource? cancellationTokenSource; + + readonly Synchronizer.Model.Manager syncMngr; + + //public readonly List clients; + readonly System.Collections.Concurrent.ConcurrentDictionary _clients; + + public IEnumerable Clients => _clients.Values.Where(c => c.NodeKind != Synchronizer.Model.NodeKind.SemiClient_RoslynAnalyzer.ToString()); + + Synchronizer.Model.Connect? _self; + + Synchronizer.Model.Connect Self => _self!; + + void InitializeSelf() + { + var projectPath = CommonTools.GetProjectPath(); + _self = new Synchronizer.Model.Connect() + { + ModelVersion = Synchronizer.Model.Utilities.Version, + ProjectPath = projectPath, + ProjectName = getProjectName(), + ContactInfo = $"Unity {Application.unityVersion}", + AssemblyVersion = Assister.Version, +#if MERYEL_UCA_LITE_VERSION + LiteOrFull = "Lite", +#else + LiteOrFull = "Full", +#endif + NodeKind = Synchronizer.Model.NodeKind.Server.ToString(), + ClientId = "", + }; + + string getProjectName() + { + string[] s = projectPath.Split('/'); +#pragma warning disable IDE0056 + string projectName = s[s.Length - 1]; +#pragma warning restore IDE0056 + //Logg("project = " + projectName); + return projectName; + } + } + + + public static void LogContext() + { + } + + public MQTTnetPublisher() + { + // LogContext(); + + Serilog.Log.Debug("MQTTnet server initializing, begin"); + + InitializeSelf(); + + _clients = new System.Collections.Concurrent.ConcurrentDictionary(); + syncMngr = new Synchronizer.Model.Manager(this); + + var port = Synchronizer.Model.Utilities.GetPortForMQTTnet(Self!.ProjectPath); + + + // Create the options for our MQTT Broker + MqttServerOptionsBuilder options = new MqttServerOptionsBuilder() + // set endpoint to localhost + .WithDefaultEndpoint() + // port used will be 707 + .WithDefaultEndpointPort(port) + // handler for new connections + //.WithConnectionValidator(OnNewConnection) + // handler for new messages + //.WithApplicationMessageInterceptor(OnNewMessage) + + // disable ipv6 for linux (and possibly macos too), otherwise socket exception is thrown + .WithDefaultEndpointBoundIPV6Address(System.Net.IPAddress.None) + + // for preventing socket ex after server restart https://github.com/dotnet/MQTTnet/issues/494 + // System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted. + .WithTlsEndpointReuseAddress() + ; + + IList DefaultServerAdapters = new List() + { + new MqttTcpServerAdapter(), + }; + var logger = new MqttNetNullLogger(); + + + + broker = new MqttServer(options.Build(), DefaultServerAdapters, logger); + + broker.InterceptingPublishAsync += Broker_InterceptingPublishAsync; + broker.ClientDisconnectedAsync += Broker_ClientDisconnectedAsync; + + Serilog.Log.Debug("MQTTnet server initializing, constructed broker, port: {Port}", port); + + try + { + //broker.StartAsync().GetAwaiter().GetResult(); + + var startTask = Task.Run(() => broker.StartAsync()); + if (!startTask.Wait(TimeSpan.FromSeconds(5))) + { + Serilog.Log.Error("MQTTnet broker.StartAsync timed out."); + return; + } + + + Serilog.Log.Debug("MQTTnet server initializing, started broker"); + } + catch (System.Net.Sockets.SocketException socketEx) + { + Serilog.Log.Error(socketEx, "Socket exception"); + LogContext(); + //Serilog.Log.Warning("Socket exception disposing pubSocket"); + //broker.Dispose(); + //broker = null; + return; + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "MQTTnet broker.StartAsync failed."); + return; + } + + + //pubSocket.SendReady += PubSocket_SendReady; + //SendConnect(); + + cancellationTokenSource = new CancellationTokenSource(); + //pullThread = new System.Threading.Thread(async () => await PullAsync(conn.pushPull, pullThreadCancellationTokenSource.Token)); + //pullThread = new System.Threading.Thread(() => InitPull(conn.pushPull, pullTaskCancellationTokenSource.Token)); + //pullThread.Start(); + //Task.Run(() => InitPullAsync()); + + + Serilog.Log.Debug("MQTTnet server initializing, initialized"); + + // need to sleep here, clients will take some time to start subscribing + // https://github.com/zeromq/netmq/issues/482#issuecomment-182200323 + Thread.Sleep(1000); + SendConnect(); + + Serilog.Log.Debug("MQTTnet server initializing, initialized at {port} with {projectPath}", port, Self!.ProjectPath); + } + + private Task Broker_ClientDisconnectedAsync(ClientDisconnectedEventArgs arg) + { + try + { + var removed = _clients.TryRemove(arg.ClientId, out _); + Serilog.Log.Debug("Broker_ClientDisconnectedAsync {ClientId} {Result}", arg.ClientId, removed); + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "async exception at {Location}", nameof(Broker_ClientDisconnectedAsync)); + } + return Task.CompletedTask; + } + + private Task Broker_InterceptingPublishAsync(InterceptingPublishEventArgs arg) + { + try + { + // if server message + if (string.IsNullOrEmpty(arg.ClientId)) + return Task.CompletedTask; + + Serilog.Log.Verbose("mqttnet consume {topic} {content}", arg.ApplicationMessage.Topic, arg.ApplicationMessage.ConvertPayloadToString()); + + var topic = arg.ApplicationMessage.Topic; + var header = topic.Substring(3); // for "cs/" prefix + var content = arg.ApplicationMessage.ConvertPayloadToString(); + + MainThreadDispatcher.Add(() => syncMngr.ProcessMessage(header, content)); + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "async exception at {Location}", nameof(Broker_InterceptingPublishAsync)); + } + + return Task.CompletedTask; + } + + public void Clear() + { + // LogContext(); + + Serilog.Log.Verbose("MQTTnet clearing {HasBroker}", (broker != null)); + + var server = broker; + if (server != null) + { + server.InterceptingPublishAsync -= Broker_InterceptingPublishAsync; + Serilog.Log.Verbose("MQTTnet clearing, removed events"); + } + + cancellationTokenSource?.Cancel(); + cancellationTokenSource = null; + Serilog.Log.Verbose("MQTTnet clearing, cancelled async token"); + + if (server == null) + return; + + // broker?.StopAsync().GetAwaiter().GetResult(); // this line was freezing Unity editor, so calling Task.Run().Wait() instead + try + { + var stopTask = Task.Run(() => server.StopAsync()); + if (!stopTask.Wait(TimeSpan.FromSeconds(5))) // give it five secs to complete + { + Serilog.Log.Error("MQTTnet broker.StopAsync timed out."); + } + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "MQTTnet broker.StopAsync failed."); + } + + Serilog.Log.Verbose("MQTTnet clearing, stopped broker"); + try + { + server.Dispose(); + } + catch (Exception ex) + { + Serilog.Log.Warning(ex, "MQTTnet broker.Dispose failed."); + } + + server = null; + broker = null; + + Serilog.Log.Debug("MQTTnet clearing, cleared"); + } + + string SerializeObject(T obj) + where T : class + { + // Odin cant serialize string arrays, https://github.com/TeamSirenix/odin-serializer/issues/26 + //var buffer = OdinSerializer.SerializationUtility.SerializeValue(obj, OdinSerializer.DataFormat.JSON); + //var str = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length); + + // Newtonsoft works fine, but needs package reference + //var str = Newtonsoft.Json.JsonConvert.SerializeObject(obj); + + // not working + //var str = EditorJsonUtility.ToJson(obj); + + // needs nuget + //System.Text.Json.JsonSerializer; + + //var str = TinyJson.JsonWriter.ToJson(obj); + //var str = Meryel.UnityCodeAssist.ProjectData.LitJson.JsonMapper.ToJson(obj); + var str = Newtonsoft.Json.JsonConvert.SerializeObject(obj); + + return str; + } + + void SendAux(Synchronizer.Model.IMessage message, bool logContent = true) + { + if (message == null) + return; + + SendAux(message.GetType().Name, message, logContent); + } + + void SendAux(string messageType, object content, bool logContent = true) + { + if (logContent) + Serilog.Log.Debug("Publishing {MessageType} {@Content}", messageType, content); + else + Serilog.Log.Debug("Publishing {MessageType}", messageType); + + var publisher = broker; + if (publisher != null) + //publisher.SendMoreFrame(messageType).SendFrame(SerializeObject(content)); + { + var applicationMessage = new MqttApplicationMessageBuilder() + .WithTopic("sc/" + messageType) // sc/ => server->client message + .WithRetainFlag(false) + .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce) + .WithPayload(SerializeObject(content)) + .Build(); + + //broker?.InjectApplicationMessage(new InjectedMqttApplicationMessage(applicationMessage), cancellationTokenSource?.Token ?? default).GetAwaiter().GetResult(); + broker?.InjectApplicationMessage(new InjectedMqttApplicationMessage(applicationMessage), cancellationTokenSource?.Token ?? default); + } + else + Serilog.Log.Error("Publisher socket is null"); + } + + public void SendConnect() + { + var connect = Self; + + SendAux(connect); + } + + public void SendDisconnect() + { + var disconnect = new Synchronizer.Model.Disconnect() + { + ModelVersion = Self.ModelVersion, + ProjectPath = Self.ProjectPath, + ProjectName = Self.ProjectName, + ContactInfo = Self.ContactInfo, + AssemblyVersion = Self.AssemblyVersion, + LiteOrFull = Self.LiteOrFull, + NodeKind = Self.NodeKind, + ClientId = Self.ClientId, + }; + + SendAux(disconnect); + } + + public void SendConnectionInfo() + { + var connectionInfo = new Synchronizer.Model.ConnectionInfo() + { + ModelVersion = Self.ModelVersion, + ProjectPath = Self.ProjectPath, + ProjectName = Self.ProjectName, + ContactInfo = Self.ContactInfo, + AssemblyVersion = Self.AssemblyVersion, + LiteOrFull = Self.LiteOrFull, + NodeKind = Self.NodeKind, + ClientId = Self.ClientId, + }; + + SendAux(connectionInfo); + } + + public void SendHandshake() + { + var handshake = new Synchronizer.Model.Handshake(); + + SendAux(handshake); + } + + public void SendRequestInternalLog() + { + var requestInternalLog = new Synchronizer.Model.RequestInternalLog(); + + SendAux(requestInternalLog); + } + + public void SendRequestUpdate(string app, string path, bool isInteractive) + { + var requestUpdate = new Synchronizer.Model.RequestUpdate() + { + App = app, + Path = path, + IsInteractive = isInteractive, + }; + + SendAux(requestUpdate); + } + + public void SendInternalLog() + { + var internalLog = new Synchronizer.Model.InternalLog() + { + LogContent = Logger.ELogger.GetInternalLogContent(), + }; + + SendAux(internalLog, logContent: false); + } + + + void SendStringArrayAux(string id, string[] array) + { + var stringArray = new Synchronizer.Model.StringArray() + { + Id = id, + Array = array, + }; + + SendAux(stringArray); + } + + void SendStringArrayContainerAux(params (string id, string[] array)[] container) + { + var stringArrayContainer = new Synchronizer.Model.StringArrayContainer() + { + Container = new Synchronizer.Model.StringArray[container.Length], + }; + + for (int i = 0; i < container.Length; i++) + { + stringArrayContainer.Container[i] = new Synchronizer.Model.StringArray + { + Id = container[i].id, + Array = container[i].array + }; + } + + SendAux(stringArrayContainer); + } + + public void SendTags(string[] tags) => + SendStringArrayAux(Synchronizer.Model.Ids.Tags, tags); + + public void SendLayers(string[] layerNames, string[] layerIndices) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.Layers, layerNames), + (Synchronizer.Model.Ids.LayerIndices, layerIndices)); + } + + public void SendSortingLayers(string[] sortingLayers, string[] sortingLayerIds, string[] sortingLayerValues) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.SortingLayers, sortingLayers), + (Synchronizer.Model.Ids.SortingLayerIds, sortingLayerIds), + (Synchronizer.Model.Ids.SortingLayerValues, sortingLayerValues)); + } + + public void SendRenderingLayers(string[] renderingLayers, string[] renderingLayerIndices) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.RenderingLayers, renderingLayers), + (Synchronizer.Model.Ids.RenderingLayerIndices, renderingLayerIndices)); + } + + public void SendPlayerPrefs(string[] playerPrefKeys, string[] playerPrefValues, + string[] playerPrefStringKeys, string[] playerPrefIntegerKeys, string[] playerPrefFloatKeys) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.PlayerPrefKeys, playerPrefKeys), + (Synchronizer.Model.Ids.PlayerPrefValues, playerPrefValues), + (Synchronizer.Model.Ids.PlayerPrefStringKeys, playerPrefStringKeys), + (Synchronizer.Model.Ids.PlayerPrefIntegerKeys, playerPrefIntegerKeys), + (Synchronizer.Model.Ids.PlayerPrefFloatKeys, playerPrefFloatKeys) + ); + } + + public void SendEditorPrefs(string[] editorPrefKeys, string[] editorPrefValues, + string[] editorPrefStringKeys, string[] editorPrefIntegerKeys, string[] editorPrefFloatKeys, + string[] editorPrefBooleanKeys) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.EditorPrefKeys, editorPrefKeys), + (Synchronizer.Model.Ids.EditorPrefValues, editorPrefValues), + (Synchronizer.Model.Ids.EditorPrefStringKeys, editorPrefStringKeys), + (Synchronizer.Model.Ids.EditorPrefIntegerKeys, editorPrefIntegerKeys), + (Synchronizer.Model.Ids.EditorPrefFloatKeys, editorPrefFloatKeys), + (Synchronizer.Model.Ids.EditorPrefBooleanKeys, editorPrefBooleanKeys) + ); + } + + public void SendInputManager(string[] axisNames, string[] axisInfos, string[] buttonKeys, string[] buttonAxis, string[] joystickNames) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.InputManagerAxes, axisNames), + (Synchronizer.Model.Ids.InputManagerAxisInfos, axisInfos), + (Synchronizer.Model.Ids.InputManagerButtonKeys, buttonKeys), + (Synchronizer.Model.Ids.InputManagerButtonAxis, buttonAxis), + (Synchronizer.Model.Ids.InputManagerJoystickNames, joystickNames) + ); + } + + public void SendSceneList(string[] sceneNames, string[] scenePaths, string[] sceneBuildIndices, + string[] sceneNamesAndPaths, string[] scenePathsAndNames) + { + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.SceneNames, sceneNames), + (Synchronizer.Model.Ids.ScenePaths, scenePaths), + (Synchronizer.Model.Ids.SceneBuildIndices, sceneBuildIndices), + (Synchronizer.Model.Ids.SceneNamesAndPaths, sceneNamesAndPaths), + (Synchronizer.Model.Ids.ScenePathsAndNames, scenePathsAndNames) + ); + } + + public void SendScriptMissing(string component) + { + var scriptMissing = new Synchronizer.Model.ScriptMissing() + { + Component = component, + }; + + SendAux(scriptMissing); + } + + public void SendComponentHumanTrait(string[] bones, string[] muscles) + { + //var humanTrait = new Synchronizer.Model.Components.HumanTrait(); + + var boneIndices = new string[bones.Length]; + var boneNames = new string[bones.Length]; + for (int i = 0; i < bones.Length; i++) + { + boneIndices[i] = i.ToString(); + boneNames[i] = bones[i]; + } + + var muscleIndices = new string[muscles.Length]; + var muscleNames = new string[muscles.Length]; + for (int i = 0; i < muscles.Length; i++) + { + muscleIndices[i] = i.ToString(); + muscleNames[i] = muscles[i]; + } + SendStringArrayContainerAux( + (Synchronizer.Model.Ids.AnimationHumanBones, boneNames), + (Synchronizer.Model.Ids.AnimationHumanBoneIndices, boneIndices), + (Synchronizer.Model.Ids.AnimationHumanMuscles, muscleNames), + (Synchronizer.Model.Ids.AnimationHumanMuscleIndices, muscleIndices) + ); + } + + public void SendShaderGlobalKeywords() + { + SendStringArrayAux(Synchronizer.Model.Ids.ShaderGlobalKeywords, Shader.globalKeywords.Select(k => k.name).ToArray()); + } + + public void SendGameObject(GameObject go) + { + if (!go) + return; + + Serilog.Log.Debug("SendGO: {GoName}", go.name); + + var dataOfSelf = go.ToSyncModel(priority:10000); + if (dataOfSelf != null) + SendAux(dataOfSelf); + + var dataOfHierarchy = go.ToSyncModelOfHierarchy(); + if (dataOfHierarchy != null) + { + foreach (var doh in dataOfHierarchy) + SendAux(doh); + } + + var dataOfComponents = go.ToSyncModelOfComponents(); + if (dataOfComponents != null) + { + foreach (var doc in dataOfComponents) + SendAux(doc); + } + + var dataOfComponentAnimator = go.ToSyncModelOfComponentAnimator(); + if (dataOfComponentAnimator != null) + SendAux(dataOfComponentAnimator); + + var dataOfComponentAnimation = go.ToSyncModelOfComponentAnimation(); + if (dataOfComponentAnimation != null) + SendAux(dataOfComponentAnimation); + + var dataOfComponentMaterial = go.ToSyncModelOfComponentMaterial(); + if (dataOfComponentMaterial != null) + SendAux(dataOfComponentMaterial); + } + + public void SendScriptableObject(ScriptableObject so) + { + Serilog.Log.Debug("SendSO: {SoName}", so.name); + + var dataOfSo = so.ToSyncModel(); + if (dataOfSo != null) + SendAux(dataOfSo); + } + + public void SendAnalyticsEvent(string type, string content) + { + var analyticsEvent = new Synchronizer.Model.AnalyticsEvent() + { + EventType = type, + EventContent = content + }; + SendAux(analyticsEvent); + } + + public void SendErrorReport(string errorMessage, string stack, string type) + { + var errorReport = new Synchronizer.Model.ErrorReport() + { + ErrorMessage = errorMessage, + ErrorStack = stack, + ErrorType = type, + }; + SendAux(errorReport); + } + + public void SendRequestVerboseType(string type, string docPath) + { + var requestVerboseType = new Synchronizer.Model.RequestVerboseType() + { + Type = type, + DocPath = docPath, + }; + SendAux(requestVerboseType); + } + + public void ForwardRelayMessage(Synchronizer.Model.IRelayMessage relayMessage) + { + SendAux(relayMessage); + } + + + string Synchronizer.Model.IProcessor.Serialize(T value) + { + //return System.Text.Json.JsonSerializer.Serialize(value); + //return Newtonsoft.Json.JsonConvert.SerializeObject(value); + return SerializeObject(value); + } + T Synchronizer.Model.IProcessor.Deserialize(string data) + { + //return System.Text.Json.JsonSerializer.Deserialize(data)!; + //return Newtonsoft.Json.JsonConvert.DeserializeObject(data)!; + //return TinyJson.JsonParser.FromJson(data)!; + //return Meryel.UnityCodeAssist.ProjectData.LitJson.JsonMapper.ToObject(data); + return Newtonsoft.Json.JsonConvert.DeserializeObject(data)!; + + //byte[] buffer = System.Text.Encoding.UTF8.GetBytes(data); + //T val = OdinSerializer.SerializationUtility.DeserializeValue(buffer, OdinSerializer.DataFormat.JSON); + //return val; + } + + //**--make sure all Synchronizer.Model.IProcessor.Process methods are thread-safe + + // a new client has connected + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Connect connect) + { + if (connect.ModelVersion != Self.ModelVersion) + { + Serilog.Log.Error("Version mismatch with {ContactInfo}. Please update your Unity asset and reinstall the Visual Studio/VS Code extension. {ContactModel} != {SelfModel}", connect.ContactInfo, connect.ModelVersion, Self.ModelVersion); + return; + } + + if (connect.ProjectPath != Self.ProjectPath) + { + Serilog.Log.Error("Project mismatch with {ProjectName}. '{ConnectPath}' != '{SelfPath}'", connect.ProjectName, connect.ProjectPath, Self.ProjectPath); + return; + } + + if (!string.IsNullOrEmpty(connect.LiteOrFull) && connect.LiteOrFull != Self.LiteOrFull) + { + if (connect.LiteOrFull == "Lite") + { + //**-- upgrade vsix to full here //**--//**-- + } + } + + var hasClient = _clients.TryGetValue(connect.ClientId, out var client); + if (!hasClient) + _clients[connect.ClientId] = connect; + else + { + // LiteOrFull field might be updated + client.ModelVersion = connect.ModelVersion; + client.ProjectPath = connect.ProjectPath; + client.ProjectName = connect.ProjectName; + client.ContactInfo = connect.ContactInfo; + client.AssemblyVersion = connect.AssemblyVersion; + client.LiteOrFull = connect.LiteOrFull; + client.NodeKind = connect.NodeKind; + client.ClientId = connect.ClientId; + } + + SendHandshake(); + if (ScriptFinder.GetActiveGameObject(out var activeGO)) + SendGameObject(activeGO); + Assister.SendTagsAndLayers(); + } + + // a new client is online and requesting connection + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestConnect requestConnect) + { + SendConnect(); + } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Disconnect disconnect) + { + var removed = _clients.TryRemove(disconnect.ClientId, out var client); + Serilog.Log.Debug("Synchronizer.Model.Disconnect {ClientId} {Removed}", disconnect.ClientId, removed); + } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ConnectionInfo connectionInfo) + { + if (connectionInfo.ModelVersion != Self.ModelVersion) + { + Serilog.Log.Error("Version mismatch with {ContactInfo}. Please update your Unity asset and reinstall the Visual Studio/VS Code extension. {ContactModel} != {SelfModel}", connectionInfo.ContactInfo, connectionInfo.ModelVersion, Self.ModelVersion); + return; + } + + if (connectionInfo.ProjectPath != Self.ProjectPath) + { + Serilog.Log.Error("Project mismatch with {ProjectName}. '{ConnectPath}' != '{SelfPath}'", connectionInfo.ProjectName, connectionInfo.ProjectPath, Self.ProjectPath); + return; + } + + if (!_clients.TryGetValue(connectionInfo.ClientId, out _)) + { + SendConnect(); + } + else + { + SendHandshake(); + if (ScriptFinder.GetActiveGameObject(out var activeGO)) + SendGameObject(activeGO); + Assister.SendTagsAndLayers(); + } + } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestConnectionInfo requestConnectionInfo) + { + SendConnectionInfo(); + } + /* + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Layers layers) + { + + } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Tags tags) + { + + } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.SortingLayers sortingLayers) + { + + }*/ + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.StringArray stringArray) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.StringArray)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.StringArrayContainer stringArrayContainer) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.StringArrayContainer)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.GameObject gameObject) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.GameObject)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ComponentData component) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ComponentData)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Animator component_Animator) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Animator)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Animation component_Animation) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Animation)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Material component_Material) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Component_Material)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestScript requestScript) + { + if (requestScript.DeclaredTypes == null || requestScript.DeclaredTypes.Length == 0) + return; + + var documentPath = requestScript.DocumentPath; + + foreach (var declaredType in requestScript.DeclaredTypes) + { + if (ScriptFinder.FindInstanceOfType(declaredType, documentPath, out var go, out var so)) + { + if (go != null) + SendGameObject(go); + else if (so != null) + SendScriptableObject(so); + else + Serilog.Log.Warning("Invalid instance of type"); + } + else + { + SendScriptMissing(declaredType); + } + } + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestScriptFast requestScriptFast) + { + var documentPath = requestScriptFast.DocumentPath; + + //**--namespace? + var possiblyDeclaredType = Path.GetFileNameWithoutExtension(documentPath); + + if (ScriptFinder.FindInstanceOfType(possiblyDeclaredType, documentPath, out var go, out var so)) + { + if (go != null) + SendGameObject(go); + else if (so != null) + SendScriptableObject(so); + else + Serilog.Log.Warning("Invalid instance of type"); + } + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ScriptMissing scriptMissing) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ScriptMissing)"); + } + + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.Handshake handshake) + { + // Do nothing + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestInternalLog requestInternalLog) + { + SendInternalLog(); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.InternalLog internalLog) + { + Logger.ELogger.VsInternalLog = internalLog.LogContent; + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.AnalyticsEvent analyticsEvent) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.AnalyticsEvent)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ErrorReport errorReport) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.ErrorReport)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestVerboseType requestVerboseType) + { + Serilog.Log.Warning("Unity/Server shouldn't call Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestVerboseType)"); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestLazyLoad requestLazyLoad) + { + Monitor.LazyLoad(requestLazyLoad.Category); + } + + internal Synchronizer.Model.RequestUpdate? DelayedRequestUpdate { get; private set; } + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RequestUpdate requestUpdate) + { + if (requestUpdate.App != "Unity" && requestUpdate.App != "SystemBinariesForDotNetStandard20") + return; + + // cannot import package in play mode, so delay it + if (EditorApplication.isPlayingOrWillChangePlaymode) + { + Serilog.Log.Information("Cannot import package in play mode, please exit play mode to update"); + DelayedRequestUpdate = requestUpdate; + return; + } + DelayedRequestUpdate = null; + + // let unity update the package, don't unzip it, to prevent file already in use and other issues + AssetDatabase.ImportPackage(requestUpdate.Path, requestUpdate.IsInteractive); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayDocumentShow relayDocumentShow) + { + ForwardRelayMessage(relayDocumentShow); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayDocumentSave relayDocumentSave) + { + ForwardRelayMessage(relayDocumentSave); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayDocumentViewportChanged relayDocumentViewportChanged) + { + ForwardRelayMessage(relayDocumentViewportChanged); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayLogMessage relayLogMessage) + { + ForwardRelayMessage(relayLogMessage); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayUpdateExport relayUpdateExport) + { + ForwardRelayMessage(relayUpdateExport); + } + + void Synchronizer.Model.IProcessor.Process(Synchronizer.Model.RelayAdornmentText relayAdornmentText) + { + ForwardRelayMessage(relayAdornmentText); + } + + } +} + diff --git a/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs.meta new file mode 100644 index 0000000..4e802af --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MQTTnetPublisher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e6bf8bab3f6a9a439b3992693b1fc34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs b/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs new file mode 100644 index 0000000..ae50f63 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Concurrent; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + //[InitializeOnLoad] + public static class MainThreadDispatcher + { + readonly static ConcurrentBag actions; + + static MainThreadDispatcher() + { + actions = new ConcurrentBag(); + EditorApplication.update += Update; + } + + /// + /// Empty method for invoking static class ctor + /// + public static void Bump() {} + + static void Update() + { + while (actions.TryTake(out var action)) + { + action.Invoke(); + } + } + + public static void Add(System.Action action) => actions.Add(action); + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs.meta new file mode 100644 index 0000000..1545893 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MainThreadDispatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 238ff68bac1bd2a44ad831a256db9cae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef b/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef new file mode 100644 index 0000000..0d5dd76 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "MerryYellow.CodeAssist.Editor", + "rootNamespace": "", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef.meta b/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef.meta new file mode 100644 index 0000000..01d3ba9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/MerryYellow.CodeAssist.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 82ec9ead3f2d6e8488c5717eed8b7cf5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs b/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs new file mode 100644 index 0000000..55d966f --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs @@ -0,0 +1,332 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine.SceneManagement; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + //[InitializeOnLoad] + public static class Monitor + { + private readonly static string tagManagerFilePath; + private static System.DateTime previousTagManagerLastWrite; + + private static bool isAppFocused; + private static bool isAppFocusedOnTagManager; + + private static int dirtyCounter; + private static readonly Dictionary dirtyDict; + + static Monitor() + { + tagManagerFilePath = CommonTools.GetTagManagerFilePath(); + try + { + previousTagManagerLastWrite = System.IO.File.GetLastWriteTime(tagManagerFilePath); + } + catch (System.Exception ex) + { + Serilog.Log.Debug(ex, "Exception at {Location}", nameof(System.IO.File.GetLastWriteTime)); + } + dirtyDict = new Dictionary(); + dirtyCounter = 0; + + EditorApplication.hierarchyChanged += OnHierarchyChanged; + EditorApplication.update += OnUpdate; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + Undo.postprocessModifications += MyPostprocessModificationsCallback; + //Undo.undoRedoPerformed += MyUndoCallback; + Selection.selectionChanged += OnSelectionChanged; + //EditorSceneManager.sceneOpened += EditorSceneManager_sceneOpened; + EditorSceneManager.activeSceneChangedInEditMode += EditorSceneManager_activeSceneChangedInEditMode; + EditorBuildSettings.sceneListChanged += EditorBuildSettings_sceneListChanged; + + Application.logMessageReceived += Application_logMessageReceived; + //System.Threading.Tasks.TaskScheduler.UnobservedTaskException += + } + + private static void EditorBuildSettings_sceneListChanged() + { + OnSceneListChanged(); + } + + private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange) + { + if (playModeStateChange != PlayModeStateChange.EnteredEditMode) + return; + + var delayedRequestUpdate = MQTTnetInitializer.Publisher?.DelayedRequestUpdate; + if (delayedRequestUpdate == null) + return; + + var processor = MQTTnetInitializer.Publisher as Synchronizer.Model.IProcessor; + processor?.Process(delayedRequestUpdate); + } + + /// + /// Empty method for invoking static class ctor + /// + public static void Bump() { } + + private static void EditorSceneManager_activeSceneChangedInEditMode(Scene arg0, Scene arg1) + { + //Debug.Log("EditorSceneManager_activeSceneChangedInEditMode"); + OnHierarchyChanged(); + } + + private static void EditorSceneManager_sceneOpened(Scene scene, OpenSceneMode mode) + { + Serilog.Log.Debug("Monitor {Event} scene:{Scene} mode:{Mode}", nameof(EditorSceneManager_sceneOpened), scene.name, mode); + //Debug.Log("EditorSceneManager_sceneOpened"); + OnHierarchyChanged(); + } + + static void OnUpdate() + { + string? currentEditorFocus = null; + if (Selection.activeObject) + currentEditorFocus = Selection.activeObject.GetType().ToString(); + + //**-- use this instead? https://learn.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher?view=net-8.0 + // there is also this approach, but need to check OnUpdate anyways for focus checking, https://github.com/AlkimeeGames/TagLayerTypeGenerator/blob/main/Editor/TypeGenerator.cs#L36 + var currentTagManagerLastWrite = previousTagManagerLastWrite; + try + { + currentTagManagerLastWrite = System.IO.File.GetLastWriteTime(tagManagerFilePath); + } + catch (System.Exception ex) + { + Serilog.Log.Debug(ex, "Exception at {Location}", nameof(System.IO.File.GetLastWriteTime)); + } + if (currentTagManagerLastWrite != previousTagManagerLastWrite) + { + previousTagManagerLastWrite = currentTagManagerLastWrite; + OnTagsOrLayersModified(); + } + else if (currentEditorFocus == "UnityEditor.TagManager") + { + // since unity does not commit changes to the file immediately, checking if user is displaying and focusing on tag manager (tags & layers) inspector + isAppFocusedOnTagManager = true; + } + + + if (isAppFocused != UnityEditorInternal.InternalEditorUtility.isApplicationActive) + { + isAppFocused = UnityEditorInternal.InternalEditorUtility.isApplicationActive; + OnOnUnityEditorFocusChanged(isAppFocused); + //Serilog.Log.Debug("On focus {State}", isAppFocused); + } + } + + static void OnTagsOrLayersModified() + { + Serilog.Log.Debug("Monitor {Event}", nameof(OnTagsOrLayersModified)); + + Assister.SendTagsAndLayers(); + } + + static void OnHierarchyChanged() + { + Serilog.Log.Debug("Monitor {Event}", nameof(OnHierarchyChanged)); + + // For requesting active doc's GO + MQTTnetInitializer.Publisher?.SendHandshake(); + + if (ScriptFinder.GetActiveGameObject(out var activeGO)) + MQTTnetInitializer.Publisher?.SendGameObject(activeGO); + //Assister.SendTagsAndLayers(); Don't send tags & layers here + } + + static void OnSceneListChanged() + { + // link below for scenes which are not on build list, but we can skip this for now, because of performance and needlessness (user probably wont work with it if its not on build list) + // https://gist.github.com/xfleckx/2527f0420fbcc428a8b86be191d8ad96 + + var scenes = EditorBuildSettings.scenes; + var count = scenes.Length; + + string[] buildIndicies = new string[count]; + string[] names = new string[count]; + string[] paths = new string[count]; + string[] namesAndPaths = new string[count * 2]; + string[] pathsAndNames = new string[count * 2]; + + for (int i = 0; i < count; i++) + { + var scene = scenes[i]; + var path = scene.path; + var name = System.IO.Path.GetFileNameWithoutExtension(path); + + buildIndicies[i] = i.ToString(); + names[i] = name; + paths[i] = path; + namesAndPaths[i] = name; + namesAndPaths[i + count] = path; + pathsAndNames[i] = path; + pathsAndNames[i + count] = name; + } + + MQTTnetInitializer.Publisher?.SendSceneList(names, paths, buildIndicies, namesAndPaths, pathsAndNames); + } + + static UndoPropertyModification[] MyPostprocessModificationsCallback(UndoPropertyModification[] modifications) + { + Serilog.Log.Debug("Monitor {Event}", nameof(MyPostprocessModificationsCallback)); + + foreach (var modification in modifications) + { + var target = modification.currentValue?.target; + SetDirty(target); + } + + // here, you can perform processing of the recorded modifications before returning them + return modifications; + } + + //static void MyUndoCallback() + //{ + // Serilog.Log.Debug("Monitor {Event}", nameof(MyUndoCallback)); + // // code for the action to take on Undo + //} + + static void OnOnUnityEditorFocusChanged(bool isFocused) + { + if (!isFocused) + { + if (isAppFocusedOnTagManager) + { + isAppFocusedOnTagManager = false; + OnTagsOrLayersModified(); + } + + OnSelectionChanged(); + FlushAllDirty(); + /* + Serilog.Log.Debug("exporting {Count} objects", selectedObjects.Count); + + //**--if too many + foreach (var obj in selectedObjects) + { + if (obj is GameObject go) + MQTTnetInitializer.Publisher.SendGameObject(go); + } + + selectedObjects.Clear(); + */ + } + } + + static void OnSelectionChanged() + { + + //**--check order, last selected should be sent last as well + //**--limit here, what if too many? + //selectedObjects.UnionWith(Selection.objects); + foreach(var so in Selection.objects) + { + SetDirty(so); + } + } + + public static void SetDirty(Object? obj) + { + if (obj == null) + return; + else if (obj is GameObject go && go) + SetDirty(go); + else if (obj is Component component && component) + //SetDirty(component.gameObject); + { + var componentGo = component.gameObject; + if (componentGo) + SetDirty(componentGo); + } + //else + //;//**--scriptable obj + } + + public static void SetDirty(GameObject go) + { + dirtyCounter++; + dirtyDict[go] = dirtyCounter; + } + + static void FlushAllDirty() + { + // Sending order is important, must send them in the same order as they are added to/modified in the collection + // Using dict instead of hashset because of that. Dict value is used as add/modify order + + var sortedDict = from entry in dirtyDict orderby entry.Value descending select entry; + + foreach (var entry in sortedDict) + { + var go = entry.Key; + MQTTnetInitializer.Publisher?.SendGameObject(go); + } + + dirtyDict.Clear(); + dirtyCounter = 0; + } + + + private static void Application_logMessageReceived(string condition, string stackTrace, LogType type) + { + if (type != LogType.Exception && type != LogType.Error && type != LogType.Warning) + return; + + if (!stackTrace.Contains("Meryel.UnityCodeAssist.Editor")) + return; + + var typeStr = type.ToString(); + + MQTTnetInitializer.Publisher?.SendErrorReport(condition, stackTrace, typeStr); + } + + + public static void LazyLoad(string category) + { + if (category == "PlayerPrefs") + { + Preferences.PreferenceMonitor.InstanceOfPlayerPrefs.Bump(); + } + else if (category == "EditorPrefs") + { + Preferences.PreferenceMonitor.InstanceOfEditorPrefs.Bump(); + } + else if (category == "InputManager") + { + Input.InputManagerMonitor.Instance.Bump(); + } + else if (category == "AnimationHuman") + { + MQTTnetInitializer.Publisher?.SendComponentHumanTrait(HumanTrait.BoneName, HumanTrait.MuscleName); + } + else if (category == "Scene") + { + OnSceneListChanged(); + } + else if (category == "ShaderGlobalKeywords") + { + MQTTnetInitializer.Publisher?.SendShaderGlobalKeywords(); + } + else + { + Serilog.Log.Error("Invalid LazyLoad category {Category}", category); + } + } + } + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs.meta new file mode 100644 index 0000000..58ed458 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Monitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 654d0913b44b86a40bee8394ea8c14cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences.meta b/Packages/com.merry-yellow.code-assist/Editor/Preferences.meta new file mode 100644 index 0000000..d33c04d --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a9386f468b6268479944ca0c56f8d07 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs new file mode 100644 index 0000000..04cf2ea --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using UnityEngine; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +//namespace BgTools.PlayerPrefsEditor +namespace Meryel.UnityCodeAssist.Editor.Preferences +{ + [System.Serializable] + public class PreferenceEntryHolder : ScriptableObject + { + public List? userDefList; + public List? unityDefList; + + private void OnEnable() + { + hideFlags = HideFlags.DontSave; + userDefList ??= new List(); + unityDefList ??= new List(); + } + + public void ClearLists() + { + userDefList?.Clear(); + unityDefList?.Clear(); + } + } + + [System.Serializable] + public class PreferenceEntry + { + public enum PrefTypes + { + String = 0, + Int = 1, + Float = 2 + } + + public PrefTypes m_typeSelection; + public string? m_key; + + // Need diffrend ones for auto type selection of serilizedProerty + public string? m_strValue; + public int m_intValue; + public float m_floatValue; + + public string? ValueAsString() + { + return m_typeSelection switch + { + PrefTypes.String => m_strValue, + PrefTypes.Int => m_intValue.ToString(), + PrefTypes.Float => m_floatValue.ToString(), + _ => string.Empty, + }; + } + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs.meta new file mode 100644 index 0000000..1ceda79 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceEntryHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b686b7831cfe0ec48b01473fa8a29772 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs new file mode 100644 index 0000000..e5b243a --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs @@ -0,0 +1,375 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Globalization; +using UnityEditor; +using UnityEngine; +using UnityEditorInternal; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Preferences +{ + public class PreferenceMonitor + { + private static readonly Lazy _instanceOfPlayerPrefs = new Lazy(() => new PreferenceMonitor(true)); + private static readonly Lazy _instanceOfEditorPrefs = new Lazy(() => new PreferenceMonitor(false)); + public static PreferenceMonitor InstanceOfPlayerPrefs => _instanceOfPlayerPrefs.Value; + public static PreferenceMonitor InstanceOfEditorPrefs => _instanceOfEditorPrefs.Value; + + //const int Limit = 128; + const int Limit = 8192; + + /// + /// PlayerPrefs or EditorPrefs + /// + readonly bool isPlayerPrefs; + +#region ErrorValues + private readonly int ERROR_VALUE_INT = int.MinValue; + private readonly string ERROR_VALUE_STR = ""; +#endregion //ErrorValues + +#pragma warning disable CS0414 + private static string pathToPrefs = String.Empty; + private static string platformPathPrefix = @"~"; +#pragma warning restore CS0414 + + //private string[] userDef; + //private string[] unityDef; + //private bool showSystemGroup = false; + + private SerializedObject? serializedObject; + private ReorderableList? userDefList; + private ReorderableList? unityDefList; + + private PreferenceEntryHolder? prefEntryHolder; + + private PreferanceStorageAccessor? entryAccessor; + + + private bool updateView = false; + //private bool monitoring = false; + //private bool showLoadingIndicatorOverlay = false; + + +#if UNITY_EDITOR_LINUX + private readonly char[] invalidFilenameChars = { '"', '\\', '*', '/', ':', '<', '>', '?', '|' }; +#elif UNITY_EDITOR_OSX + private readonly char[] invalidFilenameChars = { '$', '%', '&', '\\', '/', ':', '<', '>', '|', '~' }; +#endif + + + + PreferenceMonitor(bool isPlayerPrefs) + { + this.isPlayerPrefs = isPlayerPrefs; + OnEnable(); + EditorApplication.update += Update; + } + + ~PreferenceMonitor() + { + OnDisable(); + } + + public void Bump() + { + Serilog.Log.Debug("Bumping preference {IsPlayerPrefs}", isPlayerPrefs); + + RetrieveAndSendKeysAndValues(false); + } + + private void RetrieveAndSendKeysAndValues(bool reloadKeys) + { + string[]? keys = GetKeys(reloadKeys); + if (keys == null) + return; + string[] values = GetKeyValues(reloadKeys, keys, out var stringKeys, out var integerKeys, out var floatKeys, out var booleanKeys); + + if (isPlayerPrefs) + MQTTnetInitializer.Publisher?.SendPlayerPrefs(keys, values, stringKeys, integerKeys, floatKeys); + else + MQTTnetInitializer.Publisher?.SendEditorPrefs(keys, values, stringKeys, integerKeys, floatKeys, booleanKeys); + } + + private void OnEnable() + { +#if UNITY_EDITOR_WIN + if (isPlayerPrefs) + pathToPrefs = @"SOFTWARE\Unity\UnityEditor\" + PlayerSettings.companyName + @"\" + PlayerSettings.productName; + else + pathToPrefs = @"Software\Unity Technologies\Unity Editor 5.x"; + + platformPathPrefix = @""; + entryAccessor = new WindowsPrefStorage(pathToPrefs); +#elif UNITY_EDITOR_OSX + if (isPlayerPrefs) + pathToPrefs = @"Library/Preferences/com." + MakeValidFileName(PlayerSettings.companyName) + "." + MakeValidFileName(PlayerSettings.productName) + ".plist"; + else + pathToPrefs = @"Library/Preferences/com.unity3d.UnityEditor5.x.plist"; + + platformPathPrefix = @"~"; + entryAccessor = new MacPrefStorage(pathToPrefs); + //entryAccessor.StartLoadingDelegate = () => { showLoadingIndicatorOverlay = true; }; + //entryAccessor.StopLoadingDelegate = () => { showLoadingIndicatorOverlay = false; }; +#elif UNITY_EDITOR_LINUX + if (isPlayerPrefs) + pathToPrefs = @".config/unity3d/" + MakeValidFileName(PlayerSettings.companyName) + "/" + MakeValidFileName(PlayerSettings.productName) + "/prefs"; + else + pathToPrefs = @".local/share/unity3d/prefs"; + + platformPathPrefix = @"~"; + entryAccessor = new LinuxPrefStorage(pathToPrefs); +#else + Serilog.Log.Warning("Undefined Unity Editor platform"); + pathToPrefs = String.Empty; + platformPathPrefix = @"~"; + entryAccessor = null; +#endif + + if (entryAccessor != null) + { + entryAccessor.PrefEntryChangedDelegate = () => { updateView = true; }; + entryAccessor.StartMonitoring(); + } + } + + // Handel view updates for monitored changes + // Necessary to avoid main thread access issue + private void Update() + { + if (updateView) + { + updateView = false; + //PrepareData(); + //Repaint(); + + Serilog.Log.Debug("Updating preference {IsPlayerPrefs}", isPlayerPrefs); + + RetrieveAndSendKeysAndValues(true); + } + } + + private void OnDisable() + { + entryAccessor?.StopMonitoring(); + } + + private void InitReorderedList() + { + if (prefEntryHolder == null) + { + var tmp = Resources.FindObjectsOfTypeAll(); + if (tmp.Length > 0) + { + prefEntryHolder = tmp[0]; + } + else + { + prefEntryHolder = ScriptableObject.CreateInstance(); + } + } + + + serializedObject ??= new SerializedObject(prefEntryHolder); + + userDefList = new ReorderableList(serializedObject, serializedObject.FindProperty("userDefList"), false, true, true, true); + unityDefList = new ReorderableList(serializedObject, serializedObject.FindProperty("unityDefList"), false, true, false, false); + + } + + + + + private string[]? GetKeys(bool reloadKeys) + { + if (entryAccessor == null) + { + Serilog.Log.Warning($"{nameof(entryAccessor)} is null"); + return null; + } + + string[] keys = entryAccessor.GetKeys(reloadKeys); + + if (keys.Length > Limit) + keys = keys.Where(k => !k.StartsWith("unity.") && !k.StartsWith("UnityGraphicsQuality")).Take(Limit).ToArray(); + + return keys; + } + + string[]? _cachedKeyValues = null; + + string[]? _cachedStringKeys = null; + string[]? _cachedIntegerKeys = null; + string[]? _cachedFloatKeys = null; + string[]? _cachedBooleanKeys = null; + + private string[] GetKeyValues(bool reloadData, string[] keys, + out string[] stringKeys, out string[] integerKeys, out string[] floatKeys, out string[] booleanKeys) + { + if (!reloadData && _cachedKeyValues != null && _cachedKeyValues.Length == keys.Length) + { + stringKeys = _cachedStringKeys!; + integerKeys = _cachedIntegerKeys!; + floatKeys = _cachedFloatKeys!; + booleanKeys = _cachedBooleanKeys!; + return _cachedKeyValues; + } + + string[] values = new string[keys.Length]; + var stringKeyList = new List(); + var integerKeyList = new List(); + var floatKeyList = new List(); + var boolenKeyList = new List(); + + for (int i = 0; i < keys.Length; i++) + { + var key = keys[i]; + + string stringValue; + if (isPlayerPrefs) + stringValue = PlayerPrefs.GetString(key, ERROR_VALUE_STR); + else + stringValue = EditorPrefs.GetString(key, ERROR_VALUE_STR); + + if (stringValue != ERROR_VALUE_STR) + { + values[i] = stringValue; + stringKeyList.Add(key); + continue; + } + + float floatValue; + if (isPlayerPrefs) + floatValue = PlayerPrefs.GetFloat(key, float.NaN); + else + floatValue = EditorPrefs.GetFloat(key, float.NaN); + + if (!float.IsNaN(floatValue)) + { + values[i] = floatValue.ToString(); + floatKeyList.Add(key); + continue; + } + + int intValue; + if (isPlayerPrefs) + intValue = PlayerPrefs.GetInt(key, ERROR_VALUE_INT); + else + intValue = EditorPrefs.GetInt(key, ERROR_VALUE_INT); + + if (intValue != ERROR_VALUE_INT) + { + values[i] = intValue.ToString(); + integerKeyList.Add(key); + continue; + } + + bool boolValue = false; + if (!isPlayerPrefs) + { + bool boolValueTrue = EditorPrefs.GetBool(key, true); + bool boolValueFalse = EditorPrefs.GetBool(key, false); + + boolValue = boolValueFalse; + if (boolValueTrue == boolValueFalse) + { + values[i] = boolValueTrue.ToString(); + boolenKeyList.Add(key); + continue; + } + } + + values[i] = string.Empty; + if (isPlayerPrefs) + { + // Keys with ? causing problems, just ignore them + if (key.Contains("?")) + Serilog.Log.Debug("Invalid {PreferenceType} KEY WITH '?', '{Key}' at {Location}, str:{StringValue}, int:{IntegerValue}, float:{FloatValue}, bool:{BooleanValue}", + (isPlayerPrefs ? "PlayerPrefs" : "EditorPrefs"), key, nameof(GetKeyValues), + stringValue, intValue, floatValue, boolValue); + + else + // EditorPrefs gives error for some keys + Serilog.Log.Error("Invalid {PreferenceType} '{Key}' at {Location}, str:{StringValue}, int:{IntegerValue}, float:{FloatValue}, bool:{BooleanValue}", + (isPlayerPrefs ? "PlayerPrefs" : "EditorPrefs"), key, nameof(GetKeyValues), + stringValue, intValue, floatValue, boolValue); + } + } + + stringKeys = stringKeyList.ToArray(); + integerKeys = integerKeyList.ToArray(); + floatKeys = floatKeyList.ToArray(); + booleanKeys = boolenKeyList.ToArray(); + + _cachedKeyValues = values; + + _cachedStringKeys = stringKeys; + _cachedIntegerKeys = integerKeys; + _cachedFloatKeys = floatKeys; + _cachedBooleanKeys = booleanKeys; + + return values; + } + + private void LoadKeys(out string[]? userDef, out string[]? unityDef, bool reloadKeys) + { + if(entryAccessor == null) + { + userDef = null; + unityDef = null; + return; + } + + string[] keys = entryAccessor.GetKeys(reloadKeys); + + //keys.ToList().ForEach( e => { Debug.Log(e); } ); + + // Seperate keys int unity defined and user defined + Dictionary> groups = keys + .GroupBy((key) => key.StartsWith("unity.") || key.StartsWith("UnityGraphicsQuality")) + .ToDictionary((g) => g.Key, (g) => g.ToList()); + + unityDef = (groups.ContainsKey(true)) ? groups[true].ToArray() : new string[0]; + userDef = (groups.ContainsKey(false)) ? groups[false].ToArray() : new string[0]; + } + + +#if (UNITY_EDITOR_LINUX || UNITY_EDITOR_OSX) + private string MakeValidFileName(string unsafeFileName) + { + string normalizedFileName = unsafeFileName.Trim().Normalize(NormalizationForm.FormD); + StringBuilder stringBuilder = new StringBuilder(); + + // We need to use a TextElementEmumerator in order to support UTF16 characters that may take up more than one char(case 1169358) + TextElementEnumerator charEnum = StringInfo.GetTextElementEnumerator(normalizedFileName); + while (charEnum.MoveNext()) + { + string c = charEnum.GetTextElement(); + if (c.Length == 1 && invalidFilenameChars.Contains(c[0])) + { + stringBuilder.Append('_'); + continue; + } + UnicodeCategory unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c, 0); + if (unicodeCategory != UnicodeCategory.NonSpacingMark) + stringBuilder.Append(c); + } + return stringBuilder.ToString().Normalize(NormalizationForm.FormC); + } +#endif + + } + + +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs.meta new file mode 100644 index 0000000..7a9c9ca --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceMonitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d848223c4ab636544a7b13aeffa72434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs new file mode 100644 index 0000000..12f553d --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs @@ -0,0 +1,292 @@ +using System; +using System.Linq; + +#if UNITY_EDITOR_WIN +using Microsoft.Win32; +using System.Text; +#elif UNITY_EDITOR_OSX +using System.Diagnostics; +using System.IO; +using System.Text.RegularExpressions; +#elif UNITY_EDITOR_LINUX +using System.IO; +using System.Xml; +using System.Xml.Linq; +#endif + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +//namespace BgTools.PlayerPrefsEditor +namespace Meryel.UnityCodeAssist.Editor.Preferences +{ + public abstract class PreferanceStorageAccessor + { + protected string prefPath; + protected string[] cachedData = new string[0]; + + protected abstract void FetchKeysFromSystem(); + + protected PreferanceStorageAccessor(string pathToPrefs) + { + prefPath = pathToPrefs; + } + + public string[] GetKeys(bool reloadData = true) + { + if (reloadData || cachedData.Length == 0) + { + FetchKeysFromSystem(); + } + + return cachedData; + } + + public Action? PrefEntryChangedDelegate; + protected bool ignoreNextChange = false; + + public void IgnoreNextChange() + { + ignoreNextChange = true; + } + + protected virtual void OnPrefEntryChanged() + { + if (ignoreNextChange) + { + ignoreNextChange = false; + return; + } + + PrefEntryChangedDelegate?.Invoke(); + } + + public Action? StartLoadingDelegate; + public Action? StopLoadingDelegate; + + public abstract void StartMonitoring(); + public abstract void StopMonitoring(); + public abstract bool IsMonitoring(); + } + +#if UNITY_EDITOR_WIN + + public class WindowsPrefStorage : PreferanceStorageAccessor + { + readonly RegistryMonitor monitor; + + public WindowsPrefStorage(string pathToPrefs) : base(pathToPrefs) + { + monitor = new RegistryMonitor(RegistryHive.CurrentUser, prefPath); + monitor.RegChanged += new EventHandler(OnRegChanged); + } + + private void OnRegChanged(object sender, EventArgs e) + { + OnPrefEntryChanged(); + } + + protected override void FetchKeysFromSystem() + { + cachedData = new string[0]; + + using (RegistryKey rootKey = Registry.CurrentUser.OpenSubKey(prefPath)) + { + if (rootKey != null) + { + cachedData = rootKey.GetValueNames(); + rootKey.Close(); + } + } + + // Clean _h3320113488 nameing + //cachedData = cachedData.Select((key) => { return key.Substring(0, key.LastIndexOf("_h", StringComparison.Ordinal)); }).ToArray(); + for (int i = 0; i < cachedData.Length; i++) + { + var indexOfSuffix = cachedData[i].LastIndexOf("_h", StringComparison.Ordinal); + if (indexOfSuffix >= 0) + cachedData[i] = cachedData[i].Substring(0, indexOfSuffix); + } + + EncodeAnsiInPlace(); + } + + public override void StartMonitoring() + { + monitor.Start(); + } + + public override void StopMonitoring() + { + monitor.Stop(); + } + + public override bool IsMonitoring() + { + return monitor.IsMonitoring; + } + + private void EncodeAnsiInPlace() + { + Encoding utf8 = Encoding.UTF8; + Encoding ansi = Encoding.GetEncoding(1252); + + for (int i = 0; i < cachedData.Length; i++) + { + cachedData[i] = utf8.GetString(ansi.GetBytes(cachedData[i])); + } + } + } + +#elif UNITY_EDITOR_LINUX + + public class LinuxPrefStorage : PreferanceStorageAccessor + { + readonly FileSystemWatcher fileWatcher; + + public LinuxPrefStorage(string pathToPrefs) : base(Path.Combine(Environment.GetEnvironmentVariable("HOME"), pathToPrefs)) + { + fileWatcher = new FileSystemWatcher + { + Path = Path.GetDirectoryName(prefPath), + NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite, + Filter = "prefs" + }; + + fileWatcher.Changed += OnWatchedFileChanged; + } + + protected override void FetchKeysFromSystem() + { + cachedData = new string[0]; + + if (File.Exists(prefPath)) + { + XmlReaderSettings settings = new XmlReaderSettings(); + XmlReader reader = XmlReader.Create(prefPath, settings); + + XDocument doc = XDocument.Load(reader); + + cachedData = doc.Element("unity_prefs").Elements().Select((e) => e.Attribute("name").Value).ToArray(); + } + } + + public override void StartMonitoring() + { + fileWatcher.EnableRaisingEvents = true; + } + + public override void StopMonitoring() + { + fileWatcher.EnableRaisingEvents = false; + } + + public override bool IsMonitoring() + { + return fileWatcher.EnableRaisingEvents; + } + + private void OnWatchedFileChanged(object source, FileSystemEventArgs e) + { + OnPrefEntryChanged(); + } + } + +#elif UNITY_EDITOR_OSX + + public class MacPrefStorage : PreferanceStorageAccessor + { + private readonly FileSystemWatcher fileWatcher; + private readonly DirectoryInfo prefsDirInfo; + private readonly String prefsFileNameWithoutExtension; + + public MacPrefStorage(string pathToPrefs) : base(Path.Combine(Environment.GetEnvironmentVariable("HOME"), pathToPrefs)) + { + prefsDirInfo = new DirectoryInfo(Path.GetDirectoryName(prefPath)); + prefsFileNameWithoutExtension = Path.GetFileNameWithoutExtension(prefPath); + + fileWatcher = new FileSystemWatcher + { + Path = Path.GetDirectoryName(prefPath), + NotifyFilter = NotifyFilters.LastWrite, + Filter = Path.GetFileName(prefPath) + }; + + // MAC delete the old and create a new file instead of updating + fileWatcher.Created += OnWatchedFileChanged; + } + + protected override void FetchKeysFromSystem() + { + // Workaround to avoid incomplete tmp phase from MAC OS + foreach (FileInfo info in prefsDirInfo.GetFiles()) + { + // Check if tmp PlayerPrefs file exist + if (info.FullName.Contains(prefsFileNameWithoutExtension) && !info.FullName.EndsWith(".plist")) + { + StartLoadingDelegate?.Invoke(); + return; + } + } + StopLoadingDelegate?.Invoke(); + + cachedData = new string[0]; + + if (File.Exists(prefPath)) + { + string fixedPrefsPath = prefPath.Replace("\"", "\\\"").Replace("'", "\\'").Replace("`", "\\`"); + var cmdStr = string.Format(@"-p '{0}'", fixedPrefsPath); + + string stdOut = String.Empty; + string errOut = String.Empty; + + var process = new System.Diagnostics.Process(); + process.StartInfo.UseShellExecute = false; + process.StartInfo.FileName = "plutil"; + process.StartInfo.Arguments = cmdStr; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + process.OutputDataReceived += new DataReceivedEventHandler((sender, evt) => { stdOut += evt.Data + "\n"; }); + process.ErrorDataReceived += new DataReceivedEventHandler((sender, evt) => { errOut += evt.Data + "\n"; }); + + process.Start(); + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + process.WaitForExit(); + + MatchCollection matches = Regex.Matches(stdOut, @"(?: "")(.*)(?:"" =>.*)"); + cachedData = matches.Cast().Select((e) => e.Groups[1].Value).ToArray(); + } + } + + public override void StartMonitoring() + { + fileWatcher.EnableRaisingEvents = true; + } + + public override void StopMonitoring() + { + fileWatcher.EnableRaisingEvents = false; + } + + public override bool IsMonitoring() + { + return fileWatcher.EnableRaisingEvents; + } + + private void OnWatchedFileChanged(object source, FileSystemEventArgs e) + { + OnPrefEntryChanged(); + } + + } +#endif +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs.meta new file mode 100644 index 0000000..9880da9 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/PreferenceStorageAccessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca73981befbec034a8f1b31535ef8b7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs b/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs new file mode 100644 index 0000000..cd50d08 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs @@ -0,0 +1,339 @@ + +/* + * Thanks to gr0ss for the inspiration. + * + * https://github.com/gr0ss/RegistryMonitor + * + * 11/08/2019 + */ + +using System; +using System.ComponentModel; +using System.IO; +using System.Threading; +using System.Runtime.InteropServices; +using Microsoft.Win32; + +//namespace BgTools.PlayerPrefsEditor +namespace Meryel.UnityCodeAssist.Editor.Preferences +{ + public class RegistryMonitor : IDisposable + { + #region P/Invoke + + [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + private static extern int RegOpenKeyEx(IntPtr hKey, string subKey, uint options, int samDesired, out IntPtr phkResult); + + [DllImport("advapi32.dll", SetLastError = true)] + private static extern int RegNotifyChangeKeyValue(IntPtr hKey, bool bWatchSubtree, RegChangeNotifyFilter dwNotifyFilter, IntPtr hEvent, bool fAsynchronous); + + [DllImport("advapi32.dll", SetLastError = true)] + private static extern int RegCloseKey(IntPtr hKey); + + private const int KEY_QUERY_VALUE = 0x0001; + private const int KEY_NOTIFY = 0x0010; + private const int STANDARD_RIGHTS_READ = 0x00020000; + + private static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000)); + private static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001)); + private static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002)); + private static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003)); + private static readonly IntPtr HKEY_PERFORMANCE_DATA = new IntPtr(unchecked((int)0x80000004)); + private static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005)); + private static readonly IntPtr HKEY_DYN_DATA = new IntPtr(unchecked((int)0x80000006)); + + #endregion + + #region Event handling + + /// + /// Occurs when the specified registry key has changed. + /// + public event EventHandler RegChanged; + + /// + /// Raises the event. + /// + /// + ///

+ /// OnRegChanged is called when the specified registry key has changed. + ///

+ /// + /// When overriding in a derived class, be sure to call + /// the base class's method. + /// + ///
+ protected virtual void OnRegChanged() + { + RegChanged?.Invoke(this, null); + } + + /// + /// Occurs when the access to the registry fails. + /// + public event ErrorEventHandler Error; + + /// + /// Raises the event. + /// + /// The which occured while watching the registry. + /// + ///

+ /// OnError is called when an exception occurs while watching the registry. + ///

+ /// + /// When overriding in a derived class, be sure to call + /// the base class's method. + /// + ///
+ protected virtual void OnError(Exception e) + { + Error?.Invoke(this, new ErrorEventArgs(e)); + } + + #endregion + + #region Private member variables + + private IntPtr _registryHive; + private string _registrySubName; + private readonly object _threadLock = new object(); + private Thread _thread; + private bool _disposed = false; + private readonly ManualResetEvent _eventTerminate = new ManualResetEvent(false); + + private RegChangeNotifyFilter _regFilter = RegChangeNotifyFilter.Key | RegChangeNotifyFilter.Attribute | RegChangeNotifyFilter.Value | RegChangeNotifyFilter.Security; + + #endregion + + /// + /// Initializes a new instance of the class. + /// + /// The registry key to monitor. + public RegistryMonitor(RegistryKey registryKey) + { + InitRegistryKey(registryKey.Name); + } + + /// + /// Initializes a new instance of the class. + /// + /// The name. + public RegistryMonitor(string name) + { + if (name == null || name.Length == 0) + throw new ArgumentNullException("name"); + + InitRegistryKey(name); + } + + /// + /// Initializes a new instance of the class. + /// + /// The registry hive. + /// The sub key. + public RegistryMonitor(RegistryHive registryHive, string subKey) + { + InitRegistryKey(registryHive, subKey); + } + + /// + /// Disposes this object. + /// + public void Dispose() + { + Stop(); + _disposed = true; + GC.SuppressFinalize(this); + } + + /// + /// Gets or sets the RegChangeNotifyFilter. + /// + public RegChangeNotifyFilter RegChangeNotifyFilter + { + get { return _regFilter; } + set + { + lock (_threadLock) + { + if (IsMonitoring) + throw new InvalidOperationException("Monitoring thread is already running"); + + _regFilter = value; + } + } + } + + #region Initialization + + private void InitRegistryKey(RegistryHive hive, string name) + { + _registryHive = hive switch + { + RegistryHive.ClassesRoot => HKEY_CLASSES_ROOT, + RegistryHive.CurrentConfig => HKEY_CURRENT_CONFIG, + RegistryHive.CurrentUser => HKEY_CURRENT_USER, + RegistryHive.DynData => HKEY_DYN_DATA, + RegistryHive.LocalMachine => HKEY_LOCAL_MACHINE, + RegistryHive.PerformanceData => HKEY_PERFORMANCE_DATA, + RegistryHive.Users => HKEY_USERS, + _ => throw new InvalidEnumArgumentException("hive", (int)hive, typeof(RegistryHive)), + }; + _registrySubName = name; + } + + private void InitRegistryKey(string name) + { + string[] nameParts = name.Split('\\'); + + switch (nameParts[0]) + { + case "HKEY_CLASSES_ROOT": + case "HKCR": + _registryHive = HKEY_CLASSES_ROOT; + break; + + case "HKEY_CURRENT_USER": + case "HKCU": + _registryHive = HKEY_CURRENT_USER; + break; + + case "HKEY_LOCAL_MACHINE": + case "HKLM": + _registryHive = HKEY_LOCAL_MACHINE; + break; + + case "HKEY_USERS": + _registryHive = HKEY_USERS; + break; + + case "HKEY_CURRENT_CONFIG": + _registryHive = HKEY_CURRENT_CONFIG; + break; + + default: + _registryHive = IntPtr.Zero; + throw new ArgumentException("The registry hive '" + nameParts[0] + "' is not supported", "value"); + } + + _registrySubName = String.Join("\\", nameParts, 1, nameParts.Length - 1); + } + + #endregion + + /// + /// true if this object is currently monitoring; + /// otherwise, false. + /// + public bool IsMonitoring + { + get { return _thread != null; } + } + + /// + /// Start monitoring. + /// + public void Start() + { + if (_disposed) + throw new ObjectDisposedException(null, "This instance is already disposed"); + + lock (_threadLock) + { + if (!IsMonitoring) + { + _eventTerminate.Reset(); + _thread = new Thread(new ThreadStart(MonitorThread)) { IsBackground = true }; + _thread.Start(); + } + } + } + + /// + /// Stops the monitoring thread. + /// + public void Stop() + { + if (_disposed) + throw new ObjectDisposedException(null, "This instance is already disposed"); + + lock (_threadLock) + { + Thread thread = _thread; + if (thread != null) + { + _eventTerminate.Set(); + thread.Join(); + } + } + } + + private void MonitorThread() + { + try + { + ThreadLoop(); + } + catch (Exception e) + { + OnError(e); + } + _thread = null; + } + + private void ThreadLoop() + { + int result = RegOpenKeyEx(_registryHive, _registrySubName, 0, STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_NOTIFY, out IntPtr registryKey); + if (result != 0) + { + throw new Win32Exception(result); + } + + try + { + AutoResetEvent _eventNotify = new AutoResetEvent(false); + WaitHandle[] waitHandles = new WaitHandle[] { _eventNotify, _eventTerminate }; + while (!_eventTerminate.WaitOne(0, true)) + { + result = RegNotifyChangeKeyValue(registryKey, true, _regFilter, _eventNotify.SafeWaitHandle.DangerousGetHandle(), true); + if (result != 0) + { + throw new Win32Exception(result); + } + + if (WaitHandle.WaitAny(waitHandles) == 0) + { + OnRegChanged(); + } + } + } + finally + { + if (registryKey != IntPtr.Zero) + { + RegCloseKey(registryKey); + } + } + } + } + + /// + /// Filter for notifications reported by . + /// + [Flags] + public enum RegChangeNotifyFilter + { + /// Notify the caller if a subkey is added or deleted. + Key = 1, + /// Notify the caller of changes to the attributes of the key, + /// such as the security descriptor information. + Attribute = 2, + /// Notify the caller of changes to a value of the key. This can + /// include adding or deleting a value, or changing an existing value. + Value = 4, + /// Notify the caller of changes to the security descriptor + /// of the key. + Security = 8, + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs.meta new file mode 100644 index 0000000..4ce6770 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Preferences/RegistryMonitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe045212b5ab43f4d9860e1fb03b686b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs b/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs new file mode 100644 index 0000000..1a78f5c --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Linq; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + public class ScriptFinder //: MonoBehaviour + { + + internal static Type? GetType123(string typeName) + { + //**-- + //**-- + /* + * for performance, + * check assembly-csharp, assembly-csharp-editor, assembly-csharp-first-pass,assembly-csharp-editor-first-pass + * first, (then maybe asmdef dlls), then check mscorlib and other referenced dlls + */ + + + //**--use typecache??? + //TypeCache + + //**--check this again + //https://github.com/Unity-Technologies/SuperScience/blob/main/Editor/GlobalNamespaceWatcher.cs + + // Try Type.GetType() first. This will work with types defined + // by the Mono runtime, in the same assembly as the caller, etc. + Type type = Type.GetType(typeName); + + // If it worked, then we're done here + if (type != null) + { + return type; + } + + // Attempt to search for type on the loaded assemblies + Assembly[] currentAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (Assembly assembly in currentAssemblies) + { + type = assembly.GetType(typeName); + if (type != null) + { + return type; + } + } + + // If we still haven't found the proper type, we can enumerate all of the + // loaded assemblies and see if any of them define the type + var currentAssembly = Assembly.GetExecutingAssembly(); + var referencedAssemblies = currentAssembly.GetReferencedAssemblies(); + foreach (var assemblyName in referencedAssemblies) + { + // Load the referenced assembly + var assembly = Assembly.Load(assemblyName); + if (assembly != null) + { + // See if that assembly defines the named type + type = assembly.GetType(typeName); + if (type != null) + { + return type; + } + } + } + + // The type just couldn't be found... + return null; + } + + public static bool FindInstanceOfType(string typeName, string docPath, out GameObject? gameObjectInstanceOfType, out ScriptableObject? scriptableObjectInstanceOfType) + { + gameObjectInstanceOfType = null; + scriptableObjectInstanceOfType = null; + + var type = GetType123(typeName); + + if (type == null) + { + // Possibly a class has been created in Visual Studio, and these changes are not reflected in Unity domain yet + // We can force Unity to recompile and get the type, but since there will be no instance of that type, it won't be of any use, will be just a performance burden + Serilog.Log.Debug("{Type} type couldn't be found", typeName); + return false; + } + + + var obj = GetObjectOfType(type, out var requestVerboseType); + if (requestVerboseType) + MQTTnetInitializer.Publisher?.SendRequestVerboseType(typeName, docPath); + + if (obj != null && obj is GameObject go) + { + gameObjectInstanceOfType = go; + return true; + } + else if (obj != null && obj is ScriptableObject so) + { + scriptableObjectInstanceOfType = so; + return true; + } + + Serilog.Log.Debug("Instance of {Type} type couldn't be found", typeName); + return false; + } + + static UnityEngine.Object? GetObjectOfType(Type type, out bool requestVerboseType) + { + requestVerboseType = false; + var isMonoBehaviour = type.IsSubclassOf(typeof(MonoBehaviour)); + var isScriptableObject = type.IsSubclassOf(typeof(ScriptableObject)); + + if (!isMonoBehaviour && !isScriptableObject) + { + // Possibly a class's base class changed from none to MonoBehaviour in Visual Studio, and these changes are not reflected in Unity domain yet + // We can force Unity to recompile and get the type correctly, but since there will be no instance of that type, it won't be of any use, will be just a performance burden + Serilog.Log.Debug("{Type} is not a valid Unity object", type.ToString()); + //requestVerboseType = true; + return null; + } + + UnityEngine.Object? obj; + + obj = getObjectToSend(Selection.activeGameObject, type); + if (obj != null) + return obj; + + + obj = getObjectToSend(Selection.activeTransform, type); + if (obj != null) + return obj; + + + obj = getObjectToSend(Selection.activeObject, type); + if (obj != null) + return obj; + + + //**--check source code of this, for sorting + var filteredArray = Selection.GetFiltered(type, SelectionMode.Unfiltered); + if (filteredArray != null) + { + //**--sort + foreach (var filtered in filteredArray) + { + obj = getObjectToSend(filtered, type); + if (obj != null) + return obj; + } + } + + + + //**--rest can be slow, try avoiding them, make own db etc + //**--can add a stop-wacher and add warning if slow as well + //**--can also cache the result + + try + { + // UnityEngine.Object.FindObjectOfType is deprecated in new versions of Unity +#if UNITY_2022_3 || UNITY_2023_1_OR_NEWER + // Object.FindAnyObjectOfType doesn't return Assets (for example meshes, textures, or prefabs), or inactive objects. It also doesn't return objects that have HideFlags.DontSave set. + obj = UnityEngine.Object.FindAnyObjectByType(type); +#else + // Object.FindObjectOfType will not return Assets (meshes, textures, prefabs, ...) or inactive objects. It will not return an object that has HideFlags.DontSave set. + obj = UnityEngine.Object.FindObjectOfType(type); +#endif + } + catch (Exception ex) + { + Serilog.Log.Warning(ex, "FindObjectOfType/FindAnyObjectByType failed for {Type}, mb:{isMB}, so:{isSO}", type.ToString(), isMonoBehaviour, isScriptableObject); + } + + obj = getObjectToSend(obj, type); + if (obj != null) + return obj; + + UnityEngine.Object[]? arr = null; + try + { + // This function can return any type of Unity object that is loaded, including game objects, prefabs, materials, meshes, textures, etc. + // Contrary to Object.FindObjectsOfType this function will also list disabled objects. + arr = Resources.FindObjectsOfTypeAll(type); + } + catch (Exception ex) + { + //var isMonoBehaviour = type.IsSubclassOf(typeof(MonoBehaviour)); + //var isScriptableObject = type.IsSubclassOf(typeof(ScriptableObject)); + Serilog.Log.Warning(ex, "FindObjectsOfTypeAll failed for {Type}, mb:{isMB}, so:{isSO}", type.ToString(), isMonoBehaviour, isScriptableObject); + } + + if (arr != null) + { + //**--sort + foreach (var item in arr) + { + obj = getObjectToSend(item, type); + if (obj != null) + return obj; + } + } + + + return obj; + + + static UnityEngine.Object? getObjectToSend(UnityEngine.Object? obj, Type type) + { + if (obj == null || !obj) + return null; + + if (obj is GameObject go) + { + if (!go) + return null; + if (isTypeComponent(type) && go.GetComponent(type) != null) + return go; + } + else if (obj is Transform transform) + { + go = transform.gameObject; + if (!go) + return null; + if (isTypeComponent(type) && go.GetComponent(type) != null) + return go; + } + else if (obj is Component comp) + { + go = comp.gameObject; + if (!go) + return null; + else + return go; + } + else if (obj is ScriptableObject so) + { + if (!so) + return null; + else + return so; + } + + return null; + } + + static bool isTypeComponent(Type type) + { + var componentType = typeof(Component);//**--cache these types + if (type == componentType || type.IsSubclassOf(componentType)) + return true; + + // MonoBehaviour is Component, so below is unnecessary + //var monoBehaviourType = typeof(MonoBehaviour); + //if (type == monoBehaviourType || type.IsSubclassOf(monoBehaviourType)) + // return true; + + //else if(type is interface)//**-- + + return false; + } + } + + public static void DENEMEEEE() + { + //UnityEditor.SceneManagement.EditorSceneManager.all + //AssetDatabase.get + + foreach (var sceneGUID in AssetDatabase.FindAssets("t:Scene", new string[] { "Assets" })) + { + var scenePath = AssetDatabase.GUIDToAssetPath(sceneGUID); + Debug.Log("scenePath: " + scenePath); + + //EditorSceneManager.OpenScene(scenePath); + //var scene = EditorSceneManager.GetActiveScene(); + } + + var assets = AssetDatabase.FindAssets("Deneme_OtherScene"); + Debug.Log("Assets: " + assets.Length); + + foreach (var assetGuid in assets) + { + var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid); + Debug.Log("Asset: " + assetGuid + " " + assetPath); + } + } + + public static bool GetActiveGameObject(out GameObject activeGameObject) + { + activeGameObject = Selection.activeGameObject; + return activeGameObject ? true : false; + } + + } + + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs.meta new file mode 100644 index 0000000..cbe4681 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/ScriptFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11ac3f66eb86de34cb65aa46b691b9ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs b/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs new file mode 100644 index 0000000..54280ed --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Concurrent; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +//using Serilog = Meryel.UnityCodeAssist.Serilog; +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Setup +{ + +#if !MERYEL_UCA_LITE_VERSION + [InitializeOnLoad] + public static class SetupManager + { + static SetupManager() + { + //var cleanupPath = CommonTools.GetToolPath("CleanupObsoleteFiles.bat"); + //Assister.Execute(cleanupPath); + Cleanup.DoCleanup(); + + //var installerPath = CommonTools.GetToolPath("InstallFullVersionOfVsix.bat"); + //Assister.Execute(installerPath); + Assister.Upgrade(); + + // delete itself (file), so these cleanup and install only called once + var scriptMeta = CommonTools.GetScriptPath("SetupManager.cs.meta"); + System.IO.File.Delete(scriptMeta); + var script = CommonTools.GetScriptPath("SetupManager.cs"); + System.IO.File.Delete(script); + } + + } +#endif +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs.meta new file mode 100644 index 0000000..2589d5a --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/SetupManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff81bd2adb6cbc242b782ff821e5f58b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs b/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs new file mode 100644 index 0000000..0a1aafd --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs @@ -0,0 +1,86 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + public class StatusWindow : EditorWindow + { + GUIStyle? styleLabel; + + public static void Display() + { + // Get existing open window or if none, make a new one: + var window = GetWindow(); + window.Show(); + + MQTTnetInitializer.Publisher?.SendConnectionInfo(); + + Serilog.Log.Debug("Displaying status window"); + + MQTTnetInitializer.Publisher?.SendAnalyticsEvent("Gui", "StatusWindow_Display"); + } + + private void OnEnable() + { + //**--icon + //var icon = AssetDatabase.LoadAssetAtPath("Assets/Sprites/Gear.png"); + //titleContent = new GUIContent("Code Assist", icon); + titleContent = new GUIContent(Assister.Title); + } + + private void OnGUI() + { + var hasAnyClient = MQTTnetInitializer.Publisher?.Clients.Any() == true; + + styleLabel ??= new GUIStyle(GUI.skin.label) + { + wordWrap = true, + alignment = TextAnchor.MiddleLeft, + }; + + if (hasAnyClient) + { + EditorGUILayout.LabelField($"Code Assist is working!", styleLabel, GUILayout.ExpandWidth(true)); + + foreach (var client in MQTTnetInitializer.Publisher!.Clients) + { + EditorGUILayout.LabelField($"Connected to {client.ContactInfo}", styleLabel, GUILayout.ExpandWidth(true)); + } + } + else + { + EditorGUILayout.LabelField($"Code Assist isn't working!", styleLabel, GUILayout.ExpandWidth(true)); + + EditorGUILayout.LabelField($"No IDE found", styleLabel, GUILayout.ExpandWidth(true)); + } + +#if MERYEL_UCA_LITE_VERSION + + EditorGUILayout.LabelField($"", styleLabel, GUILayout.ExpandWidth(true)); + EditorGUILayout.LabelField($"This is the lite version of Code Assist with limited features.", styleLabel, GUILayout.ExpandWidth(true)); + EditorGUILayout.LabelField($"To unlock all of the features, get the full version.", styleLabel, GUILayout.ExpandWidth(true)); + + if (GUILayout.Button("Get full version")) + { + Application.OpenURL("https://unitycodeassist.netlify.app/purchase?utm_source=unity_getfullbutton"); + } + +#endif // MERYEL_UCA_LITE_VERSION + + + } + } + +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs.meta new file mode 100644 index 0000000..3334f99 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/StatusWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf49614de8ad81c45828cc9e98f0c174 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs b/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs new file mode 100644 index 0000000..f852243 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs @@ -0,0 +1,683 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; +using UnityEditor; +using UnityEditor.Animations; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + internal static partial class UnityClassExtensions + { + static GameObject? GetParentGO(GameObject go) + { + if (!go) + return null; + + var parentTransform = go.transform.parent; + + if (parentTransform && parentTransform.gameObject) + return parentTransform.gameObject; + else + return null; + } + + static string GetId(UnityEngine.Object? obj) + { + try + { + // obj can be null + + var globalObjectId = GlobalObjectId.GetGlobalObjectIdSlow(obj); + var objectGuid = globalObjectId.ToString(); + return objectGuid; + } + catch (Exception ex) + { + // OnBeforeSerialize of user scripts may raise exception + Serilog.Log.Warning(ex, "GetGlobalObjectIdSlow failed for obj {Obj}", obj); + return "GlobalObjectId_V1-0-00000000000000000000000000000000-0-0"; + } + } + + public static Synchronizer.Model.Component_Material? ToSyncModelOfComponentMaterial(this GameObject go) + { + if (!go.TryGetComponent(out var renderer)) + return null; + + if (!renderer) + return null; + + var propertyNames = new List(); + var propertyIndices = new List(); + var propertyTypes = new List(); + var propertyValues = new List(); + + var processedShaders = new HashSet(); + + // most of the time, there will be a single material, so initiate with capacity of 1 + var keywordsContainer = new List(1); + var passNamesContainer = new List(1); + var passIndicesContainer = new List(1); + + foreach (var material in renderer.sharedMaterials) + { + if (!material) + continue; + + var shader = material.shader; + if (!shader) + continue; + + if (processedShaders.Contains(shader)) + continue; + processedShaders.Add(shader); + + int propertyCount = shader.GetPropertyCount(); + + for (int i = 0; i < propertyCount; i++) + { + var propertyName = shader.GetPropertyName(i); + var propertyId = Shader.PropertyToID(propertyName); + + if (!material.HasProperty(propertyId)) + continue; + + var propertyTypeRaw = shader.GetPropertyType(i); + GetExtendedTypeAndValue(propertyId, propertyTypeRaw, material, out var propertyTypeExtended, out var propertyValue); + + propertyNames.Add(propertyName); + propertyIndices.Add(propertyId.ToString()); + propertyTypes.Add((int)propertyTypeExtended); + propertyValues.Add(propertyValue); + } + + keywordsContainer.Add(shader.keywordSpace.keywordNames); + + var passCount = material.passCount; + var passNames = new string[passCount]; + var passIndices = new string[passCount]; + for (int i = 0; i < passCount; i++) + { + passNames[i] = material.GetPassName(i); + passIndices[i] = i.ToString(); + } + passNamesContainer.Add(passNames); + passIndicesContainer.Add(passIndices); + } + + var data = new Synchronizer.Model.Component_Material + { + GameObjectId = GetId(go), + PropertyNames = propertyNames.ToArray(), + PropertyIndices = propertyIndices.ToArray(), + PropertyTypes = propertyTypes.ToArray(), + PropertyValues = propertyValues.ToArray(), + Keywords = ConcatenateListOfArrays(keywordsContainer), + PassNames = ConcatenateListOfArrays(passNamesContainer), + PassIndices = ConcatenateListOfArrays(passIndicesContainer), + }; + return data; + + + static void GetExtendedTypeAndValue(int propertyId, UnityEngine.Rendering.ShaderPropertyType typeRaw, Material material, out Synchronizer.Model.Component_Material.MaterialPropertyType typeExtended, out string value) + { + // Handle scalar types based on shader declaration + switch (typeRaw) + { + case UnityEngine.Rendering.ShaderPropertyType.Color: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Color; + value = material.GetColor(propertyId).ToString(); + break; + + case UnityEngine.Rendering.ShaderPropertyType.Vector: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Vector; + value = material.GetVector(propertyId).ToString(); + break; + + case UnityEngine.Rendering.ShaderPropertyType.Float: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Float; + value = material.GetFloat(propertyId).ToString(); + break; + + case UnityEngine.Rendering.ShaderPropertyType.Range: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Range; + value = material.GetFloat(propertyId).ToString(); + break; + + case UnityEngine.Rendering.ShaderPropertyType.Texture: + { + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Texture; + var texture = material.GetTexture(propertyId); + if (texture) + value = texture.name; + else + value = string.Empty; + } + break; + + case UnityEngine.Rendering.ShaderPropertyType.Int: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Integer; + value = material.GetInteger(propertyId).ToString(); + break; + + default: + typeExtended = Synchronizer.Model.Component_Material.MaterialPropertyType.Invalid; + value = string.Empty; + Serilog.Log.Error("invalid material type {TypeRaw}", typeRaw); + break; + } + } + + static string[] ConcatenateListOfArrays(List listOfArrays) + { + if (listOfArrays.Count == 0) + return new string[0]; + else if (listOfArrays.Count == 1) + return listOfArrays[0]; + + int totalLength = 0; + foreach (var arr in listOfArrays) + totalLength += arr.Length; + + string[] result = new string[totalLength]; + Span span = result.AsSpan(); + + int offset = 0; + foreach (var arr in listOfArrays) + { + arr.AsSpan().CopyTo(span.Slice(offset)); + offset += arr.Length; + } + + return result; + } + + + } + + public static Synchronizer.Model.Component_Animation? ToSyncModelOfComponentAnimation(this GameObject go) + { + if (!go.TryGetComponent(out var animation)) + return null; + + if (!animation.isActiveAndEnabled) + return null; + + var data = new Synchronizer.Model.Component_Animation + { + GameObjectId = GetId(go) + }; + + /* + var clips = AnimationUtility.GetAnimationClips(go); + data.Clips = new string[clips.Length]; + for (int i = 0; i < clips.Length; i++) + { + data.Clips[i] = clips[i].name; + } + */ + + var states = new List(); + foreach (AnimationState state in animation) + { + states.Add(state.name); + } + data.States = states.ToArray(); + + return data; + } + + public static Synchronizer.Model.Component_Animator? ToSyncModelOfComponentAnimator(this GameObject go) + { + if (!go.TryGetComponent(out var animator)) + return null; + + if (!animator.isActiveAndEnabled) + return null; + + if (!animator.runtimeAnimatorController) + return null; + + var data = new Synchronizer.Model.Component_Animator + { + GameObjectId = GetId(go) + }; + + var layerCount = animator.layerCount; + data.LayerIndices = new string[layerCount]; + data.LayerNames = new string[layerCount]; + for (int i = 0; i < layerCount; i++) + { + data.LayerIndices[i] = i.ToString(); + data.LayerNames[i] = animator.GetLayerName(i); + } + + int curParameterIndex = 0; + try + { + var parameterCount = animator.parameterCount; + data.ParameterIndices = new string[parameterCount]; + data.ParameterNames = new string[parameterCount]; + data.ParameterHashes = new string[parameterCount]; + data.ParameterTypes = new int[parameterCount]; + for (var i = 0; i < parameterCount; i++) + { + curParameterIndex = i; + // receiving error here, like "IndexOutOfRangeException: Index must be between 0 and 3", + // probably user edits it while retrieving data + var parameter = animator.GetParameter(i); + data.ParameterIndices[i] = i.ToString(); + data.ParameterNames[i] = parameter.name; + data.ParameterHashes[i] = parameter.nameHash.ToString(); + data.ParameterTypes[i] = (int)parameter.type; + } + } + catch (IndexOutOfRangeException indexOutOfRangeException) + { + Serilog.Log.Debug(indexOutOfRangeException, "handling IndexOutOfRangeException of animator.GetParameter(i)"); + + var parameterCount = curParameterIndex; + + data.ParameterIndices = ResizeArray(data.ParameterIndices, parameterCount); + data.ParameterNames = ResizeArray(data.ParameterNames, parameterCount); + data.ParameterHashes = ResizeArray(data.ParameterHashes, parameterCount); + data.ParameterTypes = ResizeArray(data.ParameterTypes, parameterCount); + } + + // When you specify a state name, or the string used to generate a hash, it should include the name of the parent layer. For example, if you have a Bounce state in the Base Layer, the name is Base Layer.Bounce + // The name should be in the form Layer.Name or Layer.SubStateMachine.Name + if (!GetAnimatorStateInfo(animator, out var states, out var transitions) || + states == null || transitions == null) //for nullables + return data; + + var stateCount = states.Count; + data.StateNames = new string[stateCount]; + data.StateNameHashes = new string[stateCount]; + data.StateTags = new string[stateCount]; + data.StateTagHashes = new string[stateCount]; + data.StateFullPaths = new string[stateCount]; + data.StateFullPathHashes = new string[stateCount]; + data.StateMotionNames = new string[stateCount]; + for (int i = 0; i < stateCount; i++) + { + var state = states[i].state; + var fullPath = states[i].fullPath; + data.StateNames[i] = state.name; + data.StateNameHashes[i] = state.nameHash.ToString(); + data.StateTags[i] = state.tag; + data.StateTagHashes[i] = Animator.StringToHash(state.tag).ToString(); + data.StateFullPaths[i] = fullPath; + data.StateFullPathHashes[i] = Animator.StringToHash(fullPath).ToString(); + var motion = state.motion; + if (motion) + data.StateMotionNames[i] = motion.name; + else + data.StateMotionNames[i] = string.Empty; + } + + var transitionCount = transitions.Count; + data.TransitionNames = new string[transitionCount]; + data.TransitionNameHashes = new string[transitionCount]; + data.TransitionUsernames = new string[transitionCount]; + data.TransitionUsernameHashes = new string[transitionCount]; + data.TransitionFullPaths = new string[transitionCount]; + data.TransitionFullPathHashes = new string[transitionCount]; + for (int i = 0; i < transitionCount; i++) + { + var transition = transitions[i].transition; + var fullPath = transitions[i].fullPath; + data.TransitionNames[i] = transition.name; + data.TransitionNameHashes[i] = Animator.StringToHash(transition.name).ToString(); + data.TransitionUsernames[i] = transition.GetDisplayName(transition.destinationState); + data.TransitionUsernameHashes[i] = Animator.StringToHash(data.TransitionUsernames[i]).ToString(); + data.TransitionFullPaths[i] = fullPath; + data.TransitionFullPathHashes[i] = Animator.StringToHash(fullPath).ToString(); + } + + var clips = animator.runtimeAnimatorController.animationClips; + data.Clips = new string[clips.Length]; + for (int i = 0; i < clips.Length; i++) + data.Clips[i] = clips[i].name; + + return data; + + //var events = clips.SelectMany(c => c.events); + + static T[] ResizeArray(T[] array, int size) + { + Array.Resize(ref array, size); + return array; + } + } + + + + public static bool GetAnimatorStateInfo(Animator animator, out List<(AnimatorState state, string fullPath)>? states, out List<(AnimatorTransition transition, string fullPath)>? transitions) + { + AnimatorController? controller = animator.runtimeAnimatorController as AnimatorController; + if (!controller || controller == null) + { + states = null; + transitions = null; + return false; + } + + AnimatorControllerLayer[] layers = controller.layers; + states = new List<(AnimatorState, string)>(); + transitions = new List<(AnimatorTransition, string)>(); + foreach (AnimatorControllerLayer layer in layers) + { + if (layer == null || layer.stateMachine == null) + continue; + + ChildAnimatorState[] animStates = layer.stateMachine.states; + getStateMachineInfo(layer.stateMachine, 0, layer.name, states, transitions); + } + return true; + + + static void getStateMachineInfo(AnimatorStateMachine stateMachine, int depth, string curPath, + List<(AnimatorState state, string fullPath)> states, + List<(AnimatorTransition transition, string fullPath)> transitions) + { + // for performance + if (depth > 4 || states.Count > 128) + return; + + states.AddRange(stateMachine.states.Select(s => (s.state, curPath + "." + s.state.name))); + + //var transitions = stateMachine.GetStateMachineTransitions(stateMachine); + transitions.AddRange(stateMachine.GetStateMachineTransitions(stateMachine).Select(t => (t, curPath + "." + t.name))); + + foreach (var subStateMachine in stateMachine.stateMachines) + getStateMachineInfo(subStateMachine.stateMachine, depth + 1, curPath + "." + subStateMachine.stateMachine.name, states, transitions); + } + } + + internal static Synchronizer.Model.GameObject? ToSyncModel(this GameObject go, int priority = 0) + { + if (!go) + return null; + + var data = new Synchronizer.Model.GameObject() + { + Id = GetId(go), + + Name = go.name, + Layer = go.layer.ToString(), + Tag = go.tag, + Scene = go.scene.name, + + ParentId = GetId(GetParentGO(go)), + ChildrenIds = getChildrenIds(go), + + Components = getComponents(go), + + Priority = priority, + }; + return data; + + static string[] getChildrenIds(GameObject g) + { + var ids = new List(); + var limit = 10;//**-- + foreach (Transform child in g.transform) + { + if (!child || !child.gameObject) + continue; + + ids.Add(GetId(child.gameObject)); + + if (--limit <= 0) + break; + } + return ids.ToArray(); + } + + //**--limit/10 + static string[] getComponents(GameObject g) => + g.GetComponents().Where(c => c).Select(c => c.GetType().FullName).Take(10).ToArray(); + /*(string[] componentNames, Synchronizer.Model.ComponentData[] componentData) getComponents(GameObject g) + { + var components = g.GetComponents(); + var names = components.Select(c => c.name).ToArray(); + + var data = new List(); + foreach (var comp in components) + { + var name = comp.name; + + + } + + return (names, data.ToArray()); + }*/ + } + + internal static Synchronizer.Model.GameObject[]? ToSyncModelOfHierarchy(this GameObject go) + { + if (!go) + return null; + + var list = new List(); + + var parent = GetParentGO(go); + if (parent != null && parent) + { + var parentModel = parent.ToSyncModel(); + if (parentModel != null) + list.Add(parentModel); + } + + int limit = 10; + foreach (Transform child in go.transform) + { + if (!child || !child.gameObject) + continue; + + var childModel = child.gameObject.ToSyncModel(); + if (childModel == null) + continue; + + list.Add(childModel); + + if (--limit <= 0) + break; + } + + return list.ToArray(); + } + + internal static Synchronizer.Model.ComponentData[]? ToSyncModelOfComponents(this GameObject go) + { + if (!go) + return null; + + var limit = 10;//**-- + return go.GetComponents().Where(c => c).Select(c => c.ToSyncModel(go)).Where(cd => cd != null).Take(limit).ToArray()!; + + /* + var components = go.GetComponents(); + var len = components.Count(c => c != null); + len = Math.Min(len, limit);//**--limit + + var array = new Synchronizer.Model.ComponentData[len]; + + var arrayIndex = 0; + foreach (var component in components) + { + if (component == null) + continue; + + array[arrayIndex++] = component.ToSyncModel(go); + + if (arrayIndex >= len) + break; + } + + return array; + */ + } + + internal static Synchronizer.Model.ComponentData? ToSyncModel(this Component component, GameObject go) + { + if (!component || !go) + return null; + + Type type = component.GetType(); + var list = new List<(string, string)>(); + ShowFieldInfo(type, component, list); + + var data = new Synchronizer.Model.ComponentData() + { + GameObjectId = GetId(go), + Component = component.GetType().FullName, + Type = Synchronizer.Model.ComponentData.DataType.Component, + Data = list.ToArray(), + }; + return data; + } + + internal static Synchronizer.Model.ComponentData? ToSyncModel(this ScriptableObject so) + { + if (!so) + return null; + + Type type = so.GetType(); + var list = new List<(string, string)>(); + ShowFieldInfo(type, so, list); + + var data = new Synchronizer.Model.ComponentData() + { + GameObjectId = GetId(so), + Component = so.GetType().FullName, + Type = Synchronizer.Model.ComponentData.DataType.ScriptableObject, + Data = list.ToArray(), + }; + return data; + } + + + static bool IsTypeCompatible(Type type) + { + if (type == null || !(type.IsSubclassOf(typeof(MonoBehaviour)) || type.IsSubclassOf(typeof(ScriptableObject)))) + return false; + return true; + } + + static void ShowFieldInfo(Type type)//, MonoImporter importer, List names, List objects, ref bool didModify) + { + // Only show default properties for types that support it (so far only MonoBehaviour derived types) + if (!IsTypeCompatible(type)) + return; + + ShowFieldInfo(type.BaseType);//, importer, names, objects, ref didModify); + + FieldInfo[] infos = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); + foreach (FieldInfo field in infos) + { + if (!field.IsPublic) + { + object[] attr = field.GetCustomAttributes(typeof(SerializeField), true); + if (attr == null || attr.Length == 0) + continue; + } + + /* + if (field.FieldType.IsSubclassOf(typeof(Object)) || field.FieldType == typeof(Object)) + { + Object oldTarget = importer.GetDefaultReference(field.Name); + Object newTarget = EditorGUILayout.ObjectField(ObjectNames.NicifyVariableName(field.Name), oldTarget, field.FieldType, false); + + names.Add(field.Name); + objects.Add(newTarget); + + if (oldTarget != newTarget) + didModify = true; + } + */ + + if (field.FieldType.IsValueType && field.FieldType.IsPrimitive && !field.FieldType.IsEnum) + { + + } + else if (field.FieldType == typeof(string)) + { + + } + } + } + + static void ShowFieldInfo(Type type, UnityEngine.Object unityObjectInstance, List<(string, string)> fields)//, MonoImporter importer, List names, List objects, ref bool didModify) + { + // Only show default properties for types that support it (so far only MonoBehaviour derived types) + if (!IsTypeCompatible(type)) + return; + + if (!unityObjectInstance) + return; + + ShowFieldInfo(type.BaseType, unityObjectInstance, fields);//, importer, names, objects, ref didModify); + + FieldInfo[] infos = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); + foreach (FieldInfo field in infos) + { + if (!field.IsPublic) + { + object[] attr = field.GetCustomAttributes(typeof(SerializeField), true); + if (attr == null || attr.Length == 0) + continue; + } + + // check attribute [HideInInspector] + { + object[] attr = field.GetCustomAttributes(typeof(HideInInspector), true); + if (attr != null && attr.Length > 0) + continue; + } + + // readonly + if (field.IsInitOnly) + continue; + + + /* + if (field.FieldType.IsSubclassOf(typeof(Object)) || field.FieldType == typeof(Object)) + { + Object oldTarget = importer.GetDefaultReference(field.Name); + Object newTarget = EditorGUILayout.ObjectField(ObjectNames.NicifyVariableName(field.Name), oldTarget, field.FieldType, false); + + names.Add(field.Name); + objects.Add(newTarget); + + if (oldTarget != newTarget) + didModify = true; + } + */ + + if (field.FieldType.IsValueType && field.FieldType.IsPrimitive && !field.FieldType.IsEnum) + { + var val = field.GetValue(unityObjectInstance); + fields.Add((field.Name, val.ToString()));//**--culture + } + else if (field.FieldType == typeof(string)) + { + var val = (string)field.GetValue(unityObjectInstance); + fields.Add((field.Name, val)); + } + } + } + + } +} diff --git a/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs.meta new file mode 100644 index 0000000..a180464 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/UnityClassExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3839ff35a8db8d4449c565bdf10551f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs b/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs new file mode 100644 index 0000000..430d38b --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs @@ -0,0 +1,305 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using UnityEngine; +using UnityEngine.Events; +using UnityEditor; + + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor.Shell +{ + public class UnityEditorShell + { + public static string DefaultShellApp + { + get + { +#if UNITY_EDITOR_WIN + return "cmd.exe"; +#elif UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX + //return "bash"; + return System.IO.File.Exists("/bin/zsh") ? "/bin/zsh" : "/bin/bash"; +#else + Serilog.Log.Error("invalid platform"); + return "invalid-platform"; +#endif + } + } + + // we are using unity actions for posterity in case we want to inspect those in-editor someday + private static readonly List ActionsQueue; + + static UnityEditorShell() + { + ActionsQueue = new List(); + EditorApplication.update += OnUpdate; + } + + // while running the Unity Editor update loop, we'll unqueue any tasks if such exist. + // actions can be + private static void OnUpdate() + { + while (ActionsQueue.Count > 0) + { + lock (ActionsQueue) + { + var action = ActionsQueue[0]; + try + { + action?.Invoke(); + } + catch (Exception e) + { + Serilog.Log.Error(e, "error invoking shell action"); + } + finally + { + ActionsQueue.RemoveAt(0); + } + } + } + } + + private static void Enqueue(UnityAction action) + { + lock (ActionsQueue) + { + ActionsQueue.Add(action); + } + } + + public static ShellCommandEditorToken Execute(string cmd) + { + var shellCommandEditorToken = new ShellCommandEditorToken(); + System.Threading.ThreadPool.QueueUserWorkItem(delegate (object state) + { + Process? process = null; + + try + { + var processStartInfo = CreateProcessStartInfo(cmd); + + // in case the command was already killed from the editor when the thread was queued + if (shellCommandEditorToken.IsKillRequested) + { + return; + } + + process = Process.Start(processStartInfo); + SetupProcessCallbacks(process, processStartInfo, shellCommandEditorToken); + ReadProcessOutput(process, shellCommandEditorToken); + } + catch (Exception e) + { + Serilog.Log.Error(e, "error starting shell"); + process?.Close(); + + Enqueue(() => + { + shellCommandEditorToken.FeedLog(UnityShellLogType.Error, e.ToString()); + shellCommandEditorToken.MarkAsDone(-1); + }); + } + }); + return shellCommandEditorToken; + } + + private static ProcessStartInfo CreateProcessStartInfo(string cmd) + { + var processStartInfo = new ProcessStartInfo(DefaultShellApp); +#if UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX + processStartInfo.Arguments = "-c"; +#elif UNITY_EDITOR_WIN + processStartInfo.Arguments = "/c"; +#endif + + processStartInfo.Arguments += (" \"" + cmd + " \""); + processStartInfo.CreateNoWindow = true; + processStartInfo.ErrorDialog = true; + processStartInfo.UseShellExecute = false; + //processStartInfo.WorkingDirectory = options.WorkingDirectory == null ? "./" : options.WorkingDirectory; + processStartInfo.RedirectStandardOutput = true; + processStartInfo.RedirectStandardError = true; + processStartInfo.RedirectStandardInput = true; + processStartInfo.StandardOutputEncoding = Encoding.UTF8; + processStartInfo.StandardErrorEncoding = Encoding.UTF8; + return processStartInfo; + } + + private static void SetupProcessCallbacks(Process process, ProcessStartInfo processStartInfo, ShellCommandEditorToken shellCommandEditorToken) + { + shellCommandEditorToken.BindProcess(process); + + process.ErrorDataReceived += delegate (object sender, DataReceivedEventArgs e) + { + Serilog.Log.Error("error on shell.ErrorDataReceived: {data}", e.Data); + }; + process.OutputDataReceived += delegate (object sender, DataReceivedEventArgs e) + { + Serilog.Log.Debug("shell.OutputDataReceived: {data}", e.Data); + }; + process.Exited += delegate (object sender, System.EventArgs e) + { + Serilog.Log.Debug("shell.Exited: {data}", e.ToString()); + }; + } + + private static void ReadProcessOutput(Process process, ShellCommandEditorToken shellCommandEditorToken) + { + do + { + var line = process.StandardOutput.ReadLine(); + if (line == null) + { + break; + } + + line = line.Replace("\\", "/"); + Enqueue(delegate () { shellCommandEditorToken.FeedLog(UnityShellLogType.Log, line); }); + } while (true); + + while (true) + { + var error = process.StandardError.ReadLine(); + if (string.IsNullOrEmpty(error)) + { + break; + } + + Enqueue(delegate () { shellCommandEditorToken.FeedLog(UnityShellLogType.Error, error); }); + } + + process.WaitForExit(); + var exitCode = process.ExitCode; + process.Close(); + Enqueue(() => { shellCommandEditorToken.MarkAsDone(exitCode); }); + } + + } + + public class ShellCommandEditorToken + { + public event UnityAction? OnLog; + public event UnityAction? OnExit; + + private Process? _process; + + internal void BindProcess(Process process) + { + _process = process; + } + + internal void FeedLog(UnityShellLogType unityShellLogType, string log) + { + OnLog?.Invoke(unityShellLogType, log); + + if (unityShellLogType == UnityShellLogType.Error) + { + HasError = true; + } + } + + public bool IsKillRequested { get; private set; } + + public void Kill() + { + if (IsKillRequested) + { + return; + } + + IsKillRequested = true; + if (_process != null) + { + _process.Kill(); + _process = null; + } + else + { + MarkAsDone(137); + } + } + + public bool HasError { get; private set; } + + public int ExitCode { get; private set; } + + public bool IsDone { get; private set; } + + internal void MarkAsDone(int exitCode) + { + ExitCode = exitCode; + IsDone = true; + OnExit?.Invoke(exitCode); + } + + /// + /// This method is intended for compiler use. Don't call it in your code. + /// + public ShellCommandAwaiter GetAwaiter() + { + return new ShellCommandAwaiter(this); + } + } + + public struct ShellCommandAwaiter : System.Runtime.CompilerServices.ICriticalNotifyCompletion + { + private readonly ShellCommandEditorToken _shellCommandEditorToken; + + public ShellCommandAwaiter(ShellCommandEditorToken shellCommandEditorToken) + { + _shellCommandEditorToken = shellCommandEditorToken; + } + + public int GetResult() + { + return _shellCommandEditorToken.ExitCode; + } + + public bool IsCompleted => _shellCommandEditorToken.IsDone; + + public void OnCompleted(Action continuation) + { + UnsafeOnCompleted(continuation); + } + + public void UnsafeOnCompleted(Action continuation) + { + if (IsCompleted) + { + continuation(); + } + else + { + _shellCommandEditorToken.OnExit += (_) => { continuation(); }; + } + } + } + + public enum UnityShellLogType + { + Log, + Error + } + + public class ShellCommandYieldable : CustomYieldInstruction + { + private readonly ShellCommandEditorToken _shellCommandEditorToken; + + public ShellCommandYieldable(ShellCommandEditorToken shellCommandEditorToken) + { + _shellCommandEditorToken = shellCommandEditorToken; + } + + public override bool keepWaiting => !_shellCommandEditorToken.IsDone; + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs.meta new file mode 100644 index 0000000..9412f7e --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/UnityEditorShell.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8a1c8d4b7d7fcc41bc2bdb8aa27522e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/Updater.cs b/Packages/com.merry-yellow.code-assist/Editor/Updater.cs new file mode 100644 index 0000000..fac4352 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Updater.cs @@ -0,0 +1,150 @@ +using System.Collections; +using UnityEngine; +using UnityEditor; +using UnityEngine.Networking; + +#pragma warning disable IDE0005 +using Serilog = Meryel.Serilog; + +#pragma warning restore IDE0005 + + +#nullable enable + + +namespace Meryel.UnityCodeAssist.Editor +{ + + public static class Updater + { + const string EditorPrefsKey = "my_uca_update_disabled"; + const string SessionStateKey = "my_uca_update_checked_before"; + const string ItchApiUri = "https://itch.io/api/1/x/wharf/latest?target=meryel/unity-code-assist&channel_name=asset"; + const string ItchStoreUri = "https://meryel.itch.io/unity-code-assist"; + const string AssetStoreUri = "https://assetstore.unity.com/packages/tools/utilities/code-assist-216713"; + const string VSMarketplaceUri = "https://marketplace.visualstudio.com/items?itemName=MerryYellow.UCA-Lite"; + const string VSCodeMarketplaceUri = "https://marketplace.visualstudio.com/items?itemName=MerryYellow.uca-lite-vscode"; + + +#pragma warning disable CS0162 + public static void CheckUpdateSilent() + { +#if !MERYEL_UCA_ITCH_BUILD + return; +#endif + + var updateDisabled = EditorPrefs.GetBool(EditorPrefsKey, false); + if (updateDisabled) + return; + + var updateCheckedBefore = SessionState.GetBool(SessionStateKey, false); + if (updateCheckedBefore) + return; + + EditorCoroutines.EditorCoroutineUtility.StartCoroutine(GetRequest(ItchApiUri, false), MQTTnetInitializer.Publisher); + } +#pragma warning restore CS0162 + + public static void CheckUpdateForced() + { + EditorCoroutines.EditorCoroutineUtility.StartCoroutine(GetRequest(ItchApiUri, true), MQTTnetInitializer.Publisher); + } + + + static void DisplayDialog() + { + SessionState.SetBool(SessionStateKey, true); + + int option = EditorUtility.DisplayDialogComplex( + "Update Unity Code Assist", + "Do you want to update asset: Unity Code Assist?", + "Update", //"Save", + "Cancel", + "Never ask again"); //"Don't Save"); + + switch (option) + { + // update - Save. + case 0: +#if MERYEL_UCA_ITCH_BUILD + Application.OpenURL(ItchStoreUri); +#endif +#if MERYEL_UCA_ASSET_STORE_BUILD + Application.OpenURL(AssetStoreUri); + Serilog.Log.Information("It may take a few days for the Asset Store team to review updates. Thank you for your patience."); +#endif +#if MERYEL_UCA_VS_MARKETPLACE_BUILD + Application.OpenURL(VSMarketplaceUri); +#endif +#if MERYEL_UCA_VSC_MARKETPLACE_BUILD + Application.OpenURL(VSCodeMarketplaceUri); +#endif + break; + + // Cancel. + case 1: + // do nothing + break; + + // never ask again - Don't Save. + case 2: + EditorPrefs.SetBool(EditorPrefsKey, true); + break; + + default: + Serilog.Log.Error("Unrecognized option for {Location}.", nameof(DisplayDialog)); + break; + } + + } + + static void Compare(string response, bool isForced) + { + var regex = new System.Text.RegularExpressions.Regex("\\d+(\\.\\d+){2,4}"); + var match = regex.Match(response); + if (!match.Success) + { + Serilog.Log.Error("Invalid update response, couldn't parse: {Response}", response); + return; + } + + var version = match.Value; + + if (Assister.VersionCompare(Assister.Version, version) >= 0) + { + if (isForced) + Serilog.Log.Information("Unity Code Assist is up to date, version: {Version}", Assister.Version); + return; + } + + DisplayDialog(); + } + + static IEnumerator GetRequest(string uri, bool isForced) + { + using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)) + { + // Request and wait for the desired page. + yield return webRequest.SendWebRequest(); + + string[] pages = uri.Split('/'); + int page = pages.Length - 1; + + switch (webRequest.result) + { + case UnityWebRequest.Result.ConnectionError: + case UnityWebRequest.Result.DataProcessingError: + Serilog.Log.Error("Error while checking new version of UnityCodeAssist " + pages[page] + ": Error: " + webRequest.error); + break; + case UnityWebRequest.Result.ProtocolError: + Serilog.Log.Error("Error while checking new version of UnityCodeAssist " + pages[page] + ": HTTP Error: " + webRequest.error); + break; + case UnityWebRequest.Result.Success: + Serilog.Log.Debug("Checking new version of UnityCodeAssist " + pages[page] + ": Received: " + webRequest.downloadHandler.text); + Compare(webRequest.downloadHandler.text, isForced); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Editor/Updater.cs.meta b/Packages/com.merry-yellow.code-assist/Editor/Updater.cs.meta new file mode 100644 index 0000000..0772a04 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/Updater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bebf3fdfe56579944af4d710a6465a94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Editor/csc.rsp b/Packages/com.merry-yellow.code-assist/Editor/csc.rsp new file mode 100644 index 0000000..99323e8 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/csc.rsp @@ -0,0 +1 @@ +-define:MERYEL_UCA_LITE_VERSION;MERYEL_UCA_VS_MARKETPLACE_BUILD diff --git a/Packages/com.merry-yellow.code-assist/Editor/csc.rsp.meta b/Packages/com.merry-yellow.code-assist/Editor/csc.rsp.meta new file mode 100644 index 0000000..d834485 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Editor/csc.rsp.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 45ca2846d675c9a438e49991db89e437 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/GPT Notice.md b/Packages/com.merry-yellow.code-assist/GPT Notice.md new file mode 100644 index 0000000..2e9ecb3 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/GPT Notice.md @@ -0,0 +1,47 @@ +Generative AI is one of the features of Code Assist. If you have any ethical or legal concerns, you can use Code Assist without this feature by disabling generative AI in the options. + +To use generative AI with your comments: +* Type "//gpt " +* Type your prompt +* Press Enter key + +To use generative AI with CodeLens: +* Click Gpt Codelens which is above class or method declaration + +Requirements (OpenAI ChatGPT): You need an OpenAI account and provide it's API key to this asset. +https://platform.openai.com/account/api-keys + +Provide key by one of the below +* Create an environment variable called OPENAI_API_KEY with the API key +* Create a file with name .openai under user profile directory with the API key +* Set API key in Visual Studio options, Tools->Options->Unity Code Assist->Generative AI->Authentication + +Requirements (Google Gemini): You need a Google account and provide it's API key to this asset. +https://ai.google.dev/gemini-api/docs/api-key + +Provide key by one of the below +* Create an environment variable called GOOGLE_API_KEY with the API key +* Create a file with name .gemini under user profile directory with the API key +* Set API key in options, Tools->Options->Unity Code Assist->Generative AI->Authentication + +Requirements (Anthropic Claude): You need an Anthropic account and provide it's API key to this asset. +https://console.anthropic.com/settings/keys + +Provide key by one of the below +* Create an environment variable called ANTHROPIC_API_KEY with the API key +* Create a file with name .anthropic under user profile directory with the API key +* Set API key in options, Tools->Options->Comment2GPT->Authentication + +Requirements (DeepSeek): You need a DeepSeek account and provide it's API key to this asset. +https://platform.deepseek.com/api_keys + +Provide key by one of the below +* Create an environment variable called DEEPSEEK_API_KEY with the API key +* Create a file with name .deepseek under user profile directory with the API key +* Set API key in options, Tools->Options->Comment2GPT->Authentication + +This asset has one-time purchase fee, but you may need to pay extra for OpenAI, Google AI, Anthropic or DeepSeek services to use Generative AI feature. +https://openai.com/pricing +https://ai.google.dev/pricing +https://www.anthropic.com/pricing#anthropic-api +https://api-docs.deepseek.com/quick_start/pricing \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/GPT Notice.md.meta b/Packages/com.merry-yellow.code-assist/GPT Notice.md.meta new file mode 100644 index 0000000..ca47924 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/GPT Notice.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 622345dc4e7719245818bc32d5dfa601 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md b/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md new file mode 100644 index 0000000..82e81a7 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md @@ -0,0 +1,8 @@ +In Unity, from the menubar select "Tools"->"Code Assist"->"Setup"->"Upgrade to full version" . This will install the full version of Visual Studio or VS Code extension. + +If above setup fails for some reason, you can also install the extensions manually. Change the file extension from "zip" to "vsix", then install from the file. + +Note that extension installers in this folder are for full version only. +For lite version, please refer to Microsoft Marketplace +https://marketplace.visualstudio.com/items?itemName=MerryYellow.UCA-Lite +https://marketplace.visualstudio.com/items?itemName=MerryYellow.uca-lite-vscode \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md.meta b/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md.meta new file mode 100644 index 0000000..bd826ab --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4061fdac4a8c7c44da5ea8538583ea9a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/README.md b/Packages/com.merry-yellow.code-assist/README.md new file mode 100644 index 0000000..61d60af --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/README.md @@ -0,0 +1,128 @@ +Code Assist improves your coding experience with Visual Studio and VS Code. Coding for Unity projects becomes easier and more efficient with fewer bugs. +Connect your game editor and IDE, let Unity and Visual Studio/VS Code share data between each other. Enrich your coding experience with the new data available. + + + +Contact: +merryyellow@outlook.com + +Website: +https://unitycodeassist.netlify.app/ + +Discord: +https://discord.gg/2CgKHDq + +Forum: +https://forum.unity.com/threads/code-assist-empower-your-ide.1384731/ + +GitHub: +https://github.com/merryyellow/Unity-Code-Assist + +Asset Store: +http://u3d.as/2N2H + +itch.io: +https://meryel.itch.io/unity-code-assist + +Visual Studio Marketplace: +https://marketplace.visualstudio.com/items?itemName=MerryYellow.UCA-Lite + +VS Code Marketplace: +https://marketplace.visualstudio.com/items?itemName=MerryYellow.uca-lite-vscode + + + +Restrictions: +* Unity 2021.2 and newer. +* Visual Studio 2022 or VS Code (1.75+). Does not work with Visual Studio for Mac, Rider or any other IDE or text editor. + + + +How to Setup: +* Import the Unity asset with the package manager into your Unity project +* In Unity, from top menu bar, select "Tools"->"Code Assist"->"Setup"->"Upgrade to full version" (You can skip this step if you have installed it before for another project). This will uninstall the lite version of extension from Visual Studio/VS Code, and then install full version of extension to Visual Studio/VS Code. To install the extension manually, see "YOUR_PROJECT_PATH/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md" +* Open your Unity project with Visual Studio/VS Code. Code Assist loads in background with low priority, so it will be ready in a minute when Visual Studio/VS Code first starts up. +* To check if setup is successfull, in Unity, from top menu bar choose "Tools"->"Code Assist"->"Status". The windows should display "Code Assist is working!". + + + +How to Use: +Code Assist is always active while you are coding. The following samples will give you a glimpse of Code Assist. +* Code Completion: In a class which derives MonoBehaviour, type "CompareTag(". When you press double quotes("), code completion popup should appear with the available tags of the scene. +* Inline Visuals: In a class which derives MonoBehaviour, type "gameObject.layer = 0;" and save the document. "Default" text should appear on top or right of "0". +* Code Analyzers: Define a Vector3 (let's say vec3). When used like "if (vec3.magnitude < 10)", a warning will appear on that line. Press Alt+Enter to convert it to "if (vec3.sqrMagnitude < 10 * 10)", which has better performance. + + + +Generative AI: +Generative AI is working only in Visual Studio (for now). It does not work in VS Code. +Generative AI is one of the features of Code Assist. If you have any ethical or legal concerns, you can use Code Assist without this feature by disabling generative AI in the options. + +To use generative AI with your comments: +* Type "//gpt " +* Type your prompt +* Press Enter key + +To use generative AI with CodeLens: +* Click Gpt Codelens which is above class or method declaration + +Requirements (OpenAI ChatGPT): You need an OpenAI account and provide it's API key to this asset. +https://platform.openai.com/account/api-keys + +Provide key by one of the below +* Create an environment variable called OPENAI_API_KEY with the API key +* Create a file with name .openai under user profile directory with the API key +* Set API key in Visual Studio options, Tools->Options->Unity Code Assist->Generative AI->Authentication + +Requirements (Google Gemini): You need a Google account and provide it's API key to this asset. +https://ai.google.dev/gemini-api/docs/api-key + +Provide key by one of the below +* Create an environment variable called GOOGLE_API_KEY with the API key +* Create a file with name .gemini under user profile directory with the API key +* Set API key in options, Tools->Options->Unity Code Assist->Generative AI->Authentication + +Requirements (Anthropic Claude): You need an Anthropic account and provide it's API key to this asset. +https://console.anthropic.com/settings/keys + +Provide key by one of the below +* Create an environment variable called ANTHROPIC_API_KEY with the API key +* Create a file with name .anthropic under user profile directory with the API key +* Set API key in options, Tools->Options->Comment2GPT->Authentication + +Requirements (DeepSeek): You need a DeepSeek account and provide it's API key to this asset. +https://platform.deepseek.com/api_keys + +Provide key by one of the below +* Create an environment variable called DEEPSEEK_API_KEY with the API key +* Create a file with name .deepseek under user profile directory with the API key +* Set API key in options, Tools->Options->Comment2GPT->Authentication + +This asset has one-time purchase fee, but you may need to pay extra for OpenAI, Google AI, Anthropic or DeepSeek services to use Generative AI feature. +https://openai.com/pricing +https://ai.google.dev/pricing +https://www.anthropic.com/pricing#anthropic-api +https://api-docs.deepseek.com/quick_start/pricing + + + +Troubleshooting: +* Make sure in Unity, "Tools"->"Code Assist"->"Status" is available from the top menu bar. If not, reimport the asset. +* Make sure in Visual Studio, "Extensions"->"Unity Code Assist"->Status is available from the top menu bar. If not, install the extension manually, see "YOUR_PROJECT_PATH/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md" +* Make sure in VS Code,"Unity Code Assist: Status" command is avaible in the commands palette (shortcut: Ctrl+Shift+P) . If not, install the extension manually, see "YOUR_PROJECT_PATH/Packages/com.merry-yellow.code-assist/Installers~/Extension Installation.md" +* If Visual Studio/VS Code has just been started, just wait; it usually takes around one minute to fully load Code Assist. +* If still not working, in Unity try "Tools"->"Code Assist"->"Synchronize" from the top menu bar. This will attempt a new connection with Visual Studio/VS Code. +* If none works above, try restarting both Unity and Visual Studio/VS Code; sometimes an unclosed background thread blocks communication channels (network ports). + + + +Error Reporting: +* In Unity, choose "Tools"->"Code Assist"->"Report error" from the menu bar, to open feedback window. +* Or in Visual Studio, choose "Extensions"->"Unity Code Assist"->"Report error" from the menu bar, to open feedback window. (There is no feedback window in VS Code, log files are under system temp folder) +* In the feedback window, you can view the most recent logs, or view full log of Unity or Visual Studio. +* You can report the error via email ( merryyellow@outlook.com ) or Discord ( https://discord.gg/2CgKHDq ) or GitHub ( https://github.com/merryyellow/Unity-Code-Assist/issues/new ) +* Attaching full logs is recommended when reporting an error. + + + +Thank you for using Code Assist. We hope this will help you in your crazy journey called game development :) \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/README.md.meta b/Packages/com.merry-yellow.code-assist/README.md.meta new file mode 100644 index 0000000..6c5fb03 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6e2203094ce734a4d89f7d4287db6b83 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/Third Party Notices.md b/Packages/com.merry-yellow.code-assist/Third Party Notices.md new file mode 100644 index 0000000..35102eb --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Third Party Notices.md @@ -0,0 +1,647 @@ +This asset is governed by the Asset Store EULA; however, the following components are governed by the licenses indicated below: + + + + +roslyn-linq-rewrite +MIT License +https://github.com/antiufo/roslyn-linq-rewrite/blob/master/LICENSE.txt +------------------------------- +MIT License + +Copyright (c) 2016 Andrea Martinelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +ConstVisualizer +MIT License +https://github.com/mrlacey/ConstVisualizer/blob/main/LICENSE +------------------------------- +MIT License + +Copyright (c) 2020 Matt Lacey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +InlineColorPicker +MIT License +https://github.com/nokola/InlineColorPicker/blob/main/LICENSE +------------------------------- +MIT License + +Copyright (c) 2021 Nokola + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +Roslyn +MIT License +https://github.com/dotnet/roslyn/blob/main/License.txt +------------------------------- +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +YamlDotNet +MIT License +https://github.com/aaubry/YamlDotNet/blob/master/LICENSE.txt +------------------------------- +Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Antoine Aubry and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +Command Line Parser +MIT License +https://github.com/commandlineparser/commandline/blob/master/License.md +------------------------------- +The MIT License (MIT) + +Copyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + + + +UnityCommandLineTools +MIT License +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md +------------------------------- +MIT License + +Copyright (c) 2020 Katsumasa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +microscope +MIT License +https://github.com/bert2/microscope/blob/main/README.md +------------------------------- +MIT License + +Copyright (c) 2020 Robert Hofmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +MQTTnet +MIT License +https://github.com/dotnet/MQTTnet/blob/master/LICENSE +------------------------------- +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors +All Rights Reserved + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +logging +MIT License +https://github.com/nreco/logging/blob/master/LICENSE +------------------------------- +MIT License + +Copyright (c) 2017 NReco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +MQTT.js +MIT License +https://github.com/mqttjs/MQTT.js/blob/main/LICENSE.md +------------------------------- +The MIT License (MIT) +Copyright (c) 2015-2016 MQTT.js contributors +MQTT.js contributors listed at https://github.com/mqttjs/MQTT.js#contributors + +Copyright 2011-2014 by Adam Rudd + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +winston +MIT License +https://github.com/winstonjs/winston/blob/master/LICENSE +------------------------------- +Copyright (c) 2010 Charlie Robbins + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + + +winston-vscode +MIT License +https://github.com/pustovitDmytro/winston-vscode/blob/master/LICENSE.md +------------------------------- +MIT License + +Copyright (c) 2023 Dmytro Pustovit + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +js-sha256 +MIT License +https://github.com/emn178/js-sha256/blob/master/LICENSE.txt +------------------------------- +Copyright (c) 2014-2024 Chen, Yi-Cyuan + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +find-process +MIT License +https://github.com/yibn2008/find-process/blob/master/LICENSE +------------------------------- +The MIT License (MIT) + +Copyright (c) 2016 Zoujie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +unitypackage +MIT License +https://github.com/natsuneko-laboratory/unitypackage/blob/main/LICENSE +------------------------------- +MIT License + +Copyright (c) 2022 Natsune Mochizuki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +Newtonsoft.Json +MIT License +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md +------------------------------- +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +Newtonsoft.Json-for-Unity +MIT License +https://github.com/applejag/Newtonsoft.Json-for-Unity/blob/master/LICENSE.md +------------------------------- +The MIT License (MIT) + +Copyright (c) 2019 Kalle Jillheden (jilleJr) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +Caching +MIT License +https://github.com/jchristn/Caching/blob/master/LICENSE.md +------------------------------- +The MIT License (MIT) +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +openai-dotnet +MIT License +https://github.com/openai/openai-dotnet/blob/main/LICENSE +------------------------------- +The MIT License (MIT) + +Copyright (c) 2024 OpenAI (https://openai.com) + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + + +azure-sdk-for-net +MIT License +https://github.com/Azure/azure-sdk-for-net/blob/main/LICENSE.txt +------------------------------- +The MIT License (MIT) + +Copyright (c) 2015 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +Anthropic.SDK +MIT License +https://github.com/tghamm/Anthropic.SDK/blob/main/LICENSE.md +------------------------------- +The MIT License (MIT) + +Copyright (c) 2023 Grant Hamm + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +DeepSeek-NET +MIT License +https://github.com/luisllamasbinaburo/DeepSeek-NET/blob/master/LICENSE.txt +------------------------------- +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +EditorCoroutines +Unity Companion License +https://unity.com/legal/licenses/unity-companion-license +------------------------------- +Unity Companion License ("License") +v1.3 + +Unity Technologies ApS (“Unity”) grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute the work of authorship that accompanies this License (“Work”), subject to the following terms and conditions: + +1. Unity Companion Use. Exercise of the license granted herein is permitted as long as it is in connection with the authoring and/or distribution of applications, software, or other content under a valid Unity content authoring and rendering engine software license (“Engine License”). That means, for example, as long as you authored content using the Work under an Engine License, you may distribute the Work in connection with that content as you see fit under this License. No other exercise of the license granted herein is permitted, and in no event may the Work be used for competitive analysis or to develop a competing product or service. + +2. No Modification of Engine License. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. + +3. Ownership; Derivative Works. + +3.1 You own your content. In this License, “derivative works” means derivatives of the Work itself--works derived only from the Work by you under this License (for example, modifying the code of the Work itself to improve its efficacy); “derivative works” of the Work do not include, for example, games, apps, or content that you create with the Work. You keep all right, title, and interest in your own content. + +3.2 Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Work and derivative works of the Work, and you hereby assign and agree to assign all such rights in those derivative works to Unity. Should assignment be invalid for any reason, you grant to Unity an irrevocable, perpetual, worldwide, non-exclusive, no-charge, and royalty-free license (with the right to grant sublicenses) under those intellectual property rights to those derivative works. You also agree to waive or refrain from asserting any author’s right, moral rights, or like rights to the extent necessary to permit exploitation as contemplated under this License. + +3.3 Your right to use derivative works. You will always have the right to use derivative works of the Work you create, consonant with this License. + +4. Trademarks. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates (“Trademarks”). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Trademark Guidelines at https://unity.com/legal/branding_trademarks. + +5. Notices & Third-Party Rights. This License, including the copyright notice associated with the Work, must be provided in all substantial portions of the Work and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Work is accompanied by a Unity “third-party notices” or similar file, you acknowledge and agree that software or content identified in that file is governed by those separate license terms. + +6. DISCLAIMER, LIMITATION OF LIABILITY. THE Work AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NON-INFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE Work OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +7. USE IS ACCEPTANCE and License Versions. Your access to and use of the Work constitutes your acceptance of this License and its terms and conditions. This License may be modified or updated; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Work under the updated License. + +8. Use in Compliance with Law and Termination. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately (i) on any breach by you of this License; and (ii) if you commence any form of patent litigation, including a cross-claim or counterclaim, against anyone wherein you allege that the Work constitutes direct or secondary/indirect patent infringement. + +9. Severability. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. + +10. Governing Law and Venue. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License (“Dispute”). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. diff --git a/Packages/com.merry-yellow.code-assist/Third Party Notices.md.meta b/Packages/com.merry-yellow.code-assist/Third Party Notices.md.meta new file mode 100644 index 0000000..590ccae --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/Third Party Notices.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9881c9372a3cb5f41a3c73f821f29ce9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.merry-yellow.code-assist/package.json b/Packages/com.merry-yellow.code-assist/package.json new file mode 100644 index 0000000..548309c --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/package.json @@ -0,0 +1,33 @@ +{ + "name" : "com.merry-yellow.code-assist", + "version" : "1.4.19", + "displayName" : "Code Assist", + "description" : "Code Assist improves your coding experience with Visual Studio and VS Code by adding more features for Unity projects. Coding Unity scripts becomes easier and more efficient and with fewer bugs.", + "unity" : "2021.2", + "type" : "tool", + "changelogUrl": "https://code-assist.netlify.app/changelog", + "dependencies" : { + }, + "keywords" : [ + "Productivity", + "Functionality", + "Script", + "CSharp", + "Scripting", + "Code Editor", + "IDE", + "Visual Studio", + "Tool", + "Code", + "Utility", + "Coding", + "C#", + "Workflow", + "Generative AI" + ], + "author" : { + "name" : "Merry Yellow", + "email" : "merryyellow@outlook.com", + "url" : "https://code-assist.netlify.app/" + } +} \ No newline at end of file diff --git a/Packages/com.merry-yellow.code-assist/package.json.meta b/Packages/com.merry-yellow.code-assist/package.json.meta new file mode 100644 index 0000000..b25ac62 --- /dev/null +++ b/Packages/com.merry-yellow.code-assist/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f5685fdf5428934e944eb260848149c +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 445a6bb..02c67f2 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -3,6 +3,7 @@ "com.unity.ai.navigation": "2.0.9", "com.unity.cinemachine": "3.1.5", "com.unity.collab-proxy": "2.10.2", + "com.unity.device-simulator.devices": "1.0.1", "com.unity.ide.rider": "3.0.38", "com.unity.ide.visualstudio": "2.0.25", "com.unity.inputsystem": "1.16.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 2af6aa2..126bc16 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,11 @@ { "dependencies": { + "com.merry-yellow.code-assist": { + "version": "file:com.merry-yellow.code-assist", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, "com.unity.ai.navigation": { "version": "2.0.9", "depth": 0, @@ -49,6 +55,13 @@ }, "url": "https://packages.unity.com" }, + "com.unity.device-simulator.devices": { + "version": "1.0.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.ext.nunit": { "version": "2.0.5", "depth": 1, diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 8d33a4e..a9fa7f7 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -524,7 +524,10 @@ PlayerSettings: m_Height: 720 m_Kind: 1 m_SubKind: - m_BuildTargetBatching: [] + m_BuildTargetBatching: + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 m_BuildTargetShaderSettings: [] m_BuildTargetGraphicsJobs: [] m_BuildTargetGraphicsJobMode: [] diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index 029ad8b..7a17e8f 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/ProjectSettings/UnityConnectSettings.asset @@ -4,7 +4,7 @@ UnityConnectSettings: m_ObjectHideFlags: 0 serializedVersion: 1 - m_Enabled: 0 + m_Enabled: 1 m_TestMode: 0 m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events m_EventUrl: https://cdp.cloud.unity3d.com/v1/events