diff --git a/Assets/Bubbles/Bomb.prefab b/Assets/Bubbles/Bomb.prefab index 23dd612..1b54bb7 100644 --- a/Assets/Bubbles/Bomb.prefab +++ b/Assets/Bubbles/Bomb.prefab @@ -249,11 +249,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f82c0d51bb10bf4ba81fd6d4b22703f, type: 3} m_Name: m_EditorClassIdentifier: + syncDirection: 0 + syncMode: 0 + syncInterval: 0 raycastRange: 5 raycastOffset: 10 isFixed: 1 isConnected: 1 bubbleColor: 4 + spriteRenderer: {fileID: 0} --- !u!114 &-7407072805594929053 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Scene.unity b/Assets/Scenes/Scene.unity index 3e0ef87..2f2653d 100644 --- a/Assets/Scenes/Scene.unity +++ b/Assets/Scenes/Scene.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 10 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,12 +38,13 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -66,6 +67,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -164,7 +168,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9603d2870cc364145b5ec0e7b5539b25, type: 3} m_Name: m_EditorClassIdentifier: - playerType: 1 + playerType: 0 + player: {fileID: 0} canShoot: 0 speed: 500 nextBubblePosition: {fileID: 2004284863} @@ -191,9 +196,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -482,7 +484,6 @@ GameObject: m_Component: - component: {fileID: 137353853} - component: {fileID: 137353852} - - component: {fileID: 137353851} - component: {fileID: 137353850} m_Layer: 0 m_Name: p1Cam @@ -529,20 +530,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 ---- !u!81 &137353851 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 137353849} - m_Enabled: 1 + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 --- !u!20 &137353852 Camera: m_ObjectHideFlags: 0 @@ -606,7 +599,8 @@ Transform: m_LocalPosition: {x: -0.8, y: -18.3, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1808279718} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &169327093 @@ -1426,14 +1420,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 2 + m_ComponentVersion: 1 m_LightType: 4 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 - m_LightVolumeEnabled: 0 + m_LightVolumeIntensityEnabled: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} m_DeprecatedPointLightCookieSprite: {fileID: 0} @@ -1443,10 +1437,8 @@ MonoBehaviour: m_NormalMapDistance: 3 m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowsEnabled: 0 + m_ShadowIntensityEnabled: 0 m_ShadowIntensity: 0.75 - m_ShadowSoftness: 0 - m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 m_LocalBounds: @@ -1742,7 +1734,6 @@ BoxCollider2D: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6678577466985844380} m_Enabled: 1 - serializedVersion: 3 m_Density: 1 m_Material: {fileID: 6200000, guid: ec1ac742e64dabc4097731c4ce2e3379, type: 2} m_IncludeLayers: @@ -1766,8 +1757,7 @@ BoxCollider2D: m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 + m_UsedByComposite: 0 m_Offset: {x: 0, y: 0.04595659} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} @@ -1778,6 +1768,7 @@ BoxCollider2D: drawMode: 0 adaptiveTiling: 0 m_AutoTiling: 0 + serializedVersion: 2 m_Size: {x: 6.03, y: 0.3619132} m_EdgeRadius: 0 --- !u!1 &506851298 @@ -1806,7 +1797,7 @@ Transform: serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 186, y: 0, z: 0} - m_LocalScale: {x: 14, y: 15, z: 1} + m_LocalScale: {x: 15, y: 15, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 35843676} @@ -2242,7 +2233,6 @@ BoxCollider2D: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6678577466410462580} m_Enabled: 1 - serializedVersion: 3 m_Density: 1 m_Material: {fileID: 6200000, guid: ec1ac742e64dabc4097731c4ce2e3379, type: 2} m_IncludeLayers: @@ -2266,8 +2256,7 @@ BoxCollider2D: m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 + m_UsedByComposite: 0 m_Offset: {x: 0, y: -0.04298713} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} @@ -2278,6 +2267,7 @@ BoxCollider2D: drawMode: 0 adaptiveTiling: 0 m_AutoTiling: 0 + serializedVersion: 2 m_Size: {x: 6.03, y: 0.35597432} m_EdgeRadius: 0 --- !u!1 &584433988 @@ -2331,9 +2321,6 @@ LineRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2435,9 +2422,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2506,7 +2490,7 @@ MonoBehaviour: - name: background audioSource: {fileID: 0} clip: {fileID: 8300000, guid: 38a1dbb3984138d43ac49e940ce4f553, type: 3} - volume: 0.4 + volume: 0 pitch: 1 loop: 1 - name: shoot @@ -2584,7 +2568,6 @@ BoxCollider2D: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 644811649} m_Enabled: 1 - serializedVersion: 3 m_Density: 1 m_Material: {fileID: 6200000, guid: ec1ac742e64dabc4097731c4ce2e3379, type: 2} m_IncludeLayers: @@ -2608,8 +2591,7 @@ BoxCollider2D: m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 + m_UsedByComposite: 0 m_Offset: {x: 0, y: 0.04595659} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} @@ -2620,6 +2602,7 @@ BoxCollider2D: drawMode: 0 adaptiveTiling: 0 m_AutoTiling: 0 + serializedVersion: 2 m_Size: {x: 6.03, y: 0.3619132} m_EdgeRadius: 0 --- !u!212 &644811652 @@ -2639,9 +2622,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2685,7 +2665,6 @@ BoxCollider2D: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6678577467424305841} m_Enabled: 1 - serializedVersion: 3 m_Density: 1 m_Material: {fileID: 0} m_IncludeLayers: @@ -2709,8 +2688,7 @@ BoxCollider2D: m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 + m_UsedByComposite: 0 m_Offset: {x: 0, y: -0.024996534} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} @@ -2721,6 +2699,7 @@ BoxCollider2D: drawMode: 0 adaptiveTiling: 0 m_AutoTiling: 0 + serializedVersion: 2 m_Size: {x: 6.03, y: 0.3199931} m_EdgeRadius: 0 --- !u!1 &743351597 @@ -2796,6 +2775,53 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 743351597} m_CullTransparentMesh: 1 +--- !u!1 &748861614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 748861615} + - component: {fileID: 748861616} + m_Layer: 0 + m_Name: p2BubbleCounter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &748861615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748861614} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.0999985, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1547254991} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &748861616 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748861614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cf366dde0253b9c41927f0c6d03a42be, type: 3} + m_Name: + m_EditorClassIdentifier: + width: 179.3 + height: 367.9 + bubbles: [] --- !u!1 &771882207 GameObject: m_ObjectHideFlags: 0 @@ -3774,12 +3800,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 --- !u!1 &953373191 GameObject: m_ObjectHideFlags: 0 @@ -4865,7 +4891,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 592.4, y: 0} - m_SizeDelta: {x: 491.35, y: 879} + m_SizeDelta: {x: 450, y: 900} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1416187539 MonoBehaviour: @@ -5234,7 +5260,6 @@ GameObject: m_Component: - component: {fileID: 1547254991} - component: {fileID: 1547254990} - - component: {fileID: 1547254989} - component: {fileID: 1547254988} m_Layer: 0 m_Name: p2Cam @@ -5281,20 +5306,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 ---- !u!81 &1547254989 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1547254987} - m_Enabled: 1 + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 --- !u!20 &1547254990 Camera: m_ObjectHideFlags: 0 @@ -5358,7 +5375,8 @@ Transform: m_LocalPosition: {x: 184.1, y: -18.3, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 748861615} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1559187753 @@ -6038,9 +6056,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -6094,9 +6109,6 @@ LineRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -6447,6 +6459,53 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1772351717} m_CullTransparentMesh: 1 +--- !u!1 &1808279717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1808279718} + - component: {fileID: 1808279719} + m_Layer: 0 + m_Name: p1BubbleCounter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1808279718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808279717} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.8, y: 1.0999985, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 137353853} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1808279719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808279717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cf366dde0253b9c41927f0c6d03a42be, type: 3} + m_Name: + m_EditorClassIdentifier: + width: 179.3 + height: 367.9 + bubbles: [] --- !u!1 &1870437254 GameObject: m_ObjectHideFlags: 0 @@ -6565,7 +6624,6 @@ BoxCollider2D: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1912173890} m_Enabled: 1 - serializedVersion: 3 m_Density: 1 m_Material: {fileID: 6200000, guid: ec1ac742e64dabc4097731c4ce2e3379, type: 2} m_IncludeLayers: @@ -6589,8 +6647,7 @@ BoxCollider2D: m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 + m_UsedByComposite: 0 m_Offset: {x: 0, y: -0.04298713} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} @@ -6601,6 +6658,7 @@ BoxCollider2D: drawMode: 0 adaptiveTiling: 0 m_AutoTiling: 0 + serializedVersion: 2 m_Size: {x: 6.03, y: 0.35597432} m_EdgeRadius: 0 --- !u!212 &1912173893 @@ -6620,9 +6678,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7229,9 +7284,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7539,7 +7591,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: -554.7, y: 0} - m_SizeDelta: {x: 491.35, y: 879} + m_SizeDelta: {x: 450, y: 900} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2105031147 MonoBehaviour: @@ -7644,9 +7696,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7713,6 +7762,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: playerType: 0 + player: {fileID: 0} canShoot: 0 speed: 500 nextBubblePosition: {fileID: 6678577465950361677} @@ -7739,9 +7789,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7835,7 +7882,7 @@ Transform: serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 14, y: 15, z: 1} + m_LocalScale: {x: 15, y: 15, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6678577465819248624} @@ -7875,9 +7922,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -7947,9 +7991,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8071,9 +8112,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8159,9 +8197,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8280,9 +8315,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8431,9 +8463,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -8481,6 +8510,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4b54f801eb73ddd4288a4042d4598a96, type: 3} m_Name: m_EditorClassIdentifier: + syncDirection: 0 + syncMode: 0 + syncInterval: 0 shootScript_p1: {fileID: 6678577465819248627} shootScript_p2: {fileID: 35843677} explosionPrefab: {fileID: 1828176872806910, guid: 64891a0eb28db934898420d80ca07cb3, @@ -8526,6 +8558,7 @@ GameObject: m_Component: - component: {fileID: 6678577467272666029} - component: {fileID: 6678577467272666028} + - component: {fileID: 6678577467272666032} m_Layer: 0 m_Name: GameManager m_TagString: Untagged @@ -8533,6 +8566,23 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!114 &6678577467272666032 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6678577467272666031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneId: 1416864910 + _assetId: 0 + serverOnly: 0 + visibility: 0 + hasSpawned: 0 --- !u!1 &6678577467275817569 GameObject: m_ObjectHideFlags: 0 @@ -8544,6 +8594,7 @@ GameObject: - component: {fileID: 6678577467275817596} - component: {fileID: 6678577467275817599} - component: {fileID: 6678577467275817598} + - component: {fileID: 6678577467275817600} m_Layer: 0 m_Name: LevelManager m_TagString: Untagged @@ -8582,6 +8633,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d597cebc8afcfd04c99718a9b0b8d93f, type: 3} m_Name: m_EditorClassIdentifier: + syncDirection: 0 + syncMode: 0 + syncInterval: 0 grid: {fileID: 6678577467275817599} bubblesArea: {fileID: 6678577467237413802} bubblesPrefabs: @@ -8608,6 +8662,23 @@ Grid: m_CellGap: {x: 0, y: 0, z: 0} m_CellLayout: 1 m_CellSwizzle: 0 +--- !u!114 &6678577467275817600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6678577467275817569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneId: 4258362879 + _assetId: 0 + serverOnly: 0 + visibility: 0 + hasSpawned: 0 --- !u!1 &6678577467424305841 GameObject: m_ObjectHideFlags: 0 @@ -8658,9 +8729,6 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: diff --git a/Assets/Scripts/Bubble.cs b/Assets/Scripts/Bubble.cs index c3246ac..b5dfb05 100644 --- a/Assets/Scripts/Bubble.cs +++ b/Assets/Scripts/Bubble.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; - -public class Bubble : MonoBehaviour +using Mirror; +public class Bubble : NetworkBehaviour { public float raycastRange = 0.15f; public float raycastOffset = 0.6f; @@ -11,6 +11,48 @@ public class Bubble : MonoBehaviour public bool isConnected; public BubbleColor bubbleColor; + public SpriteRenderer spriteRenderer; + + void OnValidate() + { + if(spriteRenderer == null){ + spriteRenderer = GetComponent(); + } + } + + + public void SetDissolveAmount(float amount) + { + if(isServer){ + setDissolveAmount(amount); + RpcSetDissolveAmount(amount); + }else{ + CmdSetDissolveAmount(amount); + } + } + + [Command] + public void CmdSetDissolveAmount(float amount) + { + setDissolveAmount(amount); + RpcSetDissolveAmount(amount); + } + + [ClientRpc] + public void RpcSetDissolveAmount(float amount) + { + setDissolveAmount(amount); + } + + void setDissolveAmount(float amount) + { + spriteRenderer.material.SetFloat("_DissolveAmount", amount); + } + + public float GetDissolveAmount() + { + return spriteRenderer.material.GetFloat("_DissolveAmount"); + } private void OnCollisionEnter2D(Collision2D collision) { diff --git a/Assets/Scripts/BubbleCounter.cs b/Assets/Scripts/BubbleCounter.cs new file mode 100644 index 0000000..376683e --- /dev/null +++ b/Assets/Scripts/BubbleCounter.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class BubbleCounter : MonoBehaviour +{ + public float width = 100; + public float height = 200; + bool drawGizmos = true; + + public List bubbles; + void Update() + { + Collider2D[] colliders = Physics2D.OverlapBoxAll(transform.position, new Vector2(width, height), 0); + List newBubbles = new List(); + foreach (Collider2D collider in colliders) + { + if (collider.GetComponent() != null) + { + newBubbles.Add(collider.GetComponent()); + } + } + + bubbles = newBubbles; + } + + + void OnDrawGizmos() + { + if (!drawGizmos) + return; + + Gizmos.color = Color.red; + Gizmos.DrawWireCube(transform.position, new Vector3(width, height, 0)); + } +} diff --git a/Assets/Scripts/BubbleCounter.cs.meta b/Assets/Scripts/BubbleCounter.cs.meta new file mode 100644 index 0000000..ac0a9fe --- /dev/null +++ b/Assets/Scripts/BubbleCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf366dde0253b9c41927f0c6d03a42be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 7f6d0f4..821d3c6 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; - -public class GameManager : MonoBehaviour +using Mirror; +public class GameManager : NetworkBehaviour { #region Singleton public static GameManager instance; @@ -70,8 +70,8 @@ public class GameManager : MonoBehaviour else continue; } - SpriteRenderer spriteRenderer = bubble.GetComponent(); - float dissolveAmount = spriteRenderer.material.GetFloat("_DissolveAmount"); + Bubble bubbleScript = bubble.GetComponent(); + float dissolveAmount = bubbleScript.GetDissolveAmount(); if (dissolveAmount >= 0.99f) { @@ -82,7 +82,7 @@ public class GameManager : MonoBehaviour else { float newDissolve = dissolveAmount + dissolveSpeed * Time.deltaTime; - spriteRenderer.material.SetFloat("_DissolveAmount", newDissolve); + bubbleScript.SetDissolveAmount(newDissolve); } } } @@ -168,10 +168,10 @@ public class GameManager : MonoBehaviour if (LevelManager.instance.bubblesInScene.Count == 0) { - ScoreManager man = ScoreManager.GetInstance(); - winScore.GetComponent().text = man.GetScore().ToString(); - winThrows.GetComponent().text = man.GetThrows().ToString(); - WinMenu.SetActive(true); + // ScoreManager man = ScoreManager.GetInstance(); + // winScore.GetComponent().text = man.GetScore().ToString(); + // winThrows.GetComponent().text = man.GetThrows().ToString(); + // WinMenu.SetActive(true); } else { @@ -241,6 +241,7 @@ public class GameManager : MonoBehaviour //create explosion effect GameObject explosion = Instantiate(explosionPrefab, t.position, Quaternion.identity); + NetworkServer.Spawn(explosion); explosion.transform.localScale = new Vector3(25f, 25f, 1f); Destroy(explosion, 0.5f); diff --git a/Assets/Scripts/LevelManager.cs b/Assets/Scripts/LevelManager.cs index 0420b8e..0302067 100644 --- a/Assets/Scripts/LevelManager.cs +++ b/Assets/Scripts/LevelManager.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; using UnityEngine; +using Mirror; -public class LevelManager : MonoBehaviour +public class LevelManager : NetworkBehaviour { #region Singleton @@ -31,10 +32,15 @@ public class LevelManager : MonoBehaviour { grid = GetComponent(); - StartCoroutine(LoadLevel()); } - public void StartNewGame() + public override void OnStartServer() + { + base.OnStartServer(); + StartCoroutine(LoadLevel()); + } + + public void StartNewGame() { GameManager.instance.startUI.SetActive(false); GameManager.instance.levelsUI.SetActive(true); @@ -68,8 +74,9 @@ public class LevelManager : MonoBehaviour if (!specials.Contains(bubble)) { specials.Add(bubble); - Instantiate(specialBubblePrefab, bubble.position, Quaternion.identity, bubblesArea); - Destroy(bubble.gameObject); + var bubbleToSpawn = Instantiate(specialBubblePrefab, bubble.position, Quaternion.identity, bubblesArea); + NetworkServer.Spawn(bubbleToSpawn); + NetworkServer.Destroy(bubble.gameObject); } } } @@ -108,6 +115,7 @@ public class LevelManager : MonoBehaviour foreach (Transform t in go.transform) { var bubble = Instantiate(_prefabs[Random.Range(0, _prefabs.Count)], bubblesArea); + NetworkServer.Spawn(bubble); bubble.transform.position = t.position; } diff --git a/Assets/Scripts/NetPlayer.cs b/Assets/Scripts/NetPlayer.cs index b06854f..e6815b3 100644 --- a/Assets/Scripts/NetPlayer.cs +++ b/Assets/Scripts/NetPlayer.cs @@ -1,33 +1,96 @@ +using System; using Mirror; using UnityEngine; public class NetPlayer : NetworkBehaviour { public PlayerType playerType; + public static NetPlayer localPlayer; void Start() { - + if(!isLocalPlayer){return;} + localPlayer = this; NetPlayer[] players = FindObjectsOfType(); if (players.Length > 1) { playerType = PlayerType.Client; - Shooter.client.Toggle(true); - Shooter.master.Toggle(false); + Shooter.client.player = this; } else { playerType = PlayerType.Master; - - Shooter.master.Toggle(true); - Shooter.client.Toggle(false); + Shooter.master.player = this; + } + + CmdSetPlayerType(playerType.ToString()); + } + + + [Command] + void CmdSetPlayerType(string type){ + SetPlayerType(type); + RpcSetPlayerType(type); + } + + [ClientRpc] + void RpcSetPlayerType(string type){ + SetPlayerType(type); + } + + + void SetPlayerType(string type){ + playerType = (PlayerType)Enum.Parse(typeof(PlayerType), type); + if(playerType == PlayerType.Master){ + Shooter.master.player = this; + }else{ + Shooter.client.player = this; } } - // Update is called once per frame - void Update() - { - + + public void RequestSwapBubbles(){ + if(isLocalPlayer && !isServer){ + CmdSwapBubbles(); + }else if(isLocalPlayer && isServer){ + swapBubbles(); + } } + + [Command] + void CmdSwapBubbles(){ + swapBubbles(); + } + + void swapBubbles(){ + if(playerType == PlayerType.Master){ + Shooter.master.SwapBubbles(); + }else{ + Shooter.client.SwapBubbles(); + } + } + public void RequestShoot(float lookAngle) + { + if(isLocalPlayer && !isServer){ + CmdShoot(lookAngle); + }else if(isLocalPlayer && isServer){ + shoot(lookAngle); + } + } + + [Command] + void CmdShoot(float lookAngle){ + shoot(lookAngle); + } + + void shoot(float lookAngle){ + if(playerType == PlayerType.Master){ + Shooter.master.Shoot(lookAngle); + }else{ + Shooter.client.Shoot(lookAngle); + } + } + + } public enum PlayerType diff --git a/Assets/Scripts/Shooter.cs b/Assets/Scripts/Shooter.cs index e8ab77b..9961c51 100644 --- a/Assets/Scripts/Shooter.cs +++ b/Assets/Scripts/Shooter.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Mirror; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; @@ -6,7 +7,7 @@ using UnityEngine.UI; public class Shooter : MonoBehaviour { public PlayerType playerType; - + public NetPlayer player; public static Shooter master; public static Shooter client; @@ -42,11 +43,16 @@ public class Shooter : MonoBehaviour public void Awake() { limit = GameObject.FindGameObjectWithTag("Limit"); + if(playerType == PlayerType.Master){ + master = this; + }else if(playerType == PlayerType.Client){ + client= this; + } //lineRenderer = line.GetComponent(); } private void Start() { - swapButton.onClick.AddListener(SwapBubbles); + swapButton.onClick.AddListener(SwapBubblesNetwork); } public void Update() { @@ -115,7 +121,12 @@ public class Shooter : MonoBehaviour public void OnPointerUp(BaseEventData e) { + player.RequestShoot(lookAngle); + } + + public void Shoot(float _lookAngle){ if(!canShoot){return;} + lookAngle = _lookAngle; canShoot = false; Shoot(); } @@ -134,7 +145,9 @@ public class Shooter : MonoBehaviour rb.gravityScale = 0; currentBubble = null; } - + void SwapBubblesNetwork(){ + player.RequestSwapBubbles(); + } public void SwapBubbles() { List bubblesInScene = LevelManager.instance.bubblesInScene; @@ -193,7 +206,8 @@ public class Shooter : MonoBehaviour { if (bubblesInScene.Count > 0) { - GameObject newBubble = Instantiate(bubblesInScene[Random.Range(0, bubblesInScene.Count)]); + GameObject newBubble = Instantiate(bubblesInScene[Random.Range(0, bubblesInScene.Count)], new Vector3(0, -100, 0), Quaternion.identity); + NetworkServer.Spawn(newBubble); newBubble.transform.position = nextBubblePosition.position; newBubble.GetComponent().isFixed = false; newBubble.GetComponent().enabled = false; diff --git a/Assets/Settings/Renderer2D.asset b/Assets/Settings/Renderer2D.asset index 18acab9..0073f44 100644 --- a/Assets/Settings/Renderer2D.asset +++ b/Assets/Settings/Renderer2D.asset @@ -16,16 +16,6 @@ MonoBehaviour: debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} - probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, - type: 3} - probeVolumeResources: - probeVolumeDebugShader: {fileID: 0} - probeVolumeFragmentationDebugShader: {fileID: 0} - probeVolumeOffsetDebugShader: {fileID: 0} - probeVolumeSamplingDebugShader: {fileID: 0} - probeSamplingDebugMesh: {fileID: 0} - probeSamplingDebugTexture: {fileID: 0} - probeVolumeBlendStatesCS: {fileID: 0} m_RendererFeatures: [] m_RendererFeatureMap: m_UseNativeRenderPass: 0 @@ -52,7 +42,35 @@ MonoBehaviour: m_CameraSortingLayerDownsamplingMethod: 0 m_MaxLightRenderTextureCount: 16 m_MaxShadowRenderTextureCount: 1 + m_ShapeLightShader: {fileID: 4800000, guid: d79e1c784eaf80c4585c0be7391f757a, type: 3} + m_ShapeLightVolumeShader: {fileID: 4800000, guid: 7e60080c8cd24a2468cb08b4bfee5606, + type: 3} + m_PointLightShader: {fileID: 4800000, guid: e35a31e1679aeff489e202f5cc4853d5, type: 3} + m_PointLightVolumeShader: {fileID: 4800000, guid: c7d04ca57e5449d49ad9cee1c604bc26, + type: 3} + m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, + type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, + type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, + type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, + type: 3} + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, + type: 3} m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} m_DefaultMaterialType: 0 m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, + type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, + type: 2} diff --git a/Assets/UnityProjectCloner.meta b/Assets/UnityProjectCloner.meta new file mode 100644 index 0000000..34a987f --- /dev/null +++ b/Assets/UnityProjectCloner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 350f1ed0dac732249a87fedad2597ed0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UnityProjectCloner/Editor.meta b/Assets/UnityProjectCloner/Editor.meta new file mode 100644 index 0000000..5592fa8 --- /dev/null +++ b/Assets/UnityProjectCloner/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0e79e43e01ff3e4991e8902ac89b322 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UnityProjectCloner/Editor/ProjectCloner.cs b/Assets/UnityProjectCloner/Editor/ProjectCloner.cs new file mode 100644 index 0000000..bfdc817 --- /dev/null +++ b/Assets/UnityProjectCloner/Editor/ProjectCloner.cs @@ -0,0 +1,487 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Runtime.InteropServices; +using System.IO; +using UnityProjectCloner; + +namespace UnityProjectCloner +{ + /// + /// Contains all required methods for creating a linked clone of the Unity project. + /// + public class ProjectCloner + { + /// + /// Name used for an identifying file created in the clone project directory. + /// + /// + /// (!) Do not change this after the clone was created, because then connection will be lost. + /// + public const string CloneFileName = ".clone"; + + /// + /// Suffix added to the end of the project clone name when it is created. + /// + /// + /// (!) Do not change this after the clone was created, because then connection will be lost. + /// + public const string CloneNameSuffix = "_clone"; + + public const int MaxCloneProjectCount = 10; + + #region Managing clones + /// + /// Creates clone from the project currently open in Unity Editor. + /// + /// + public static Project CreateCloneFromCurrent() + { + if (IsClone()) + { + Debug.LogError("This project is already a clone. Cannot clone it."); + return null; + } + + string currentProjectPath = ProjectCloner.GetCurrentProjectPath(); + return ProjectCloner.CreateCloneFromPath(currentProjectPath); + } + + /// + /// Creates clone of the project located at the given path. + /// + /// + /// + public static Project CreateCloneFromPath(string sourceProjectPath) + { + Project sourceProject = new Project(sourceProjectPath); + + string cloneProjectPath = null; + + //Find available clone suffix id + for (int i = 0; i < MaxCloneProjectCount; i++) + { + string originalProjectPath = ProjectCloner.GetCurrentProject().projectPath; + string possibleCloneProjectPath = originalProjectPath + ProjectCloner.CloneNameSuffix + "_" + i; + + if (!Directory.Exists(possibleCloneProjectPath)) + { + cloneProjectPath = possibleCloneProjectPath; + break; + } + } + if (string.IsNullOrEmpty(cloneProjectPath)) + { + Debug.LogError("The number of cloned projects has reach its limit. Limit: " + MaxCloneProjectCount); + return null; + } + + Project cloneProject = new Project(cloneProjectPath); + + Debug.Log("Start project name: " + sourceProject); + Debug.Log("Clone project name: " + cloneProject); + + ProjectCloner.CreateProjectFolder(cloneProject); + ProjectCloner.CopyLibraryFolder(sourceProject, cloneProject); + + ProjectCloner.LinkFolders(sourceProject.assetPath, cloneProject.assetPath); + ProjectCloner.LinkFolders(sourceProject.projectSettingsPath, cloneProject.projectSettingsPath); + ProjectCloner.LinkFolders(sourceProject.packagesPath, cloneProject.packagesPath); + ProjectCloner.LinkFolders(sourceProject.autoBuildPath, cloneProject.autoBuildPath); + + ProjectCloner.RegisterClone(cloneProject); + + return cloneProject; + } + + /// + /// Registers a clone by placing an identifying ".clone" file in its root directory. + /// + /// + private static void RegisterClone(Project cloneProject) + { + /// Add clone identifier file. + string identifierFile = Path.Combine(cloneProject.projectPath, ProjectCloner.CloneFileName); + File.Create(identifierFile).Dispose(); + + /// Add collabignore.txt to stop the clone from messing with Unity Collaborate if it's enabled. Just in case. + string collabignoreFile = Path.Combine(cloneProject.projectPath, "collabignore.txt"); + File.WriteAllText(collabignoreFile, "*"); /// Make it ignore ALL files in the clone. + } + + /// + /// Opens a project located at the given path (if one exists). + /// + /// + public static void OpenProject(string projectPath) + { + if (!Directory.Exists(projectPath)) + { + Debug.LogError("Cannot open the project - provided folder (" + projectPath + ") does not exist."); + return; + } + if (projectPath == ProjectCloner.GetCurrentProjectPath()) + { + Debug.LogError("Cannot open the project - it is already open."); + return; + } + + string fileName = EditorApplication.applicationPath; + string args = "-projectPath \"" + projectPath + "\""; + Debug.Log("Opening project \"" + fileName + " " + args + "\""); + ProjectCloner.StartHiddenConsoleProcess(fileName, args); + } + + /// + /// Deletes the clone of the currently open project, if such exists. + /// + public static void DeleteClone(string cloneProjectPath) + { + /// Clone won't be able to delete itself. + if (ProjectCloner.IsClone()) return; + + ///Extra precautions. + if (cloneProjectPath == string.Empty) return; + if (cloneProjectPath == ProjectCloner.GetOriginalProjectPath()) return; + if (!cloneProjectPath.EndsWith(ProjectCloner.CloneNameSuffix)) return; + + //Check what OS is + switch (Application.platform) + { + case (RuntimePlatform.WindowsEditor): + Debug.Log("Attempting to delete folder \"" + cloneProjectPath + "\""); + string args = "/c " + @"rmdir /s/q " + string.Format("\"{0}\"", cloneProjectPath); + StartHiddenConsoleProcess("cmd.exe", args); + + break; + case (RuntimePlatform.OSXEditor): + throw new System.NotImplementedException("No Mac function implement yet :("); + //break; + case (RuntimePlatform.LinuxEditor): + throw new System.NotImplementedException("No linux support yet :("); + //break; + default: + Debug.LogWarning("Not in a known editor. Where are you!?"); + break; + } + } + #endregion + + #region Creating project folders + /// + /// Creates an empty folder using data in the given Project object + /// + /// + public static void CreateProjectFolder(Project project) + { + string path = project.projectPath; + Debug.Log("Creating new empty folder at: " + path); + Directory.CreateDirectory(path); + } + + /// + /// Copies the full contents of the unity library. We want to do this to avoid the lengthy reserialization of the whole project when it opens up the clone. + /// + /// + /// + public static void CopyLibraryFolder(Project sourceProject, Project destinationProject) + { + if (Directory.Exists(destinationProject.libraryPath)) + { + Debug.LogWarning("Library copy: destination path already exists! "); + return; + } + + Debug.Log("Library copy: " + destinationProject.libraryPath); + ProjectCloner.CopyDirectoryWithProgressBar(sourceProject.libraryPath, destinationProject.libraryPath, "Cloning project '" + sourceProject.name + "'. "); + } + #endregion + + #region Creating symlinks + /// + /// Creates a symlink between destinationPath and sourcePath (Mac version). + /// + /// + /// + private static void CreateLinkMac(string sourcePath, string destinationPath) + { + Debug.LogWarning("This hasn't been tested yet! I am mac-less :( Please chime in on the github if it works for you."); + + string cmd = "ln " + string.Format("\"{0}\" \"{1}\"", destinationPath, sourcePath); + Debug.Log("Mac hard link " + cmd); + + ProjectCloner.StartHiddenConsoleProcess("/bin/bash", cmd); + } + + /// + /// Creates a symlink between destinationPath and sourcePath (Windows version). + /// + /// + /// + private static void CreateLinkWin(string sourcePath, string destinationPath) + { + string cmd = "/C mklink /J " + string.Format("\"{0}\" \"{1}\"", destinationPath, sourcePath); + Debug.Log("Windows junction: " + cmd); + ProjectCloner.StartHiddenConsoleProcess("cmd.exe", cmd); + } + + /// + /// Creates a symlink between destinationPath and sourcePath (Linux version). + /// + /// + /// + private static void CreateLinkLunux(string sourcePath, string destinationPath) + { + string cmd = string.Format("-c \"ln -s {0} {1}\"", sourcePath, destinationPath); + Debug.Log("Linux junction: " + cmd); + ProjectCloner.StartHiddenConsoleProcess("/bin/bash", cmd); + } + + //TODO avoid terminal calls and use proper api stuff. See below for windows! + ////https://docs.microsoft.com/en-us/windows/desktop/api/ioapiset/nf-ioapiset-deviceiocontrol + //[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + //private static extern bool DeviceIoControl(System.IntPtr hDevice, uint dwIoControlCode, + // System.IntPtr InBuffer, int nInBufferSize, + // System.IntPtr OutBuffer, int nOutBufferSize, + // out int pBytesReturned, System.IntPtr lpOverlapped); + + /// + /// Create a link / junction from the real project to it's clone. + /// + /// + /// + public static void LinkFolders(string sourcePath, string destinationPath) + { + if ((Directory.Exists(destinationPath) == false) && (Directory.Exists(sourcePath) == true)) + { + switch (Application.platform) + { + case (RuntimePlatform.WindowsEditor): + CreateLinkWin(sourcePath, destinationPath); + break; + case (RuntimePlatform.OSXEditor): + CreateLinkMac(sourcePath, destinationPath); + break; + case (RuntimePlatform.LinuxEditor): + CreateLinkLunux(sourcePath, destinationPath); + break; + default: + Debug.LogWarning("Not in a known editor. Where are you!?"); + break; + } + } + else + { + Debug.LogWarning("Skipping Asset link, it already exists: " + destinationPath); + } + } + #endregion + + #region Utility methods + /// + /// Returns true is the project currently open in Unity Editor is a clone. + /// + /// + public static bool IsClone() + { + /// The project is a clone if its root directory contains an empty file named ".clone". + string cloneFilePath = Path.Combine(ProjectCloner.GetCurrentProjectPath(), ProjectCloner.CloneFileName); + bool isClone = File.Exists(cloneFilePath); + return isClone; + } + + /// + /// Get the path to the current unityEditor project folder's info + /// + /// + public static string GetCurrentProjectPath() + { + return Application.dataPath.Replace("/Assets", ""); + } + + /// + /// Return a project object that describes all the paths we need to clone it. + /// + /// + public static Project GetCurrentProject() + { + string pathString = ProjectCloner.GetCurrentProjectPath(); + return new Project(pathString); + } + + /// + /// Returns the path to the original project. + /// If currently open project is the original, returns its own path. + /// If the original project folder cannot be found, retuns an empty string. + /// + /// + public static string GetOriginalProjectPath() + { + if (IsClone()) + { + /// If this is a clone... + /// Original project path can be deduced by removing the suffix from the clone's path. + string cloneProjectPath = ProjectCloner.GetCurrentProject().projectPath; + + int index = cloneProjectPath.LastIndexOf(ProjectCloner.CloneNameSuffix); + if (index > 0) + { + string originalProjectPath = cloneProjectPath.Substring(0, index); + if (Directory.Exists(originalProjectPath)) return originalProjectPath; + } + + return string.Empty; + } + else + { + /// If this is the original, we return its own path. + return ProjectCloner.GetCurrentProjectPath(); + } + } + + /// + /// Returns all clone projects path. + /// + /// + public static List GetCloneProjectsPath() + { + List projectsPath = new List(); + for (int i = 0; i < MaxCloneProjectCount; i++) + { + string originalProjectPath = ProjectCloner.GetCurrentProject().projectPath; + string cloneProjectPath = originalProjectPath + ProjectCloner.CloneNameSuffix + "_" + i; + + if (Directory.Exists(cloneProjectPath)) + projectsPath.Add(cloneProjectPath); + } + return projectsPath; + } + + /// + /// Copies directory located at sourcePath to destinationPath. Displays a progress bar. + /// + /// Directory to be copied. + /// Destination directory (created automatically if needed). + /// Optional string added to the beginning of the progress bar window header. + public static void CopyDirectoryWithProgressBar(string sourcePath, string destinationPath, string progressBarPrefix = "") + { + var source = new DirectoryInfo(sourcePath); + var destination = new DirectoryInfo(destinationPath); + + long totalBytes = 0; + long copiedBytes = 0; + + ProjectCloner.CopyDirectoryWithProgressBarRecursive(source, destination, ref totalBytes, ref copiedBytes, progressBarPrefix); + EditorUtility.ClearProgressBar(); + } + + /// + /// Copies directory located at sourcePath to destinationPath. Displays a progress bar. + /// Same as the previous method, but uses recursion to copy all nested folders as well. + /// + /// Directory to be copied. + /// Destination directory (created automatically if needed). + /// Total bytes to be copied. Calculated automatically, initialize at 0. + /// To track already copied bytes. Calculated automatically, initialize at 0. + /// Optional string added to the beginning of the progress bar window header. + private static void CopyDirectoryWithProgressBarRecursive(DirectoryInfo source, DirectoryInfo destination, ref long totalBytes, ref long copiedBytes, string progressBarPrefix = "") + { + /// Directory cannot be copied into itself. + if (source.FullName.ToLower() == destination.FullName.ToLower()) + { + Debug.LogError("Cannot copy directory into itself."); + return; + } + + /// Calculate total bytes, if required. + if (totalBytes == 0) + { + totalBytes = ProjectCloner.GetDirectorySize(source, true, progressBarPrefix); + } + + /// Create destination directory, if required. + if (!Directory.Exists(destination.FullName)) + { + Directory.CreateDirectory(destination.FullName); + } + + /// Copy all files from the source. + foreach (FileInfo file in source.GetFiles()) + { + try + { + file.CopyTo(Path.Combine(destination.ToString(), file.Name), true); + } + catch (IOException) + { + /// Some files may throw IOException if they are currently open in Unity editor. + /// Just ignore them in such case. + } + + /// Account the copied file size. + copiedBytes += file.Length; + + /// Display the progress bar. + float progress = (float)copiedBytes / (float)totalBytes; + bool cancelCopy = EditorUtility.DisplayCancelableProgressBar( + progressBarPrefix + "Copying '" + source.FullName + "' to '" + destination.FullName + "'...", + "(" + (progress * 100f).ToString("F2") + "%) Copying file '" + file.Name + "'...", + progress); + if (cancelCopy) return; + } + + /// Copy all nested directories from the source. + foreach (DirectoryInfo sourceNestedDir in source.GetDirectories()) + { + DirectoryInfo nextDestingationNestedDir = destination.CreateSubdirectory(sourceNestedDir.Name); + ProjectCloner.CopyDirectoryWithProgressBarRecursive(sourceNestedDir, nextDestingationNestedDir, ref totalBytes, ref copiedBytes, progressBarPrefix); + } + } + + /// + /// Calculates the size of the given directory. Displays a progress bar. + /// + /// Directory, which size has to be calculated. + /// If true, size will include all nested directories. + /// Optional string added to the beginning of the progress bar window header. + /// Size of the directory in bytes. + private static long GetDirectorySize(DirectoryInfo directory, bool includeNested = false, string progressBarPrefix = "") + { + EditorUtility.DisplayProgressBar(progressBarPrefix + "Calculating size of directories...", "Scanning '" + directory.FullName + "'...", 0f); + + /// Calculate size of all files in directory. + long filesSize = directory.EnumerateFiles().Sum((FileInfo file) => file.Length); + + /// Calculate size of all nested directories. + long directoriesSize = 0; + if (includeNested) + { + IEnumerable nestedDirectories = directory.EnumerateDirectories(); + foreach (DirectoryInfo nestedDir in nestedDirectories) + { + directoriesSize += ProjectCloner.GetDirectorySize(nestedDir, true, progressBarPrefix); + } + } + + return filesSize + directoriesSize; + } + + /// + /// Starts process in the system console, taking the given fileName and args. + /// + /// + /// + private static void StartHiddenConsoleProcess(string fileName, string args) + { + var process = new System.Diagnostics.Process(); + //process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + process.StartInfo.FileName = fileName; + process.StartInfo.Arguments = args; + + process.Start(); + } + #endregion + } +} diff --git a/Assets/UnityProjectCloner/Editor/ProjectCloner.cs.meta b/Assets/UnityProjectCloner/Editor/ProjectCloner.cs.meta new file mode 100644 index 0000000..5800cf8 --- /dev/null +++ b/Assets/UnityProjectCloner/Editor/ProjectCloner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6148e48ed6b61d748b187d06d3687b83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs b/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs new file mode 100644 index 0000000..120aadd --- /dev/null +++ b/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs @@ -0,0 +1,131 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityProjectCloner; +using System.IO; + +namespace UnityProjectCloner +{ + /// + /// Provides Unity Editor window for ProjectCloner. + /// + public class ProjectClonerWindow : EditorWindow + { + /// + /// True if currently open project is a clone. + /// + public bool isClone + { + get { return ProjectCloner.IsClone(); } + } + + /// + /// Returns true if project clone exists. + /// + public bool isCloneCreated + { + get { return ProjectCloner.GetCloneProjectsPath().Count >= 1; } + } + + [MenuItem("Tools/Project Cloner")] + private static void InitWindow() + { + ProjectClonerWindow window = (ProjectClonerWindow)EditorWindow.GetWindow(typeof(ProjectClonerWindow)); + window.titleContent = new GUIContent("Project Cloner"); + window.Show(); + } + + private void OnGUI() + { + if (isClone) + { + /// If it is a clone project... + string originalProjectPath = ProjectCloner.GetOriginalProjectPath(); + if (originalProjectPath == string.Empty) + { + /// If original project cannot be found, display warning message. + string thisProjectName = ProjectCloner.GetCurrentProject().name; + string supposedOriginalProjectName = ProjectCloner.GetCurrentProject().name.Replace("_clone", ""); + EditorGUILayout.HelpBox( + "This project is a clone, but the link to the original seems lost.\nYou have to manually open the original and create a new clone instead of this one.\nThe original project should have a name '" + supposedOriginalProjectName + "', if it was not changed.", + MessageType.Warning); + } + else + { + /// If original project is present, display some usage info. + EditorGUILayout.HelpBox( + "This project is a clone of the project '" + Path.GetFileName(originalProjectPath) + "'.\nIf you want to make changes the project files or manage clones, please open the original project through Unity Hub.", + MessageType.Info); + } + } + else + { + /// If it is an original project... + if (isCloneCreated) + { + GUILayout.BeginVertical("HelpBox"); + GUILayout.Label("Clones of this Project"); + /// If clone(s) is created, we can either open it or delete it. + var cloneProjectsPath = ProjectCloner.GetCloneProjectsPath(); + for (int i = 0; i < cloneProjectsPath.Count; i++) + { + + GUILayout.BeginVertical("GroupBox"); + string cloneProjectPath = cloneProjectsPath[i]; + EditorGUILayout.LabelField("Clone " + i); + EditorGUILayout.TextField("Clone project path", cloneProjectPath, EditorStyles.textField); + if (GUILayout.Button("Open in New Editor")) + { + ProjectCloner.OpenProject(cloneProjectPath); + } + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Delete")) + { + bool delete = EditorUtility.DisplayDialog( + "Delete the clone?", + "Are you sure you want to delete the clone project '" + ProjectCloner.GetCurrentProject().name + "_clone'? If so, you can always create a new clone from ProjectCloner window.", + "Delete", + "Cancel"); + if (delete) + { + ProjectCloner.DeleteClone(cloneProjectPath); + } + } + + //Offer a solution to user in-case they are stuck with deleting project + if (GUILayout.Button("?", GUILayout.Width(30))) + { + var openUrl = EditorUtility.DisplayDialog("Can't delete clone?", + "Sometime clone can't be deleted due to it's still being opened by another unity instance running in the background." + + "\nYou can read this answer from ServerFault on how to find and kill the process.", "Open Answer"); + if (openUrl) + { + Application.OpenURL("https://serverfault.com/a/537762"); + } + } + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + + } + GUILayout.EndVertical(); + //Have difficulty with naming + //GUILayout.Label("Other", EditorStyles.boldLabel); + if (GUILayout.Button("Add new clone")) + { + ProjectCloner.CreateCloneFromCurrent(); + } + } + else + { + /// If no clone created yet, we must create it. + EditorGUILayout.HelpBox("No project clones found. Create a new one!", MessageType.Info); + if (GUILayout.Button("Create new clone")) + { + ProjectCloner.CreateCloneFromCurrent(); + } + } + } + } + } +} diff --git a/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs.meta b/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs.meta new file mode 100644 index 0000000..ac75a04 --- /dev/null +++ b/Assets/UnityProjectCloner/Editor/ProjectClonerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a041d83486c20b84bbf5077ddfbbca37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UnityProjectCloner/Project.cs b/Assets/UnityProjectCloner/Project.cs new file mode 100644 index 0000000..aa7d108 --- /dev/null +++ b/Assets/UnityProjectCloner/Project.cs @@ -0,0 +1,110 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using UnityProjectCloner; + +namespace UnityProjectCloner +{ + public class Project : System.ICloneable + { + public string name; + public string projectPath; + string rootPath; + public string assetPath; + public string projectSettingsPath; + public string libraryPath; + public string packagesPath; + public string autoBuildPath; + char[] separator = new char[1] { '/' }; + + + /// + /// Default constructor + /// + public Project() + { + + } + + + /// + /// Initialize the project object by parsing its full path returned by Unity into a bunch of individual folder names and paths. + /// + /// + public Project(string path) + { + ParsePath(path); + } + + + /// + /// Create a new object with the same settings + /// + /// + public object Clone() + { + Project newProject = new Project(); + newProject.rootPath = rootPath; + newProject.projectPath = projectPath; + newProject.assetPath = assetPath; + newProject.projectSettingsPath = projectSettingsPath; + newProject.libraryPath = libraryPath; + newProject.name = name; + newProject.separator = separator; + newProject.packagesPath = packagesPath; + newProject.autoBuildPath = autoBuildPath; + + return newProject; + } + + + /// + /// Update the project object by renaming and reparsing it. Pass in the new name of a project, and it'll update the other member variables to match. + /// + /// + public void updateNewName(string newName) + { + name = newName; + ParsePath(rootPath + "/" + name + "/Assets"); + } + + + /// + /// Debug override so we can quickly print out the project info. + /// + /// + public override string ToString() + { + string printString = name + "\n" + + rootPath + "\n" + + projectPath + "\n" + + assetPath + "\n" + + projectSettingsPath + "\n" + + packagesPath + "\n" + + autoBuildPath + "\n" + + libraryPath; + return (printString); + } + + private void ParsePath(string path) + { + //Unity's Application functions return the Assets path in the Editor. + projectPath = path; + + //pop off the last part of the path for the project name, keep the rest for the root path + List pathArray = projectPath.Split(separator).ToList(); + name = pathArray.Last(); + + pathArray.RemoveAt(pathArray.Count() - 1); + rootPath = string.Join(separator[0].ToString(), pathArray); + + assetPath = projectPath + "/Assets"; + projectSettingsPath = projectPath + "/ProjectSettings"; + libraryPath = projectPath + "/Library"; + packagesPath = projectPath + "/Packages"; + autoBuildPath = projectPath + "/AutoBuild"; + + } + } +} diff --git a/Assets/UnityProjectCloner/Project.cs.meta b/Assets/UnityProjectCloner/Project.cs.meta new file mode 100644 index 0000000..84d9855 --- /dev/null +++ b/Assets/UnityProjectCloner/Project.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec8d3a1577179ef44815739178cf75b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UnityProjectCloner/projectCloner.asmdef b/Assets/UnityProjectCloner/projectCloner.asmdef new file mode 100644 index 0000000..fe0d8bc --- /dev/null +++ b/Assets/UnityProjectCloner/projectCloner.asmdef @@ -0,0 +1,15 @@ +{ + "name": "projectCloner", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/UnityProjectCloner/projectCloner.asmdef.meta b/Assets/UnityProjectCloner/projectCloner.asmdef.meta new file mode 100644 index 0000000..3aa8857 --- /dev/null +++ b/Assets/UnityProjectCloner/projectCloner.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 894a6cc6ed5cd2645bb542978cbed6a9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/p1.renderTexture b/Assets/p1.renderTexture index c33071b..6eb57ce 100644 --- a/Assets/p1.renderTexture +++ b/Assets/p1.renderTexture @@ -10,8 +10,10 @@ RenderTexture: m_ImageContentsHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 m_IsAlphaChannelOptional: 0 - serializedVersion: 6 + serializedVersion: 5 m_Width: 512 m_Height: 1024 m_AntiAliasing: 1 @@ -22,7 +24,6 @@ RenderTexture: m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 - m_UseDynamicScaleExplicit: 0 m_BindMS: 0 m_EnableCompatibleFormat: 1 m_EnableRandomWrite: 0 diff --git a/Assets/p2.renderTexture b/Assets/p2.renderTexture index 3c7f752..7cf593a 100644 --- a/Assets/p2.renderTexture +++ b/Assets/p2.renderTexture @@ -10,8 +10,10 @@ RenderTexture: m_ImageContentsHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 m_IsAlphaChannelOptional: 0 - serializedVersion: 6 + serializedVersion: 5 m_Width: 512 m_Height: 1024 m_AntiAliasing: 1 @@ -22,7 +24,6 @@ RenderTexture: m_GenerateMips: 1 m_SRGB: 0 m_UseDynamicScale: 0 - m_UseDynamicScaleExplicit: 0 m_BindMS: 0 m_EnableCompatibleFormat: 1 m_EnableRandomWrite: 0 diff --git a/Packages/manifest.json b/Packages/manifest.json index fa842a3..4c5316c 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -3,23 +3,21 @@ "com.boxqkrtm.ide.cursor": "https://github.com/boxqkrtm/com.unity.ide.cursor.git", "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", - "com.unity.ai.navigation": "2.0.5", "com.unity.collab-proxy": "2.6.0", "com.unity.feature.2d": "2.0.1", "com.unity.ide.rider": "3.0.31", "com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.vscode": "1.2.5", - "com.unity.multiplayer.center": "1.0.0", "com.unity.nuget.newtonsoft-json": "3.2.1", "com.unity.postprocessing": "3.4.0", "com.unity.progrids": "3.0.3-preview.6", "com.unity.render-pipelines.universal": "17.0.3", "com.unity.test-framework": "1.4.5", + "com.unity.textmeshpro": "3.0.9", "com.unity.timeline": "1.8.7", "com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.10", "com.unity.ugui": "2.0.0", "com.unity.visualscripting": "1.9.5", - "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 2ff51ba..e4ae427 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -10,20 +10,20 @@ "hash": "38fecf55e4fd94ccfe58a92ed8ad1a529ba1694e" }, "com.unity.2d.animation": { - "version": "10.1.4", + "version": "9.0.3", "depth": 1, "source": "registry", "dependencies": { - "com.unity.2d.common": "9.0.7", + "com.unity.2d.common": "8.0.1", "com.unity.2d.sprite": "1.0.0", - "com.unity.collections": "1.2.4", + "com.unity.collections": "1.1.0", "com.unity.modules.animation": "1.0.0", "com.unity.modules.uielements": "1.0.0" }, "url": "https://packages.unity.com" }, "com.unity.2d.aseprite": { - "version": "1.1.7", + "version": "1.0.1", "depth": 1, "source": "registry", "dependencies": { @@ -35,11 +35,11 @@ "url": "https://packages.unity.com" }, "com.unity.2d.common": { - "version": "9.0.7", + "version": "8.0.1", "depth": 2, "source": "registry", "dependencies": { - "com.unity.burst": "1.8.4", + "com.unity.burst": "1.7.3", "com.unity.2d.sprite": "1.0.0", "com.unity.mathematics": "1.1.0", "com.unity.modules.animation": "1.0.0", @@ -55,12 +55,13 @@ "url": "https://packages.unity.com" }, "com.unity.2d.psdimporter": { - "version": "9.0.3", + "version": "8.0.2", "depth": 1, "source": "registry", "dependencies": { - "com.unity.2d.common": "9.0.4", - "com.unity.2d.sprite": "1.0.0" + "com.unity.2d.common": "8.0.1", + "com.unity.2d.sprite": "1.0.0", + "com.unity.2d.animation": "9.0.1" }, "url": "https://packages.unity.com" }, @@ -71,11 +72,11 @@ "dependencies": {} }, "com.unity.2d.spriteshape": { - "version": "10.0.7", + "version": "9.0.2", "depth": 1, "source": "registry", "dependencies": { - "com.unity.2d.common": "9.0.7", + "com.unity.2d.common": "8.0.1", "com.unity.mathematics": "1.1.0", "com.unity.modules.physics2d": "1.0.0" }, @@ -91,32 +92,23 @@ } }, "com.unity.2d.tilemap.extras": { - "version": "4.1.0", + "version": "3.1.1", "depth": 1, "source": "registry", "dependencies": { + "com.unity.ugui": "1.0.0", "com.unity.2d.tilemap": "1.0.0", "com.unity.modules.tilemap": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, "url": "https://packages.unity.com" }, - "com.unity.ai.navigation": { - "version": "2.0.5", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.modules.ai": "1.0.0" - }, - "url": "https://packages.unity.com" - }, "com.unity.burst": { - "version": "1.8.18", - "depth": 2, + "version": "1.8.8", + "depth": 1, "source": "registry", "dependencies": { - "com.unity.mathematics": "1.2.1", - "com.unity.modules.jsonserialize": "1.0.0" + "com.unity.mathematics": "1.2.1" }, "url": "https://packages.unity.com" }, @@ -128,19 +120,17 @@ "url": "https://packages.unity.com" }, "com.unity.collections": { - "version": "2.5.1", + "version": "1.2.4", "depth": 2, "source": "registry", "dependencies": { - "com.unity.burst": "1.8.17", - "com.unity.test-framework": "1.4.5", - "com.unity.nuget.mono-cecil": "1.11.4", - "com.unity.test-framework.performance": "3.0.3" + "com.unity.burst": "1.6.6", + "com.unity.test-framework": "1.1.31" }, "url": "https://packages.unity.com" }, "com.unity.ext.nunit": { - "version": "2.0.5", + "version": "2.0.3", "depth": 1, "source": "registry", "dependencies": {}, @@ -151,14 +141,14 @@ "depth": 0, "source": "builtin", "dependencies": { - "com.unity.2d.animation": "10.1.4", + "com.unity.2d.animation": "9.0.3", "com.unity.2d.pixel-perfect": "5.0.3", - "com.unity.2d.psdimporter": "9.0.3", + "com.unity.2d.psdimporter": "8.0.2", "com.unity.2d.sprite": "1.0.0", - "com.unity.2d.spriteshape": "10.0.7", + "com.unity.2d.spriteshape": "9.0.2", "com.unity.2d.tilemap": "1.0.0", - "com.unity.2d.tilemap.extras": "4.1.0", - "com.unity.2d.aseprite": "1.1.7" + "com.unity.2d.tilemap.extras": "3.1.1", + "com.unity.2d.aseprite": "1.0.1" } }, "com.unity.ide.rider": { @@ -187,23 +177,8 @@ "url": "https://packages.unity.com" }, "com.unity.mathematics": { - "version": "1.3.2", - "depth": 2, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.multiplayer.center": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.uielements": "1.0.0" - } - }, - "com.unity.nuget.mono-cecil": { - "version": "1.11.4", - "depth": 3, + "version": "1.2.6", + "depth": 1, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" @@ -234,18 +209,14 @@ "url": "https://packages.unity.com" }, "com.unity.render-pipelines.core": { - "version": "17.0.3", + "version": "14.0.8", "depth": 1, "source": "builtin", "dependencies": { - "com.unity.burst": "1.8.14", - "com.unity.mathematics": "1.3.2", - "com.unity.ugui": "2.0.0", - "com.unity.collections": "2.4.3", + "com.unity.ugui": "1.0.0", "com.unity.modules.physics": "1.0.0", "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.rendering.light-transport": "1.0.1" + "com.unity.modules.jsonserialize": "1.0.0" } }, "com.unity.render-pipelines.universal": { @@ -253,27 +224,10 @@ "depth": 0, "source": "builtin", "dependencies": { - "com.unity.render-pipelines.core": "17.0.3", - "com.unity.shadergraph": "17.0.3", - "com.unity.render-pipelines.universal-config": "17.0.3" - } - }, - "com.unity.render-pipelines.universal-config": { - "version": "17.0.3", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.render-pipelines.core": "17.0.3" - } - }, - "com.unity.rendering.light-transport": { - "version": "1.0.1", - "depth": 2, - "source": "builtin", - "dependencies": { - "com.unity.collections": "2.2.0", - "com.unity.mathematics": "1.2.4", - "com.unity.modules.terrain": "1.0.0" + "com.unity.mathematics": "1.2.1", + "com.unity.burst": "1.8.4", + "com.unity.render-pipelines.core": "14.0.8", + "com.unity.shadergraph": "14.0.8" } }, "com.unity.searcher": { @@ -291,11 +245,11 @@ "url": "https://packages.unity.com" }, "com.unity.shadergraph": { - "version": "17.0.3", + "version": "14.0.8", "depth": 1, "source": "builtin", "dependencies": { - "com.unity.render-pipelines.core": "17.0.3", + "com.unity.render-pipelines.core": "14.0.8", "com.unity.searcher": "4.9.2" } }, @@ -326,13 +280,12 @@ }, "url": "https://packages.unity.com" }, - "com.unity.test-framework.performance": { - "version": "3.0.3", - "depth": 3, + "com.unity.textmeshpro": { + "version": "3.0.9", + "depth": 0, "source": "registry", "dependencies": { - "com.unity.test-framework": "1.1.31", - "com.unity.modules.jsonserialize": "1.0.0" + "com.unity.ugui": "1.0.0" }, "url": "https://packages.unity.com" }, @@ -377,12 +330,6 @@ }, "url": "https://packages.unity.com" }, - "com.unity.modules.accessibility": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, "com.unity.modules.ai": { "version": "1.0.0", "depth": 0, @@ -430,12 +377,6 @@ "com.unity.modules.animation": "1.0.0" } }, - "com.unity.modules.hierarchycore": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": {} - }, "com.unity.modules.imageconversion": { "version": "1.0.0", "depth": 0, @@ -524,8 +465,7 @@ "dependencies": { "com.unity.modules.ui": "1.0.0", "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.hierarchycore": "1.0.0" + "com.unity.modules.jsonserialize": "1.0.0" } }, "com.unity.modules.umbra": { diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 0a93707..e58df0c 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -3,7 +3,7 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 16 + serializedVersion: 15 m_Deferred: m_Mode: 1 m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} @@ -109,12 +109,13 @@ GraphicsSettings: m_FogKeepExp: 1 m_FogKeepExp2: 1 m_AlbedoSwatchInfos: [] - m_RenderPipelineGlobalSettingsMap: - UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: f94cfddc49625e5419ff61733ea02d4d, - type: 2} m_LightsUseLinearIntensity: 1 m_LightsUseColorTemperature: 1 + m_DefaultRenderingLayerMask: 1 m_LogWhenShaderIsCompiled: 0 + m_SRPDefaultSettings: + UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: f94cfddc49625e5419ff61733ea02d4d, + type: 2} m_LightProbeOutsideHullStrategy: 0 m_CameraRelativeLightCulling: 0 m_CameraRelativeShadowCulling: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index d1c9097..88bb9cf 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 6000.0.32f1 -m_EditorVersionWithRevision: 6000.0.32f1 (b2e806cf271c) +m_EditorVersion: 2022.3.10f1 +m_EditorVersionWithRevision: 2022.3.10f1 (ff3792e53c62) diff --git a/ProjectSettings/ShaderGraphSettings.asset b/ProjectSettings/ShaderGraphSettings.asset index 0beb39a..9b28428 100644 --- a/ProjectSettings/ShaderGraphSettings.asset +++ b/ProjectSettings/ShaderGraphSettings.asset @@ -12,7 +12,5 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3} m_Name: m_EditorClassIdentifier: - shaderVariantLimit: 2048 customInterpolatorErrorThreshold: 32 customInterpolatorWarningThreshold: 16 - customHeatmapValues: {fileID: 0} diff --git a/ProjectSettings/URPProjectSettings.asset b/ProjectSettings/URPProjectSettings.asset index 08faf03..cd7fd8c 100644 --- a/ProjectSettings/URPProjectSettings.asset +++ b/ProjectSettings/URPProjectSettings.asset @@ -12,4 +12,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3} m_Name: m_EditorClassIdentifier: - m_LastMaterialVersion: 9 + m_LastMaterialVersion: 7