├── .gitignore ├── Assets ├── Art.meta ├── Art │ ├── apple.png │ ├── apple.png.meta │ ├── ic_knife.png │ ├── ic_knife.png.meta │ ├── knife.png │ ├── knife.png.meta │ ├── log.png │ └── log.png.meta ├── ExternalDependencyManager │ └── Editor │ │ ├── CHANGELOG.md │ │ ├── Google.IOSResolver_v1.2.162.dll │ │ ├── Google.IOSResolver_v1.2.162.dll.mdb │ │ ├── Google.JarResolver_v1.2.162.dll │ │ ├── Google.JarResolver_v1.2.162.dll.mdb │ │ ├── Google.PackageManagerResolver_v1.2.162.dll │ │ ├── Google.PackageManagerResolver_v1.2.162.dll.mdb │ │ ├── Google.VersionHandler.dll │ │ ├── Google.VersionHandler.dll.mdb │ │ ├── Google.VersionHandlerImpl_v1.2.162.dll │ │ ├── Google.VersionHandlerImpl_v1.2.162.dll.mdb │ │ ├── LICENSE │ │ ├── README.md │ │ └── external-dependency-manager_version-1.2.162_manifest.txt ├── Plugins.meta ├── Plugins │ └── Android │ │ ├── AndroidManifest.xml │ │ └── launcherTemplate.gradle ├── Prefabs.meta ├── Prefabs │ ├── IconKnife.prefab │ ├── IconKnife.prefab.meta │ ├── Knife.prefab │ └── Knife.prefab.meta ├── Pushe │ ├── Editor │ │ └── PusheDependencies.xml │ ├── PusheUnity.cs │ ├── SampleCode.cs │ ├── Templates │ │ ├── AndroidManifest.xml │ │ ├── U_2017 │ │ │ └── mainTemplate.gradle │ │ ├── U_2018_4 │ │ │ └── mainTemplate.gradle │ │ └── U_2019_4 │ │ │ └── launcherTemplate.gradle │ ├── android │ │ ├── IPusheInAppMessagingListener.cs │ │ ├── IPusheNotificationListener.cs │ │ ├── PusheAnalytics.cs │ │ ├── PusheAndroidUtils.cs │ │ ├── PusheCore.cs │ │ ├── PusheInAppMessaging.cs │ │ ├── PusheNotification.cs │ │ └── PusheUtils.cs │ └── ios │ │ ├── PusheiOSUnityInterface.cs │ │ └── PusheiOSUnityInterface.mm ├── Scripts.meta ├── Scripts │ ├── GameController.cs │ ├── GameController.cs.meta │ ├── GameUi.cs │ ├── GameUi.cs.meta │ ├── KnifeScripts.cs │ ├── KnifeScripts.cs.meta │ ├── LogRotation.cs │ └── LogRotation.cs.meta ├── WoodenParticleMaterial.mat ├── WoodenParticleMaterial.mat.meta ├── knife_hit.unity └── knife_hit.unity.meta ├── ProjectSettings ├── AndroidResolverDependencies.xml ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── GvhProjectSettings.xml ├── InputManager.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset └── XRSettings.asset ├── README.md └── apple_test.png /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | Library 3 | obj 4 | Temp 5 | Logs 6 | Packages 7 | UnityPackageManager 8 | *.csproj 9 | *.sln 10 | *.apk 11 | *.exe 12 | *.meta 13 | Assets/Plugins/Android/*.jar 14 | Assets/Plugins/Android/*.aar 15 | -------------------------------------------------------------------------------- /Assets/Art.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c5e1855fe81789940bd5fafa0f108c07 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Art/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/Art/apple.png -------------------------------------------------------------------------------- /Assets/Art/apple.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6fcd0ee7c1f04cc43b6655f345ab21e8 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 0 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 1 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 512 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 1 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 512 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 1 86 | - serializedVersion: 3 87 | buildTarget: Android 88 | maxTextureSize: 512 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 1 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | bones: [] 104 | spriteID: 5e97eb03825dee720800000000000000 105 | internalID: 0 106 | vertices: [] 107 | indices: 108 | edges: [] 109 | weights: [] 110 | secondaryTextures: [] 111 | spritePackingTag: 112 | pSDRemoveMatte: 0 113 | pSDShowRemoveMatteOption: 0 114 | userData: 115 | assetBundleName: 116 | assetBundleVariant: 117 | -------------------------------------------------------------------------------- /Assets/Art/ic_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/Art/ic_knife.png -------------------------------------------------------------------------------- /Assets/Art/ic_knife.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 295e86c57732e2e4198489c8824355b4 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 300 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 1 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 1 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 2048 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 1 86 | - serializedVersion: 3 87 | buildTarget: Android 88 | maxTextureSize: 2048 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 1 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | bones: [] 104 | spriteID: 5e97eb03825dee720800000000000000 105 | internalID: 0 106 | vertices: [] 107 | indices: 108 | edges: [] 109 | weights: [] 110 | secondaryTextures: [] 111 | spritePackingTag: 112 | pSDRemoveMatte: 0 113 | pSDShowRemoveMatteOption: 0 114 | userData: 115 | assetBundleName: 116 | assetBundleVariant: 117 | -------------------------------------------------------------------------------- /Assets/Art/knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/Art/knife.png -------------------------------------------------------------------------------- /Assets/Art/knife.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af751c16edb9ad5428498135f342ddc5 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 300 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 1 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 1 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 2048 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 1 86 | - serializedVersion: 3 87 | buildTarget: Android 88 | maxTextureSize: 2048 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 1 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | bones: [] 104 | spriteID: 5e97eb03825dee720800000000000000 105 | internalID: 0 106 | vertices: [] 107 | indices: 108 | edges: [] 109 | weights: [] 110 | secondaryTextures: [] 111 | spritePackingTag: 112 | pSDRemoveMatte: 0 113 | pSDShowRemoveMatteOption: 0 114 | userData: 115 | assetBundleName: 116 | assetBundleVariant: 117 | -------------------------------------------------------------------------------- /Assets/Art/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/Art/log.png -------------------------------------------------------------------------------- /Assets/Art/log.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3e1b3ee19a0cb284d9a89286eac98b1b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 300 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 1 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 1 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 2048 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 1 86 | - serializedVersion: 3 87 | buildTarget: Android 88 | maxTextureSize: 2048 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 1 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | bones: [] 104 | spriteID: 5e97eb03825dee720800000000000000 105 | internalID: 0 106 | vertices: [] 107 | indices: 108 | edges: [] 109 | weights: [] 110 | secondaryTextures: [] 111 | spritePackingTag: 112 | pSDRemoveMatte: 0 113 | pSDShowRemoveMatteOption: 0 114 | userData: 115 | assetBundleName: 116 | assetBundleVariant: 117 | -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 Google Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | Apache License 16 | Version 2.0, January 2004 17 | http://www.apache.org/licenses/ 18 | 19 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 20 | 21 | 1. Definitions. 22 | 23 | "License" shall mean the terms and conditions for use, reproduction, 24 | and distribution as defined by Sections 1 through 9 of this document. 25 | 26 | "Licensor" shall mean the copyright owner or entity authorized by 27 | the copyright owner that is granting the License. 28 | 29 | "Legal Entity" shall mean the union of the acting entity and all 30 | other entities that control, are controlled by, or are under common 31 | control with that entity. For the purposes of this definition, 32 | "control" means (i) the power, direct or indirect, to cause the 33 | direction or management of such entity, whether by contract or 34 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 35 | outstanding shares, or (iii) beneficial ownership of such entity. 36 | 37 | "You" (or "Your") shall mean an individual or Legal Entity 38 | exercising permissions granted by this License. 39 | 40 | "Source" form shall mean the preferred form for making modifications, 41 | including but not limited to software source code, documentation 42 | source, and configuration files. 43 | 44 | "Object" form shall mean any form resulting from mechanical 45 | transformation or translation of a Source form, including but 46 | not limited to compiled object code, generated documentation, 47 | and conversions to other media types. 48 | 49 | "Work" shall mean the work of authorship, whether in Source or 50 | Object form, made available under the License, as indicated by a 51 | copyright notice that is included in or attached to the work 52 | (an example is provided in the Appendix below). 53 | 54 | "Derivative Works" shall mean any work, whether in Source or Object 55 | form, that is based on (or derived from) the Work and for which the 56 | editorial revisions, annotations, elaborations, or other modifications 57 | represent, as a whole, an original work of authorship. For the purposes 58 | of this License, Derivative Works shall not include works that remain 59 | separable from, or merely link (or bind by name) to the interfaces of, 60 | the Work and Derivative Works thereof. 61 | 62 | "Contribution" shall mean any work of authorship, including 63 | the original version of the Work and any modifications or additions 64 | to that Work or Derivative Works thereof, that is intentionally 65 | submitted to Licensor for inclusion in the Work by the copyright owner 66 | or by an individual or Legal Entity authorized to submit on behalf of 67 | the copyright owner. For the purposes of this definition, "submitted" 68 | means any form of electronic, verbal, or written communication sent 69 | to the Licensor or its representatives, including but not limited to 70 | communication on electronic mailing lists, source code control systems, 71 | and issue tracking systems that are managed by, or on behalf of, the 72 | Licensor for the purpose of discussing and improving the Work, but 73 | excluding communication that is conspicuously marked or otherwise 74 | designated in writing by the copyright owner as "Not a Contribution." 75 | 76 | "Contributor" shall mean Licensor and any individual or Legal Entity 77 | on behalf of whom a Contribution has been received by Licensor and 78 | subsequently incorporated within the Work. 79 | 80 | 2. Grant of Copyright License. Subject to the terms and conditions of 81 | this License, each Contributor hereby grants to You a perpetual, 82 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 83 | copyright license to reproduce, prepare Derivative Works of, 84 | publicly display, publicly perform, sublicense, and distribute the 85 | Work and such Derivative Works in Source or Object form. 86 | 87 | 3. Grant of Patent License. Subject to the terms and conditions of 88 | this License, each Contributor hereby grants to You a perpetual, 89 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 90 | (except as stated in this section) patent license to make, have made, 91 | use, offer to sell, sell, import, and otherwise transfer the Work, 92 | where such license applies only to those patent claims licensable 93 | by such Contributor that are necessarily infringed by their 94 | Contribution(s) alone or by combination of their Contribution(s) 95 | with the Work to which such Contribution(s) was submitted. If You 96 | institute patent litigation against any entity (including a 97 | cross-claim or counterclaim in a lawsuit) alleging that the Work 98 | or a Contribution incorporated within the Work constitutes direct 99 | or contributory patent infringement, then any patent licenses 100 | granted to You under this License for that Work shall terminate 101 | as of the date such litigation is filed. 102 | 103 | 4. Redistribution. You may reproduce and distribute copies of the 104 | Work or Derivative Works thereof in any medium, with or without 105 | modifications, and in Source or Object form, provided that You 106 | meet the following conditions: 107 | 108 | (a) You must give any other recipients of the Work or 109 | Derivative Works a copy of this License; and 110 | 111 | (b) You must cause any modified files to carry prominent notices 112 | stating that You changed the files; and 113 | 114 | (c) You must retain, in the Source form of any Derivative Works 115 | that You distribute, all copyright, patent, trademark, and 116 | attribution notices from the Source form of the Work, 117 | excluding those notices that do not pertain to any part of 118 | the Derivative Works; and 119 | 120 | (d) If the Work includes a "NOTICE" text file as part of its 121 | distribution, then any Derivative Works that You distribute must 122 | include a readable copy of the attribution notices contained 123 | within such NOTICE file, excluding those notices that do not 124 | pertain to any part of the Derivative Works, in at least one 125 | of the following places: within a NOTICE text file distributed 126 | as part of the Derivative Works; within the Source form or 127 | documentation, if provided along with the Derivative Works; or, 128 | within a display generated by the Derivative Works, if and 129 | wherever such third-party notices normally appear. The contents 130 | of the NOTICE file are for informational purposes only and 131 | do not modify the License. You may add Your own attribution 132 | notices within Derivative Works that You distribute, alongside 133 | or as an addendum to the NOTICE text from the Work, provided 134 | that such additional attribution notices cannot be construed 135 | as modifying the License. 136 | 137 | You may add Your own copyright statement to Your modifications and 138 | may provide additional or different license terms and conditions 139 | for use, reproduction, or distribution of Your modifications, or 140 | for any such Derivative Works as a whole, provided Your use, 141 | reproduction, and distribution of the Work otherwise complies with 142 | the conditions stated in this License. 143 | 144 | 5. Submission of Contributions. Unless You explicitly state otherwise, 145 | any Contribution intentionally submitted for inclusion in the Work 146 | by You to the Licensor shall be under the terms and conditions of 147 | this License, without any additional terms or conditions. 148 | Notwithstanding the above, nothing herein shall supersede or modify 149 | the terms of any separate license agreement you may have executed 150 | with Licensor regarding such Contributions. 151 | 152 | 6. Trademarks. This License does not grant permission to use the trade 153 | names, trademarks, service marks, or product names of the Licensor, 154 | except as required for reasonable and customary use in describing the 155 | origin of the Work and reproducing the content of the NOTICE file. 156 | 157 | 7. Disclaimer of Warranty. Unless required by applicable law or 158 | agreed to in writing, Licensor provides the Work (and each 159 | Contributor provides its Contributions) on an "AS IS" BASIS, 160 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 161 | implied, including, without limitation, any warranties or conditions 162 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 163 | PARTICULAR PURPOSE. You are solely responsible for determining the 164 | appropriateness of using or redistributing the Work and assume any 165 | risks associated with Your exercise of permissions under this License. 166 | 167 | 8. Limitation of Liability. In no event and under no legal theory, 168 | whether in tort (including negligence), contract, or otherwise, 169 | unless required by applicable law (such as deliberate and grossly 170 | negligent acts) or agreed to in writing, shall any Contributor be 171 | liable to You for damages, including any direct, indirect, special, 172 | incidental, or consequential damages of any character arising as a 173 | result of this License or out of the use or inability to use the 174 | Work (including but not limited to damages for loss of goodwill, 175 | work stoppage, computer failure or malfunction, or any and all 176 | other commercial damages or losses), even if such Contributor 177 | has been advised of the possibility of such damages. 178 | 179 | 9. Accepting Warranty or Additional Liability. While redistributing 180 | the Work or Derivative Works thereof, You may choose to offer, 181 | and charge a fee for, acceptance of support, warranty, indemnity, 182 | or other liability obligations and/or rights consistent with this 183 | License. However, in accepting such obligations, You may act only 184 | on Your own behalf and on Your sole responsibility, not on behalf 185 | of any other Contributor, and only if You agree to indemnify, 186 | defend, and hold each Contributor harmless for any liability 187 | incurred by, or claims asserted against, such Contributor by reason 188 | of your accepting any such warranty or additional liability. 189 | 190 | END OF TERMS AND CONDITIONS 191 | 192 | APPENDIX: How to apply the Apache License to your work. 193 | 194 | To apply the Apache License to your work, attach the following 195 | boilerplate notice, with the fields enclosed by brackets "[]" 196 | replaced with your own identifying information. (Don't include 197 | the brackets!) The text should be enclosed in the appropriate 198 | comment syntax for the file format. We also recommend that a 199 | file or class name and description of purpose be included on the 200 | same "printed page" as the copyright notice for easier 201 | identification within third-party archives. 202 | 203 | Copyright [yyyy] [name of copyright owner] 204 | 205 | Licensed under the Apache License, Version 2.0 (the "License"); 206 | you may not use this file except in compliance with the License. 207 | You may obtain a copy of the License at 208 | 209 | http://www.apache.org/licenses/LICENSE-2.0 210 | 211 | Unless required by applicable law or agreed to in writing, software 212 | distributed under the License is distributed on an "AS IS" BASIS, 213 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 214 | See the License for the specific language governing permissions and 215 | limitations under the License. 216 | 217 | ==================================================================================================== 218 | This package uses MiniJSON 219 | 220 | Copyright (c) 2013 Calvin Rien 221 | 222 | Based on the JSON parser by Patrick van Bergen 223 | http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html 224 | 225 | Simplified it so that it doesn't throw exceptions 226 | and can be used in Unity iPhone with maximum code stripping. 227 | 228 | Permission is hereby granted, free of charge, to any person obtaining 229 | a copy of this software and associated documentation files (the 230 | "Software"), to deal in the Software without restriction, including 231 | without limitation the rights to use, copy, modify, merge, publish, 232 | distribute, sublicense, and/or sell copies of the Software, and to 233 | permit persons to whom the Software is furnished to do so, subject to 234 | the following conditions: 235 | 236 | The above copyright notice and this permission notice shall be 237 | included in all copies or substantial portions of the Software. 238 | 239 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 240 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 241 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 242 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 243 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 244 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 245 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 246 | -------------------------------------------------------------------------------- /Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.162_manifest.txt: -------------------------------------------------------------------------------- 1 | Assets/ExternalDependencyManager/Editor/CHANGELOG.md 2 | Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll 3 | Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.162.dll.mdb 4 | Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll 5 | Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.162.dll.mdb 6 | Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll 7 | Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.162.dll.mdb 8 | Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll 9 | Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb 10 | Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll 11 | Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.162.dll.mdb 12 | Assets/ExternalDependencyManager/Editor/LICENSE 13 | Assets/ExternalDependencyManager/Editor/README.md 14 | -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 761fd7bd88b0fee47a6a17fe65bbcd7b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/Android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Assets/Plugins/Android/launcherTemplate.gradle: -------------------------------------------------------------------------------- 1 | // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN 2 | 3 | apply plugin: 'com.android.application' 4 | 5 | dependencies { 6 | implementation project(':unityLibrary') 7 | } 8 | 9 | android { 10 | compileSdkVersion **APIVERSION** 11 | buildToolsVersion '**BUILDTOOLS**' 12 | 13 | compileOptions { 14 | sourceCompatibility JavaVersion.VERSION_1_8 15 | targetCompatibility JavaVersion.VERSION_1_8 16 | } 17 | 18 | defaultConfig { 19 | minSdkVersion **MINSDKVERSION** 20 | targetSdkVersion **TARGETSDKVERSION** 21 | applicationId '**APPLICATIONID**' 22 | ndk { 23 | abiFilters **ABIFILTERS** 24 | } 25 | versionCode **VERSIONCODE** 26 | versionName '**VERSIONNAME**' 27 | multiDexEnabled = true 28 | } 29 | 30 | aaptOptions { 31 | noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**] 32 | ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~" 33 | }**SIGN** 34 | 35 | lintOptions { 36 | abortOnError false 37 | } 38 | 39 | buildTypes { 40 | debug { 41 | minifyEnabled **MINIFY_DEBUG** 42 | useProguard **PROGUARD_DEBUG** 43 | proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** 44 | jniDebuggable true 45 | } 46 | release { 47 | minifyEnabled **MINIFY_RELEASE** 48 | useProguard **PROGUARD_RELEASE** 49 | proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** 50 | } 51 | }**PACKAGING_OPTIONS****SPLITS** 52 | **BUILT_APK_LOCATION** 53 | bundle { 54 | language { 55 | enableSplit = false 56 | } 57 | density { 58 | enableSplit = false 59 | } 60 | abi { 61 | enableSplit = true 62 | } 63 | } 64 | }**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP** 65 | -------------------------------------------------------------------------------- /Assets/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23e5ed832996b9c439e9463e79857a8a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Prefabs/IconKnife.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1424785169228978} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1424785169228978 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 5 20 | m_Component: 21 | - component: {fileID: 224631224677684512} 22 | - component: {fileID: 222238043120452588} 23 | - component: {fileID: 114191451532013754} 24 | m_Layer: 0 25 | m_Name: IconKnife 26 | m_TagString: Untagged 27 | m_Icon: {fileID: 0} 28 | m_NavMeshLayer: 0 29 | m_StaticEditorFlags: 0 30 | m_IsActive: 1 31 | --- !u!114 &114191451532013754 32 | MonoBehaviour: 33 | m_ObjectHideFlags: 1 34 | m_PrefabParentObject: {fileID: 0} 35 | m_PrefabInternal: {fileID: 100100000} 36 | m_GameObject: {fileID: 1424785169228978} 37 | m_Enabled: 1 38 | m_EditorHideFlags: 0 39 | m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} 40 | m_Name: 41 | m_EditorClassIdentifier: 42 | m_Material: {fileID: 0} 43 | m_Color: {r: 1, g: 1, b: 1, a: 1} 44 | m_RaycastTarget: 1 45 | m_OnCullStateChanged: 46 | m_PersistentCalls: 47 | m_Calls: [] 48 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 49 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 50 | m_Sprite: {fileID: 21300000, guid: 295e86c57732e2e4198489c8824355b4, type: 3} 51 | m_Type: 0 52 | m_PreserveAspect: 1 53 | m_FillCenter: 1 54 | m_FillMethod: 4 55 | m_FillAmount: 1 56 | m_FillClockwise: 1 57 | m_FillOrigin: 0 58 | --- !u!222 &222238043120452588 59 | CanvasRenderer: 60 | m_ObjectHideFlags: 1 61 | m_PrefabParentObject: {fileID: 0} 62 | m_PrefabInternal: {fileID: 100100000} 63 | m_GameObject: {fileID: 1424785169228978} 64 | --- !u!224 &224631224677684512 65 | RectTransform: 66 | m_ObjectHideFlags: 1 67 | m_PrefabParentObject: {fileID: 0} 68 | m_PrefabInternal: {fileID: 100100000} 69 | m_GameObject: {fileID: 1424785169228978} 70 | m_LocalRotation: {x: 0, y: 0, z: 0.38268343, w: 0.92387956} 71 | m_LocalPosition: {x: 0, y: 0, z: 0} 72 | m_LocalScale: {x: 1, y: 1, z: 1} 73 | m_Children: [] 74 | m_Father: {fileID: 0} 75 | m_RootOrder: 0 76 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} 77 | m_AnchorMin: {x: 0, y: 0} 78 | m_AnchorMax: {x: 0, y: 0} 79 | m_AnchoredPosition: {x: 0, y: 0} 80 | m_SizeDelta: {x: 100, y: 100} 81 | m_Pivot: {x: 0.5, y: 0.5} 82 | -------------------------------------------------------------------------------- /Assets/Prefabs/IconKnife.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 520e831dd61809f4fa315b4238681697 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 100100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Prefabs/Knife.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: abf01071418859d42aff268402fe9d3a 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 100100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Pushe/Editor/PusheDependencies.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | https://jcenter.bintray.com 5 | https://dl.bintray.com/pushe/preview 6 | https://developer.huawei.com/repo 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | -------------------------------------------------------------------------------- /Assets/Pushe/PusheUnity.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Pushe.android; 3 | using UnityEngine; 4 | 5 | namespace Pushe 6 | { 7 | public static class PusheUnity 8 | { 9 | ////// 10 | 11 | public static void Initialize() { 12 | #if UNITY_ANDROID && !UNITY_EDITOR 13 | PusheCore.Initialize(); 14 | #elif UNITY_IOS && !UNITY_EDITOR 15 | PusheiOSUnityInterface.Initialize(); 16 | #endif 17 | } 18 | 19 | public static bool IsInitialized() { 20 | #if UNITY_ANDROID && !UNITY_EDITOR 21 | return PusheCore.IsInitialized(); // Not registration 22 | #elif UNITY_IOS && !UNITY_EDITOR 23 | return true; 24 | #endif 25 | return false; 26 | } 27 | 28 | public static bool IsRegistered() { 29 | #if UNITY_ANDROID && !UNITY_EDITOR 30 | return PusheCore.IsRegistered(); 31 | #elif UNITY_IOS && !UNITY_EDITOR 32 | return PusheiOSUnityInterface.IsRegistered(); 33 | #endif 34 | return false; 35 | } 36 | 37 | public static void OnPusheInitialized(PusheDelegate onInitialized) { 38 | #if UNITY_ANDROID && !UNITY_EDITOR 39 | PusheCore.OnPusheInitialized(onInitialized); 40 | #elif UNITY_IOS && !UNITY_EDITOR 41 | // not implemented 42 | #endif 43 | } 44 | 45 | public static void OnPusheRegistered(PusheDelegate onRegistered) { 46 | #if UNITY_ANDROID && !UNITY_EDITOR 47 | PusheCore.OnPusheRegistered(onRegistered); 48 | #elif UNITY_IOS && !UNITY_EDITOR 49 | // not implemented 50 | #endif 51 | } 52 | 53 | public static string GetDeviceId() { 54 | #if UNITY_ANDROID && !UNITY_EDITOR 55 | return PusheCore.GetDeviceId(); 56 | #elif UNITY_IOS && !UNITY_EDITOR 57 | return PusheiOSUnityInterface.GetDeviceId(); 58 | #endif 59 | return null; 60 | } 61 | 62 | public static string GetGoogleAdvertisingId() { 63 | #if UNITY_ANDROID && !UNITY_EDITOR 64 | return PusheCore.GetGoogleAdvertisingId(); 65 | #elif UNITY_IOS && !UNITY_EDITOR 66 | return PusheiOSUnityInterface.GetAdvertisingId(); 67 | #endif 68 | return null; 69 | } 70 | public static string GetAdvertisingId() { 71 | #if UNITY_ANDROID && !UNITY_EDITOR 72 | return PusheCore.GetAdvertisingId(); 73 | #elif UNITY_IOS && !UNITY_EDITOR 74 | return PusheiOSUnityInterface.GetAdvertisingId(); 75 | #endif 76 | return null; 77 | } 78 | 79 | public static void SetCustomId(string customId) { 80 | #if UNITY_ANDROID && !UNITY_EDITOR 81 | PusheCore.SetCustomId(customId); 82 | #elif UNITY_IOS && !UNITY_EDITOR 83 | PusheiOSUnityInterface.SetCustomId(customId); 84 | #endif 85 | } 86 | 87 | public static string GetCustomId() { 88 | #if UNITY_ANDROID && !UNITY_EDITOR 89 | return PusheCore.GetCustomId(); 90 | #elif UNITY_IOS && !UNITY_EDITOR 91 | return PusheiOSUnityInterface.GetCustomId(); 92 | #endif 93 | return null; 94 | } 95 | 96 | public static bool SetUserEmail(string email) { 97 | #if UNITY_ANDROID && !UNITY_EDITOR 98 | return PusheCore.SetUserEmail(email); 99 | #elif UNITY_IOS && !UNITY_EDITOR 100 | return PusheiOSUnityInterface.SetUserEmail(email); 101 | #endif 102 | return false; 103 | } 104 | 105 | public static string GetUserEmail() { 106 | #if UNITY_ANDROID && !UNITY_EDITOR 107 | return PusheCore.GetUserEmail(); 108 | #elif UNITY_IOS && !UNITY_EDITOR 109 | return PusheiOSUnityInterface.GetUserEmail(); 110 | #endif 111 | return null; 112 | } 113 | 114 | public static bool SetUserPhoneNumber(string number) { 115 | #if UNITY_ANDROID && !UNITY_EDITOR 116 | return PusheCore.SetUserPhoneNumber(number); 117 | #elif UNITY_IOS && !UNITY_EDITOR 118 | return PusheiOSUnityInterface.SetUserPhoneNumber(number); 119 | #endif 120 | return false; 121 | } 122 | 123 | public static string GetUserPhoneNumber() { 124 | #if UNITY_ANDROID && !UNITY_EDITOR 125 | return PusheCore.GetUserPhoneNumber(); 126 | #elif UNITY_IOS && !UNITY_EDITOR 127 | return PusheiOSUnityInterface.GetUserPhoneNumber(); 128 | #endif 129 | return null; 130 | } 131 | 132 | public static void AddTags(Dictionary tags) { 133 | #if UNITY_ANDROID && !UNITY_EDITOR 134 | PusheCore.AddTags(tags); 135 | #elif UNITY_IOS && !UNITY_EDITOR 136 | PusheiOSUnityInterface.AddTags(tags); 137 | #endif 138 | } 139 | 140 | public static void RemoveTags(params string[] keys) { 141 | #if UNITY_ANDROID && !UNITY_EDITOR 142 | PusheCore.RemoveTags(keys); 143 | #elif UNITY_IOS && !UNITY_EDITOR 144 | PusheiOSUnityInterface.RemoveTags(keys); 145 | #endif 146 | } 147 | 148 | public static Dictionary GetSubscribedTags() { 149 | #if UNITY_ANDROID && !UNITY_EDITOR 150 | return new Dictionary{ {"tags", PusheCore.GetSubscribedTags()} }; 151 | #elif UNITY_IOS && !UNITY_EDITOR 152 | return PusheiOSUnityInterface.GetSubscribedTags(); 153 | #endif 154 | return null; 155 | } 156 | 157 | public static void Subscribe(string topic) { 158 | #if UNITY_ANDROID && !UNITY_EDITOR 159 | PusheCore.SubscribeTo(topic); 160 | #elif UNITY_IOS && !UNITY_EDITOR 161 | PusheiOSUnityInterface.Subscribe(topic); 162 | #endif 163 | } 164 | 165 | public static void Unsubscribe(string topic) { 166 | #if UNITY_ANDROID && !UNITY_EDITOR 167 | PusheCore.UnsubscribeFrom(topic); 168 | #elif UNITY_IOS && !UNITY_EDITOR 169 | PusheiOSUnityInterface.Unsubscribe(topic); 170 | #endif 171 | } 172 | 173 | public static string[] GetSubscribedTopics() { 174 | #if UNITY_ANDROID && !UNITY_EDITOR 175 | return PusheCore.GetSubscribedTopics(); 176 | #elif UNITY_IOS && !UNITY_EDITOR 177 | return PusheiOSUnityInterface.GetSubscribedTopics(); 178 | #endif 179 | return null; 180 | } 181 | 182 | public static void EnableNotifications() { 183 | #if UNITY_ANDROID && !UNITY_EDITOR 184 | PusheNotification.EnableNotification(); 185 | #elif UNITY_IOS && !UNITY_EDITOR 186 | // not implemented 187 | #endif 188 | } 189 | 190 | public static void DisableNotifications() { 191 | #if UNITY_ANDROID && !UNITY_EDITOR 192 | PusheNotification.DisableNotification(); 193 | #elif UNITY_IOS && !UNITY_EDITOR 194 | // not implemented 195 | #endif 196 | } 197 | 198 | public static bool IsNotificationsEnabled() { 199 | #if UNITY_ANDROID && !UNITY_EDITOR 200 | return PusheNotification.IsNotificationEnabled(); 201 | #elif UNITY_IOS && !UNITY_EDITOR 202 | // not implemented 203 | return true; 204 | #endif 205 | return false; 206 | } 207 | 208 | public static void EnableCustomSound() { 209 | #if UNITY_ANDROID && !UNITY_EDITOR 210 | PusheNotification.EnableCustomSound(); 211 | #elif UNITY_IOS && !UNITY_EDITOR 212 | // not implemented 213 | #endif 214 | } 215 | 216 | public static void DisableCustomSound() { 217 | #if UNITY_ANDROID && !UNITY_EDITOR 218 | PusheNotification.DisableCustomSound(); 219 | #elif UNITY_IOS && !UNITY_EDITOR 220 | // not implemented 221 | #endif 222 | } 223 | 224 | public static bool IsCustomSoundEnabled() { 225 | #if UNITY_ANDROID && !UNITY_EDITOR 226 | return PusheNotification.IsCustomSoundEnabled(); 227 | #elif UNITY_IOS && !UNITY_EDITOR 228 | // not implemented 229 | return true; 230 | #endif 231 | return false; 232 | } 233 | 234 | public static void CreateNotificationChannel( 235 | string channelId, 236 | string channelName, 237 | string description = "", 238 | int importance = 4, 239 | bool enableLight = true, 240 | bool enableVibration = true, 241 | long[] vibrationLengths = null, 242 | bool showBadge = true, 243 | int ledColor = 0) 244 | { 245 | #if UNITY_ANDROID && !UNITY_EDITOR 246 | PusheNotification.CreateNotificationChannel(channelId, channelName, description, importance, enableLight, enableVibration, vibrationLengths, showBadge, ledColor); 247 | #elif UNITY_IOS && !UNITY_EDITOR 248 | // not implemented 249 | #endif 250 | } 251 | 252 | public static void RemoveNotificationChannel(string channelId) { 253 | #if UNITY_ANDROID && !UNITY_EDITOR 254 | PusheNotification.RemoveNotificationChannel(channelId); 255 | #elif UNITY_IOS && !UNITY_EDITOR 256 | // not implemented 257 | #endif 258 | } 259 | 260 | public static void SendNotificationToUser(UserNotification notification) { 261 | #if UNITY_ANDROID && !UNITY_EDITOR 262 | PusheNotification.SendNotificationToUser(notification); 263 | #elif UNITY_IOS && !UNITY_EDITOR 264 | // not implemented 265 | #endif 266 | } 267 | 268 | public static void SetNotificationListener(IPusheNotificationListener listener) { 269 | #if UNITY_ANDROID && !UNITY_EDITOR 270 | PusheNotification.SetNotificationListener(listener); 271 | #elif UNITY_IOS && !UNITY_EDITOR 272 | // not implemented 273 | #endif 274 | } 275 | 276 | public static void SendEvent(string eventName) { 277 | #if UNITY_ANDROID && !UNITY_EDITOR 278 | PusheAnalytics.SendEvent(eventName); 279 | #elif UNITY_IOS && !UNITY_EDITOR 280 | // not implemented 281 | #endif 282 | } 283 | 284 | // SendEvent(Event) 285 | 286 | public static void SendEcommerceData(string name, double price, string category = null, long quantity = -1) { 287 | #if UNITY_ANDROID && !UNITY_EDITOR 288 | PusheAnalytics.SendEcommerceData(name, price, category, quantity); 289 | #elif UNITY_IOS && !UNITY_EDITOR 290 | // not implemented 291 | #endif 292 | } 293 | 294 | public static void TriggerEvent(string eventName) { 295 | #if UNITY_ANDROID && !UNITY_EDITOR 296 | PusheInAppMessaging.TriggerEvent(eventName); 297 | #elif UNITY_IOS && !UNITY_EDITOR 298 | // not implemented 299 | #endif 300 | } 301 | 302 | public static void EnableInAppMessaging() { 303 | #if UNITY_ANDROID && !UNITY_EDITOR 304 | PusheInAppMessaging.EnableInAppMessaging(); 305 | #elif UNITY_IOS && !UNITY_EDITOR 306 | // not implemented 307 | #endif 308 | } 309 | 310 | public static void DisableInAppMessaging() { 311 | #if UNITY_ANDROID && !UNITY_EDITOR 312 | PusheInAppMessaging.DisableInAppMessaging(); 313 | #elif UNITY_IOS && !UNITY_EDITOR 314 | // not implemented 315 | #endif 316 | } 317 | 318 | public static bool IsInAppMessagingEnabled() { 319 | #if UNITY_ANDROID && !UNITY_EDITOR 320 | return PusheInAppMessaging.IsInAppMessagingEnabled(); 321 | #elif UNITY_IOS && !UNITY_EDITOR 322 | // not implemented 323 | return false; 324 | #endif 325 | return false; 326 | } 327 | 328 | public static void SetInAppMessagingListener(IPusheInAppMessagingListener listener) { 329 | #if UNITY_ANDROID && !UNITY_EDITOR 330 | PusheInAppMessaging.SetInAppMessagingListener(listener); 331 | #elif UNITY_IOS && !UNITY_EDITOR 332 | // not implemented 333 | #endif 334 | } 335 | 336 | public static void TestInAppMessaging(string inAppMessage) { 337 | #if UNITY_ANDROID && !UNITY_EDITOR 338 | PusheInAppMessaging.TestInAppMessage(inAppMessage); 339 | #elif UNITY_IOS && !UNITY_EDITOR 340 | // not implemented 341 | #endif 342 | } 343 | 344 | public static void Log(string message) 345 | { 346 | Debug.Log("Pushe [Unity]: " + message); 347 | } 348 | 349 | // Used when registered 350 | public delegate void PusheDelegate(); 351 | } 352 | } -------------------------------------------------------------------------------- /Assets/Pushe/SampleCode.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Pushe; 3 | using Pushe.android; 4 | using UnityEngine; 5 | // ReSharper disable All 6 | 7 | /// In order to test the differnt functionality of Pushe, simply drag this file into your scene. 8 | /// NOTE: For only being able to receive push no script and code is needed. Just setup and add the token in manifest. 9 | public class SampleCode : MonoBehaviour 10 | { 11 | // Use this for initialization 12 | private void Start() 13 | { 14 | PusheUnity.Log("Starting Pushe sample script"); 15 | InitializeSomeMethods(); 16 | } 17 | 18 | private void InitializeSomeMethods() 19 | { 20 | // Listen to Register 21 | PusheUnity.OnPusheRegistered(OnPusheRegisteredSuccessfully); 22 | PusheUnity.OnPusheInitialized(() => 23 | { 24 | PusheUnity.Log("Pushe Modules have initialized successfully."); 25 | }); 26 | // Set notification listener 27 | PusheNotification.SetNotificationListener(new PusheNotifListener()); 28 | 29 | // Check if pushe is already registered 30 | PusheUnity.Log(PusheUnity.IsRegistered() ? "Pushe is registered" : "Pushe is NOT registered!"); 31 | } 32 | 33 | 34 | /** 35 | * Called when Pushe is registered. 36 | */ 37 | private void OnPusheRegisteredSuccessfully() 38 | { 39 | PusheUnity.Log(" --- Pushe has been REGISTERED to server successfully --- "); 40 | var adId = PusheUnity.GetAdvertisingId(); 41 | PusheUnity.Log("Ad id: " + adId); 42 | var deviceId = PusheUnity.GetDeviceId(); 43 | PusheUnity.Log("Device id : " + deviceId); 44 | 45 | // Pushe Notification 46 | 47 | PusheUnity.Log("Notification enabled? " + PusheNotification.IsNotificationEnabled()); 48 | PusheUnity.Log("Custom sound enabled? " + PusheNotification.IsCustomSoundEnabled()); 49 | PusheNotification.CreateNotificationChannel("CustomChannel", "CustomChannel"); 50 | 51 | // Analytics 52 | PusheAnalytics.SendEvent("Some_Event"); 53 | PusheAnalytics.SendEcommerceData("EcommerceData", 12.0); 54 | 55 | PusheUnity.Log("Subscribing to test1"); 56 | PusheUnity.Subscribe("test1"); 57 | 58 | PusheUnity.Log("Set 123123 as custom id"); 59 | PusheUnity.SetCustomId("123123"); 60 | PusheUnity.Log("CustomId is: " + PusheUnity.GetCustomId()); 61 | 62 | var tags = new Dictionary {{"name","Mohammad"}, {"age", "25"}, {"birthday","1435187386"}}; 63 | PusheUnity.AddTags(tags); 64 | 65 | PusheUnity.RemoveTags("name", "age"); 66 | 67 | PusheUnity.Log("Tags: " + PusheUnity.GetSubscribedTags()); 68 | PusheUnity.Log("Topics: " + string.Join(",", PusheUnity.GetSubscribedTopics())); 69 | 70 | PusheInAppMessaging.DisableInAppMessaging(); 71 | PusheUnity.Log("Is in app messaging enabled?" + PusheInAppMessaging.IsInAppMessagingEnabled()); 72 | PusheInAppMessaging.EnableInAppMessaging(); 73 | PusheUnity.Log("Is in app messaging enabled? " + PusheInAppMessaging.IsInAppMessagingEnabled()); 74 | PusheInAppMessaging.TriggerEvent("qqq"); 75 | PusheInAppMessaging.SetInAppMessagingListener(new InAppMessagingListener()); 76 | } 77 | 78 | } 79 | 80 | 81 | /// 82 | /// A sample to show how to use notification callback 83 | /// PLEASE NOTICE that callbacks only work when app is up and running. 84 | /// 85 | public class PusheNotifListener : IPusheNotificationListener 86 | { 87 | public void OnNotification(NotificationData notificationData) 88 | { 89 | PusheUnity.Log("Notification received: " + notificationData); 90 | } 91 | 92 | public void OnCustomContentReceived(string customJson) 93 | { 94 | PusheUnity.Log("Notification custom content received: " + customJson); 95 | } 96 | 97 | public void OnNotificationClick(NotificationData notificationData) 98 | { 99 | PusheUnity.Log("Notification clicked: " + notificationData); 100 | } 101 | 102 | public void OnNotificationDismiss(NotificationData notificationData) 103 | { 104 | PusheUnity.Log("Notification dismissed: " + notificationData); 105 | } 106 | 107 | public void OnButtonClick(NotificationButtonData notificationButtonData, NotificationData notificationData) 108 | { 109 | PusheUnity.Log("Notification button clicked\n Data: " + notificationData + 110 | "\n ButtonData: " + notificationButtonData); 111 | } 112 | } 113 | 114 | public class InAppMessagingListener : IPusheInAppMessagingListener 115 | { 116 | public void OnInAppMessageReceived(InAppMessage inAppMessage) { 117 | PusheUnity.Log("In app message received: " + inAppMessage.title); 118 | } 119 | 120 | public void OnInAppMessageTriggered(InAppMessage inAppMessage) { 121 | PusheUnity.Log("In app message triggered: " + inAppMessage.title); 122 | } 123 | 124 | public void OnInAppMessageClicked(InAppMessage inAppMessage) { 125 | PusheUnity.Log("In app message Clicked: " + inAppMessage.title); 126 | } 127 | 128 | public void OnInAppMessageDismissed(InAppMessage inAppMessage) { 129 | PusheUnity.Log("In app message dismissed: " + inAppMessage.title); 130 | } 131 | 132 | public void OnInAppMessageButtonClicked(InAppMessage inAppMessage, int index) { 133 | PusheUnity.Log("In app message button: " + inAppMessage.title + " index: " + index); 134 | } 135 | } -------------------------------------------------------------------------------- /Assets/Pushe/Templates/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 15 | 16 | 22 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 40 | 43 | 44 | 49 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Assets/Pushe/Templates/U_2017/mainTemplate.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | // Pushe Extended plugin 17 | maven { url 'https://dl.bintray.com/pushe/preview' } 18 | maven { url 'https://developer.huawei.com/repo' } 19 | flatDir { 20 | dirs 'libs' 21 | } 22 | } 23 | } 24 | 25 | apply plugin: 'com.android.application' 26 | 27 | dependencies { 28 | implementation fileTree(dir: 'libs', include: ['*.jar']) 29 | 30 | // Adding Pushe Plus 31 | implementation('co.pushe.plus:base:2.4.1-beta05') 32 | // MultiDex 33 | implementation 'androidx.multidex:multidex:2.0.1' 34 | **DEPS**} 35 | 36 | android { 37 | compileSdkVersion 29 38 | buildToolsVersion '29.0.3' 39 | 40 | defaultConfig { 41 | // Enable MultiDex -- Pushe natively adds multidex support library. Adding this is enough. 42 | multiDexEnabled true 43 | 44 | minSdkVersion **MINSDKVERSION** 45 | targetSdkVersion **TARGETSDKVERSION** 46 | applicationId '**APPLICATIONID**' 47 | ndk { 48 | abiFilters **ABIFILTERS** 49 | } 50 | versionCode **VERSIONCODE** 51 | versionName '**VERSIONNAME**' 52 | 53 | } 54 | 55 | 56 | 57 | lintOptions { 58 | abortOnError false 59 | } 60 | 61 | aaptOptions { 62 | noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS** 63 | } 64 | 65 | **SIGN** 66 | buildTypes { 67 | debug { 68 | minifyEnabled **MINIFY_DEBUG** 69 | useProguard **PROGUARD_DEBUG** 70 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD** 71 | jniDebuggable true 72 | } 73 | release { 74 | minifyEnabled **MINIFY_RELEASE** 75 | useProguard **PROGUARD_RELEASE** 76 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD** 77 | **SIGNCONFIG** 78 | } 79 | } 80 | **PACKAGING_OPTIONS** 81 | 82 | packagingOptions { 83 | exclude 'META-INF/proguard/coroutines.pro' 84 | } 85 | 86 | bundle { 87 | language { 88 | enableSplit = false 89 | } 90 | density { 91 | enableSplit = false 92 | } 93 | abi { 94 | enableSplit = true 95 | } 96 | } 97 | 98 | compileOptions { 99 | sourceCompatibility JavaVersion.VERSION_1_8 100 | targetCompatibility JavaVersion.VERSION_1_8 101 | } 102 | //kotlinOptions { 103 | //jvmTarget = "1.8" 104 | //} 105 | } 106 | 107 | 108 | 109 | 110 | **SOURCE_BUILD_SETUP** -------------------------------------------------------------------------------- /Assets/Pushe/Templates/U_2018_4/mainTemplate.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories {**ARTIFACTORYREPOSITORY** 3 | mavenCentral() 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.4.0' 10 | **BUILD_SCRIPT_DEPS**} 11 | } 12 | 13 | allprojects { 14 | repositories {**ARTIFACTORYREPOSITORY** 15 | mavenCentral() 16 | google() 17 | jcenter() 18 | flatDir { 19 | dirs 'libs' 20 | } 21 | } 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | **APPLY_PLUGINS** 26 | 27 | dependencies { 28 | implementation fileTree(dir: 'libs', include: ['*.jar']) 29 | **DEPS**} 30 | 31 | android { 32 | compileSdkVersion **APIVERSION** 33 | buildToolsVersion '**BUILDTOOLS**' 34 | 35 | compileOptions { 36 | sourceCompatibility JavaVersion.VERSION_1_8 37 | targetCompatibility JavaVersion.VERSION_1_8 38 | } 39 | 40 | defaultConfig { 41 | minSdkVersion **MINSDKVERSION** 42 | targetSdkVersion **TARGETSDKVERSION** 43 | applicationId '**APPLICATIONID**' 44 | ndk { 45 | abiFilters **ABIFILTERS** 46 | } 47 | versionCode **VERSIONCODE** 48 | versionName '**VERSIONNAME**' 49 | multiDexEnabled true 50 | } 51 | 52 | lintOptions { 53 | abortOnError false 54 | } 55 | 56 | aaptOptions { 57 | noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**] 58 | }**SIGN** 59 | 60 | buildTypes { 61 | debug { 62 | minifyEnabled **MINIFY_DEBUG** 63 | useProguard **PROGUARD_DEBUG** 64 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD** 65 | jniDebuggable true 66 | } 67 | release { 68 | minifyEnabled **MINIFY_RELEASE** 69 | useProguard **PROGUARD_RELEASE** 70 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG** 71 | } 72 | }**PACKAGING_OPTIONS****SPLITS** 73 | **BUILT_APK_LOCATION** 74 | bundle { 75 | language { 76 | enableSplit = false 77 | } 78 | density { 79 | enableSplit = false 80 | } 81 | abi { 82 | enableSplit = true 83 | } 84 | } 85 | }**SPLITS_VERSION_CODE****REPOSITORIES****SOURCE_BUILD_SETUP** 86 | -------------------------------------------------------------------------------- /Assets/Pushe/Templates/U_2019_4/launcherTemplate.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | dependencies { 4 | implementation project(':unityLibrary') 5 | } 6 | 7 | android { 8 | compileSdkVersion **APIVERSION** 9 | buildToolsVersion '**BUILDTOOLS**' 10 | 11 | compileOptions { 12 | sourceCompatibility JavaVersion.VERSION_1_8 13 | targetCompatibility JavaVersion.VERSION_1_8 14 | } 15 | 16 | defaultConfig { 17 | minSdkVersion **MINSDKVERSION** 18 | targetSdkVersion **TARGETSDKVERSION** 19 | applicationId '**APPLICATIONID**' 20 | ndk { 21 | abiFilters **ABIFILTERS** 22 | } 23 | versionCode **VERSIONCODE** 24 | versionName '**VERSIONNAME**' 25 | 26 | /** 27 | * THIS LINE IS ADDED BY PUSHE 28 | * If you have another file and don't want to override by this, 29 | * simply copy this line to the other file... 30 | * This line enables multiple DEX files and avoids error about DEX file multiplication 31 | */ 32 | multiDexEnabled true 33 | } 34 | 35 | aaptOptions { 36 | noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**] 37 | ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~" 38 | }**SIGN** 39 | 40 | lintOptions { 41 | abortOnError false 42 | } 43 | 44 | buildTypes { 45 | debug { 46 | minifyEnabled **MINIFY_DEBUG** 47 | useProguard **PROGUARD_DEBUG** 48 | proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** 49 | jniDebuggable true 50 | } 51 | release { 52 | minifyEnabled **MINIFY_RELEASE** 53 | useProguard **PROGUARD_RELEASE** 54 | proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** 55 | } 56 | }**PACKAGING_OPTIONS****SPLITS** 57 | **BUILT_APK_LOCATION** 58 | bundle { 59 | language { 60 | enableSplit = false 61 | } 62 | density { 63 | enableSplit = false 64 | } 65 | abi { 66 | enableSplit = true 67 | } 68 | } 69 | }**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP** 70 | -------------------------------------------------------------------------------- /Assets/Pushe/android/IPusheInAppMessagingListener.cs: -------------------------------------------------------------------------------- 1 | namespace Pushe.android 2 | { 3 | public interface IPusheInAppMessagingListener 4 | { 5 | void OnInAppMessageReceived(InAppMessage inAppMessage); 6 | 7 | void OnInAppMessageTriggered(InAppMessage inAppMessage); 8 | 9 | void OnInAppMessageClicked(InAppMessage inAppMessage); 10 | 11 | void OnInAppMessageDismissed(InAppMessage inAppMessage); 12 | 13 | void OnInAppMessageButtonClicked(InAppMessage inAppMessage, int index); 14 | } 15 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/IPusheNotificationListener.cs: -------------------------------------------------------------------------------- 1 | namespace Pushe.android 2 | { 3 | /// 4 | /// In order to use Pushe notification callback, you must implement an instance of this interface. 5 | /// Once you've done it, pass it to `PusheNotification.SetNotificationListener`. 6 | /// 7 | /// * NOTE: These callback only work when app (Unity engine) is up and running. 8 | /// 9 | public interface IPusheNotificationListener 10 | { 11 | /// 12 | /// Gets invoked when a notification has been received. 13 | /// 14 | /// Will have all data received from notification 15 | void OnNotification(NotificationData notificationData); 16 | 17 | /// 18 | /// If a notification contains custom data, this function will be called holding a data as json. 19 | /// 20 | /// is the json from notification 21 | void OnCustomContentReceived(string json); 22 | 23 | /// 24 | /// If a notification gets clicked while app is open this function will invoked having notification data. 25 | /// 26 | /// Will have the data of that notification 27 | void OnNotificationClick(NotificationData notificationData); 28 | 29 | /// 30 | /// If a notification gets swiped out while app is open, this function will be invoked having notification data. 31 | /// 32 | /// Will have the data of that notification 33 | void OnNotificationDismiss(NotificationData notificationData); 34 | 35 | /// 36 | /// If a button from a notification was clicked, this function will ba called having button data and all notification data 37 | /// 38 | /// Will have data of the clicked button 39 | /// Will contain the notification data 40 | void OnButtonClick(NotificationButtonData notificationButtonData, NotificationData notificationData); 41 | } 42 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheAnalytics.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace Pushe.android 4 | { 5 | public static class PusheAnalytics 6 | { 7 | 8 | 9 | /// 10 | /// Send an event to the server. You can pass push notifications according to happening on some events. 11 | /// 12 | /// A name chosen by you 13 | /// If You don't have and action, leave it be custom. 14 | public static void SendEvent(string eventName) 15 | { 16 | 17 | PusheAndroidUtils.PusheAnalyticsService().Call("sendEvent", eventName); 18 | } 19 | 20 | public static void SendEcommerceData(string name, double price, string category = null, long quantity = -1) 21 | { 22 | PusheAndroidUtils.Extension("analytics").CallStatic("sendEcommerce", name, price, category, quantity); 23 | } 24 | 25 | 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheAndroidUtils.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | 4 | namespace Pushe.android 5 | { 6 | static class PusheAndroidUtils 7 | { 8 | 9 | private const string PushePath = "co.pushe.plus.Pushe"; 10 | // Some additional functions for Pushe SDK 11 | private const string ExtPath = "co.pushe.plus.ext.PusheExt"; 12 | 13 | public static AndroidJavaClass Extension(string module = "core") 14 | { 15 | switch (module) 16 | { 17 | case "core": 18 | return new AndroidJavaClass("co.pushe.plus.ext.PusheExt"); 19 | case "notification": 20 | return new AndroidJavaClass("co.pushe.plus.notification.ext.PusheExt"); 21 | case "analytics": 22 | return new AndroidJavaClass("co.pushe.plus.analytics.ext.PusheExt"); 23 | case "inappmessaging": 24 | return new AndroidJavaClass("co.pushe.plus.inappmessaging.ext.PusheExt"); 25 | 26 | } 27 | return new AndroidJavaClass(ExtPath); 28 | } 29 | 30 | public static AndroidJavaClass Native() 31 | { 32 | return new AndroidJavaClass(PushePath); 33 | } 34 | 35 | public static AndroidJavaObject CreateJavaArrayList(params string[] elements) 36 | { 37 | var list = new AndroidJavaObject("java.util.ArrayList"); 38 | foreach (var element in elements) 39 | { 40 | list.Call("add", element); 41 | } 42 | 43 | return list; 44 | } 45 | 46 | public static AndroidJavaObject CreateJavaMapFromDictionary(IDictionary parameters) 47 | { 48 | var javaMap = new AndroidJavaObject("java.util.HashMap"); 49 | var putMethod = AndroidJNIHelper.GetMethodID( 50 | javaMap.GetRawClass(), "put", 51 | "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); 52 | 53 | var args = new object[2]; 54 | foreach (var kvp in parameters) 55 | { 56 | using (var k = new AndroidJavaObject( 57 | "java.lang.String", kvp.Key)) 58 | { 59 | using (var v = new AndroidJavaObject( 60 | "java.lang.String", kvp.Value)) 61 | { 62 | args[0] = k; 63 | args[1] = v; 64 | AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), 65 | putMethod, AndroidJNIHelper.CreateJNIArgArray(args)); 66 | } 67 | } 68 | } 69 | 70 | return javaMap; 71 | } 72 | 73 | 74 | 75 | public static AndroidJavaObject PusheAnalyticsService() 76 | { 77 | return PusheAndroidUtils.Native().CallStatic("getPusheService", "analytics"); 78 | } 79 | 80 | 81 | public static AndroidJavaObject PusheNotificationService() 82 | { 83 | return PusheAndroidUtils.Native().CallStatic("getPusheService", "notification"); 84 | } 85 | 86 | public static int SdkLevel() 87 | { 88 | using (var version = new AndroidJavaClass("android.os.Build$VERSION")) 89 | { 90 | var sdkInt = version.GetStatic("SDK_INT"); 91 | return sdkInt; 92 | } 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheCore.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics.CodeAnalysis; 4 | using UnityEngine; 5 | 6 | namespace Pushe.android 7 | { 8 | /// 9 | /// For more and detailed information and documentations please checkout 10 | /// 11 | public static class PusheCore 12 | { 13 | /// 14 | /// GDPR related. 15 | /// If the user consent was given about necessary data collection for Pushe, 16 | /// use this function to let pushe registration begin. 17 | /// To be able to use GDPR, add "pushe_requires_user_consent" meta-data value to "true", 18 | /// After showing the dialog and getting user's consent, call this onAccept. 19 | /// NOTE: Calling this only once is enough. 20 | /// 21 | public static void Initialize() 22 | { 23 | PusheAndroidUtils.Native().CallStatic("initialize"); 24 | } 25 | 26 | /// Set user's consent 27 | public static void SetUserConsentGiven() 28 | { 29 | PusheAndroidUtils.Native().CallStatic("setUserConsentGiven"); 30 | } 31 | 32 | /// 33 | /// Check if pushe is registered to FCM 34 | /// 35 | public static bool IsRegistered() 36 | { 37 | return PusheAndroidUtils.Native().CallStatic("isRegistered"); 38 | } 39 | 40 | /// 41 | /// Returns true if all pushe modules (Core, notification, etc.) were initialized. 42 | /// 43 | public static bool IsInitialized() 44 | { 45 | return PusheAndroidUtils.Native().CallStatic("isInitialized"); 46 | } 47 | 48 | /** 49 | Simply pass a void no argument function to this function to handle registration 50 | */ 51 | public static void OnPusheRegistered(PusheUnity.PusheDelegate pusheCallback) 52 | { 53 | PusheAndroidUtils.Native().CallStatic("setRegistrationCompleteListener", new RegisterCallback(pusheCallback)); 54 | } 55 | 56 | /// 57 | /// Simply pass a void no argument function to this to handle initialization. 58 | /// 59 | /// * NOTE: This is not like Pushe.initialize() from Pushe 1.x. This is different. 60 | /// 61 | /// 62 | public static void OnPusheInitialized(PusheUnity.PusheDelegate initCallback) 63 | { 64 | PusheAndroidUtils.Native().CallStatic("setInitializationCompleteListener", new RegisterCallback(initCallback)); 65 | } 66 | 67 | /// 68 | /// Get google advertising id 69 | /// 70 | /// Null if this feature was disabled by user and true otherwise 71 | [Obsolete("Use GetAdvertisingId instead")] 72 | public static string GetGoogleAdvertisingId() 73 | { 74 | return PusheAndroidUtils.Native().CallStatic("getGoogleAdvertisingId"); 75 | } 76 | 77 | /// 78 | /// Get device advertising id (Google: Google Ad id, Huawei: Huawei OAID) 79 | /// 80 | /// Null if this feature was disabled by user and true otherwise 81 | public static string GetAdvertisingId() 82 | { 83 | return PusheAndroidUtils.Native().CallStatic("getAdvertisingId"); 84 | } 85 | 86 | /// 87 | /// Returns unique id of device 88 | /// Following ID makes a unique ID that: 89 | /// - (Android 8.0 or higher): Is unique in an app and will be different on another app. 90 | /// - (Android lower that 8.0): Is a unique ID for all apps and each device will have only one id. 91 | /// 92 | public static string GetDeviceId() 93 | { 94 | return PusheAndroidUtils.Native().CallStatic("getDeviceId"); 95 | } 96 | 97 | public static void SubscribeTo(string topic) 98 | { 99 | PusheAndroidUtils.Native().CallStatic("subscribeToTopic", topic, null); 100 | } 101 | 102 | public static void UnsubscribeFrom(string topic) 103 | { 104 | PusheAndroidUtils.Native().CallStatic("unsubscribeFromTopic", topic, null); 105 | } 106 | 107 | public static string[] GetSubscribedTopics() 108 | { 109 | return PusheAndroidUtils.Extension().CallStatic("getSubscribedTopicsCsv").Split(','); 110 | } 111 | 112 | public static void SetCustomId(string id) 113 | { 114 | PusheAndroidUtils.Native().CallStatic("setCustomId", id); 115 | } 116 | 117 | public static string GetCustomId() 118 | { 119 | return PusheAndroidUtils.Native().CallStatic("getCustomId"); 120 | } 121 | 122 | public static bool SetUserEmail(string email) 123 | { 124 | return PusheAndroidUtils.Native().CallStatic("setUserEmail", email); 125 | } 126 | 127 | public static string GetUserEmail() 128 | { 129 | return PusheAndroidUtils.Native().CallStatic("getUserEmail"); 130 | } 131 | 132 | public static bool SetUserPhoneNumber(string phone) 133 | { 134 | return PusheAndroidUtils.Native().CallStatic("setUserPhoneNumber", phone); 135 | } 136 | 137 | public static string GetUserPhoneNumber() 138 | { 139 | return PusheAndroidUtils.Native().CallStatic("getUserPhoneNumber"); 140 | } 141 | 142 | public static void AddTags(IDictionary tags) 143 | { 144 | var mapOfTags = PusheAndroidUtils.CreateJavaMapFromDictionary(tags); 145 | PusheAndroidUtils.Native().CallStatic("addTags", mapOfTags); 146 | } 147 | 148 | public static void RemoveTags(params string[] tags) 149 | { 150 | var tagsToRemove = PusheAndroidUtils.CreateJavaArrayList(tags); 151 | PusheAndroidUtils.Native().CallStatic("removeTags", tagsToRemove); 152 | } 153 | 154 | public static string GetSubscribedTags() 155 | { 156 | 157 | return PusheAndroidUtils.Extension().CallStatic("getSubscribedTagsJson"); 158 | } 159 | 160 | 161 | } 162 | 163 | 164 | 165 | 166 | [SuppressMessage("ReSharper", "InconsistentNaming")] 167 | public class RegisterCallback : AndroidJavaProxy 168 | { 169 | private readonly PusheUnity.PusheDelegate pusheSuccessDelegate; 170 | 171 | public RegisterCallback(PusheUnity.PusheDelegate pushe) : base("co.pushe.plus.Pushe$Callback") 172 | { 173 | pusheSuccessDelegate = pushe; 174 | } 175 | 176 | public void onComplete() 177 | { 178 | pusheSuccessDelegate(); 179 | } 180 | } 181 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheInAppMessaging.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics.CodeAnalysis; 3 | using UnityEngine; 4 | 5 | namespace Pushe.android 6 | { 7 | public static class PusheInAppMessaging { 8 | 9 | /// Trigger a local event. Local event is useless for sending data to server. 10 | /// Since no data is sent to server. Local events are only useful for triggering an in app messaging 11 | /// which is stored before. If you want to send data to server 12 | public static void TriggerEvent(string eventName) { 13 | PusheUnity.Log("Triggering local event " + eventName); 14 | PiamService().Call("triggerEvent", eventName); 15 | } 16 | 17 | public static void EnableInAppMessaging() { 18 | PusheUnity.Log("Enabling InAppMessaging"); 19 | PiamService().Call("enableInAppMessaging"); 20 | } 21 | 22 | public static void DisableInAppMessaging() { 23 | PusheUnity.Log("Disabling InAppMessaging"); 24 | PiamService().Call("disableInAppMessaging"); 25 | } 26 | 27 | public static bool IsInAppMessagingEnabled() { 28 | return PiamService().Call("isInAppMessagingEnabled"); 29 | } 30 | 31 | /// **VisibleForTesting** 32 | /// In order to test a message locally using code 33 | /// you can use this function to test the message that is used in API\ 34 | /// Note that the function should ONLY BE USED FOR TESTING and does not send any info 35 | /// and will not trigger any callback 36 | /// Is a json string adopted from Restful-API body 37 | /// Tells if messsage should be triggered instantly or wait for it's display conditions. 38 | public static void TestInAppMessage(string message, bool instant = false) { 39 | PusheUnity.Log("Sending test message to InAppMessaging module\nMessage:" + message); 40 | PiamService().Call("testInAppMessage", new object[] {message, instant}); 41 | } 42 | 43 | /// Listen to different events of InAppMessaging. 44 | /// Consists of "receive", "trigger", "click", "dismiss", "buttonClick" 45 | /// If a message occurred due to one of mentioned events, you will be notified. 46 | /// For isntance if you want to pause the game when an InAppMessage was triggered, you can listen to `trigger` 47 | /// and pause the game (No changes will happen on Game.Neighther pause, or anything else.) 48 | /// is the callback which is an interface and needs to be implemented 49 | public static void SetInAppMessagingListener(IPusheInAppMessagingListener listener) { 50 | var callback = new InAppMessagingCallback(listener); 51 | PiamService().Call("setInAppMessagingListener", callback); 52 | } 53 | 54 | private static AndroidJavaObject PiamService() 55 | { 56 | return PusheAndroidUtils.Native().CallStatic("getPusheService", "inappmessaging"); 57 | } 58 | } 59 | 60 | [SuppressMessage("ReSharper", "InconsistentNaming")] 61 | public class InAppMessagingCallback : AndroidJavaProxy 62 | { 63 | private IPusheInAppMessagingListener _listener; 64 | 65 | public InAppMessagingCallback(IPusheInAppMessagingListener listener) : base("co.pushe.plus.inappmessaging.PusheInAppMessagingListener") 66 | { 67 | _listener = listener; 68 | } 69 | 70 | public void onInAppMessageReceived (AndroidJavaObject inapp) { 71 | _listener.OnInAppMessageReceived(InAppMessage.FromAndroid(inapp)); 72 | } 73 | public void onInAppMessageTriggered(AndroidJavaObject inapp) { 74 | _listener.OnInAppMessageTriggered(InAppMessage.FromAndroid(inapp)); 75 | } 76 | public void onInAppMessageClicked(AndroidJavaObject inapp) { 77 | _listener.OnInAppMessageClicked(InAppMessage.FromAndroid(inapp)); 78 | } 79 | public void onInAppMessageDismissed(AndroidJavaObject inapp) { 80 | _listener.OnInAppMessageDismissed(InAppMessage.FromAndroid(inapp)); 81 | } 82 | public void onInAppMessageButtonClicked(AndroidJavaObject inapp, int index) { 83 | _listener.OnInAppMessageButtonClicked(InAppMessage.FromAndroid(inapp), index); 84 | } 85 | 86 | 87 | } 88 | 89 | [Serializable] 90 | public class InAppMessage { 91 | public string title; 92 | public string content; 93 | 94 | public InAppMessageButton[] buttons; 95 | 96 | public static InAppMessage FromAndroid(AndroidJavaObject androidObject) { 97 | var inapp = new InAppMessage(); 98 | try { 99 | var inappJson = PusheAndroidUtils.Extension("inappmessaging").CallStatic("inAppToJson", androidObject); 100 | inapp = JsonUtility.FromJson(inappJson); 101 | } catch(Exception e) { 102 | PusheUnity.Log("Failed to parse inapp message.\n" + e); 103 | } 104 | return inapp; 105 | } 106 | } 107 | 108 | [Serializable] 109 | public class InAppMessageButton { 110 | public string text; 111 | } 112 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheNotification.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics.CodeAnalysis; 3 | using UnityEngine; 4 | 5 | namespace Pushe.android 6 | { 7 | /// 8 | /// Notification Utility APIs provided by Pushe library 9 | /// This file contains all modules and APIs needed to work with pushe. 10 | /// 11 | public static class PusheNotification 12 | { 13 | 14 | /// 15 | /// For API 26 and above you can create channel for your app. 16 | /// Please refer to android official docs for more information 17 | /// 18 | /// NOTE: If lower than 26, nothing will happen. 19 | /// 20 | public static void CreateNotificationChannel( 21 | string channelId, 22 | string channelName, 23 | string description = "", 24 | int importance = 4, 25 | bool enableLight = true, 26 | bool enableVibration = true, 27 | long[] vibrationLengths = null, 28 | bool showBadge = true, 29 | int ledColor = 0 30 | ) 31 | { 32 | if (PusheAndroidUtils.SdkLevel() >= 26) 33 | { 34 | PusheAndroidUtils.PusheNotificationService().Call("createNotificationChannel", channelId, channelName, 35 | description, importance, enableLight, enableVibration, showBadge, ledColor, vibrationLengths); 36 | } 37 | else 38 | { 39 | Debug.Log("Lower than android 8.0. Channel not created!"); 40 | } 41 | } 42 | 43 | public static void RemoveNotificationChannel(string channelId) 44 | { 45 | if (PusheAndroidUtils.SdkLevel() >= 26) 46 | { 47 | PusheAndroidUtils.PusheNotificationService().Call("removeNotificationChannel", channelId); 48 | } 49 | else 50 | { 51 | Debug.Log("Lower than android 8.0. No channel to remove :|"); 52 | } 53 | } 54 | 55 | public static void EnableNotification() 56 | { 57 | PusheAndroidUtils.PusheNotificationService().Call("enableNotifications"); 58 | } 59 | 60 | public static void DisableNotification() 61 | { 62 | PusheAndroidUtils.PusheNotificationService().Call("disableNotifications"); 63 | } 64 | 65 | public static bool IsNotificationEnabled() 66 | { 67 | return PusheAndroidUtils.PusheNotificationService().Call("isNotificationEnable"); 68 | } 69 | 70 | public static void EnableCustomSound() 71 | { 72 | PusheAndroidUtils.PusheNotificationService().Call("enableCustomSound"); 73 | } 74 | 75 | public static void DisableCustomSound() 76 | { 77 | PusheAndroidUtils.PusheNotificationService().Call("disableCustomSound"); 78 | } 79 | 80 | public static bool IsCustomSoundEnabled() 81 | { 82 | return PusheAndroidUtils.PusheNotificationService().Call("isCustomSoundEnable"); 83 | } 84 | 85 | public static void SetNotificationListener(IPusheNotificationListener listener) { 86 | var callback = new NotificationCallback(listener); 87 | PusheAndroidUtils.PusheNotificationService().Call("setNotificationListener", callback); 88 | } 89 | 90 | 91 | 92 | /// 93 | /// With this function you can send notification from user to user. 94 | /// 95 | /// Will be thrown if needed param was entered as a null value 96 | public static void SendNotificationToUser(UserNotification userNotification) 97 | { 98 | if (userNotification.Id == null || userNotification.Title == null || userNotification.Content == null) 99 | { 100 | throw new Exception("id, title and content must be set."); 101 | } 102 | 103 | var userNotifClass = new AndroidJavaClass("co.pushe.plus.notification.UserNotification"); 104 | AndroidJavaObject userNotif; 105 | 106 | switch (userNotification.Type) 107 | { 108 | case UserNotification.IdType.CustomId: 109 | userNotif = userNotifClass.CallStatic("withCustomId", userNotification.Id); 110 | break; 111 | case UserNotification.IdType.AndroidId: 112 | userNotif = userNotifClass.CallStatic("WithAndroidId", userNotification.Id); 113 | break; 114 | case UserNotification.IdType.GoogleAdId: 115 | userNotif = userNotifClass.CallStatic("withAdvertisementId", 116 | userNotification.Id); 117 | break; 118 | default: 119 | throw new Exception("IdType is not valid"); 120 | } 121 | 122 | userNotif = userNotif.Call("setTitle", userNotification.Title) 123 | .Call("setContent", userNotification.Content); 124 | if (userNotification.IconUrl != null) 125 | { 126 | userNotif = userNotif.Call("setIconUrl", userNotification.IconUrl); 127 | } 128 | 129 | if (userNotification.BigTitle != null) 130 | { 131 | userNotif = userNotif.Call("setBigTitle", userNotification.BigTitle); 132 | } 133 | 134 | if (userNotification.BigContent != null) 135 | { 136 | userNotif = userNotif.Call("setBigContent", userNotification.BigContent); 137 | } 138 | 139 | if (userNotification.ImageUrl != null) 140 | { 141 | userNotif = userNotif.Call("setImageUrl", userNotification.ImageUrl); 142 | } 143 | 144 | if (userNotification.CustomContent != null) 145 | { 146 | userNotif = userNotif.Call("setCustomContent", userNotification.CustomContent); 147 | } 148 | 149 | if (userNotification.AdvancedJson != null) 150 | { 151 | userNotif = userNotif.Call("setAdvancedNotification", userNotification.AdvancedJson); 152 | } 153 | 154 | if (userNotification.NotifIcon != null) 155 | { 156 | userNotif = userNotif.Call("setNotifIcon", userNotification.NotifIcon); 157 | } 158 | 159 | try 160 | { 161 | PusheAndroidUtils.PusheNotificationService().Call("sendNotificationToUser", userNotif); 162 | } 163 | catch (Exception e) 164 | { 165 | PusheUnity.Log("Could not send a notification " + e); 166 | } 167 | } 168 | 169 | } 170 | 171 | /// 172 | /// This class is used to handle notification management in order to be used for sending notification. 173 | /// 174 | public class UserNotification 175 | { 176 | public readonly IdType Type; 177 | public readonly string Id; 178 | 179 | 180 | public string AdvancedJson; 181 | public string Title; 182 | public string Content; 183 | public string BigTitle; 184 | public string BigContent; 185 | public string ImageUrl; 186 | public string IconUrl; 187 | public string NotifIcon; 188 | public string CustomContent; 189 | 190 | private UserNotification(IdType type, string id) 191 | { 192 | Type = type; 193 | Id = id; 194 | } 195 | 196 | public static UserNotification WithCustomId(string customId) 197 | { 198 | return new UserNotification(IdType.CustomId, customId); 199 | } 200 | 201 | public static UserNotification WithGoogleAdvertisementId(string adId) 202 | { 203 | return new UserNotification(IdType.GoogleAdId, adId); 204 | } 205 | 206 | public static UserNotification WithAndroidId(string androidId) 207 | { 208 | return new UserNotification(IdType.AndroidId, androidId); 209 | } 210 | 211 | public UserNotification SetTitle(string title) 212 | { 213 | Title = title; 214 | return this; 215 | } 216 | 217 | public UserNotification SetContent(string content) 218 | { 219 | Content = content; 220 | return this; 221 | } 222 | 223 | public UserNotification SetBigTitle(string bigTitle) 224 | { 225 | BigTitle = bigTitle; 226 | return this; 227 | } 228 | 229 | public UserNotification SetBigContent(string bigContent) 230 | { 231 | BigContent = bigContent; 232 | return this; 233 | } 234 | 235 | public UserNotification SetImageUrl(string imageUrl) 236 | { 237 | ImageUrl = imageUrl; 238 | return this; 239 | } 240 | 241 | public UserNotification SetIconUrl(string iconUrl) 242 | { 243 | IconUrl = iconUrl; 244 | return this; 245 | } 246 | 247 | public UserNotification SetNotifIcon(string notifIcon) 248 | { 249 | NotifIcon = notifIcon; 250 | return this; 251 | } 252 | 253 | public UserNotification SetCustomContent(string customContent) 254 | { 255 | CustomContent = customContent; 256 | return this; 257 | } 258 | 259 | public UserNotification SetAdvancedNotification(string advancedNotificationJson) 260 | { 261 | AdvancedJson = advancedNotificationJson; 262 | return this; 263 | } 264 | 265 | public enum IdType 266 | { CustomId, GoogleAdId, AndroidId } 267 | } 268 | 269 | /// 270 | /// A class to hold data received from a FCM notification. 271 | /// 272 | [Serializable] 273 | public class NotificationData 274 | { 275 | public string title, content, bigTitle, 276 | bigContent, summary, imageUrl, iconUrl, bigIconUrl, customContent; 277 | 278 | public NotificationButtonData[] buttons; 279 | 280 | public static NotificationData FromAndroid(AndroidJavaObject androidJavaObject) { 281 | NotificationData notification = new NotificationData(); 282 | try { 283 | string json = PusheAndroidUtils.Extension("notification").CallStatic("notificationToJson", androidJavaObject); 284 | notification = JsonUtility.FromJson(json); 285 | } catch(Exception e) { 286 | PusheUnity.Log("Failed to parse notification" + e); 287 | } 288 | return notification; 289 | } 290 | 291 | public override string ToString() 292 | { 293 | return "\n" + 294 | title + "/" + 295 | content + "/" + 296 | bigTitle + "/" + 297 | bigContent + "/" + 298 | summary + "/" + 299 | imageUrl + "/" + 300 | iconUrl + "/" + 301 | bigIconUrl + "/" + 302 | customContent + "/" + 303 | buttons; 304 | } 305 | } 306 | 307 | [Serializable] 308 | public class NotificationButtonData 309 | { 310 | public string id, text, icon; 311 | 312 | public static NotificationButtonData FromAndroid(AndroidJavaObject androidJavaObject) { 313 | NotificationButtonData button = new NotificationButtonData(); 314 | try { 315 | string json = PusheAndroidUtils.Extension("notification").CallStatic("notificationButtonToJson", androidJavaObject); 316 | button = JsonUtility.FromJson(json); 317 | } catch(Exception e) { 318 | PusheUnity.Log("Failed to parse notification " + e); 319 | } 320 | return button; 321 | } 322 | 323 | public override string ToString() 324 | { 325 | return id + "/" + text + "/" + icon; 326 | } 327 | } 328 | 329 | [SuppressMessage("ReSharper", "InconsistentNaming")] 330 | public class NotificationCallback : AndroidJavaProxy 331 | { 332 | private IPusheNotificationListener _listener; 333 | 334 | public NotificationCallback(IPusheNotificationListener listener) : base("co.pushe.plus.notification.PusheNotificationListener") 335 | { 336 | _listener = listener; 337 | } 338 | 339 | public void onNotification(AndroidJavaObject notification) { 340 | var data = NotificationData.FromAndroid(notification); 341 | _listener.OnNotification(data); 342 | } 343 | public void onCustomContentNotification(AndroidJavaObject customContent) { 344 | var data = PusheAndroidUtils.Extension("notification").CallStatic("mapToString", customContent); 345 | _listener.OnCustomContentReceived(data); 346 | } 347 | public void onNotificationClick(AndroidJavaObject notification) { 348 | var data = NotificationData.FromAndroid(notification); 349 | _listener.OnNotificationClick(data); 350 | } 351 | public void onNotificationDismiss(AndroidJavaObject notification) { 352 | var data = NotificationData.FromAndroid(notification); 353 | _listener.OnNotificationDismiss(data); 354 | } 355 | public void onNotificationButtonClick(AndroidJavaObject notification, AndroidJavaObject button) { 356 | var data = NotificationData.FromAndroid(notification); 357 | var clickedButton = NotificationButtonData.FromAndroid(button); 358 | _listener.OnButtonClick(clickedButton, data); 359 | } 360 | 361 | 362 | } 363 | } -------------------------------------------------------------------------------- /Assets/Pushe/android/PusheUtils.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | 4 | namespace Pushe.android 5 | { 6 | static class PusheUtils 7 | { 8 | 9 | private const string PushePath = "co.pushe.plus.Pushe"; 10 | // Some additional functions for Pushe SDK 11 | private const string ExtPath = "co.pushe.plus.ext.PusheExt"; 12 | 13 | public static AndroidJavaClass Extension(string module = "core") 14 | { 15 | switch (module) 16 | { 17 | case "core": 18 | return new AndroidJavaClass("co.pushe.plus.ext.PusheExt"); 19 | case "notification": 20 | return new AndroidJavaClass("co.pushe.plus.notification.ext.PusheExt"); 21 | case "analytics": 22 | return new AndroidJavaClass("co.pushe.plus.analytics.ext.PusheExt"); 23 | case "inappmessaging": 24 | return new AndroidJavaClass("co.pushe.plus.inappmessaging.ext.PusheExt"); 25 | 26 | } 27 | return new AndroidJavaClass(ExtPath); 28 | } 29 | 30 | public static AndroidJavaClass Native() 31 | { 32 | return new AndroidJavaClass(PushePath); 33 | } 34 | 35 | public static AndroidJavaObject CreateJavaArrayList(params string[] elements) 36 | { 37 | var list = new AndroidJavaObject("java.util.ArrayList"); 38 | foreach (var element in elements) 39 | { 40 | list.Call("add", element); 41 | } 42 | 43 | return list; 44 | } 45 | 46 | public static AndroidJavaObject CreateJavaMapFromDictionary(IDictionary parameters) 47 | { 48 | var javaMap = new AndroidJavaObject("java.util.HashMap"); 49 | var putMethod = AndroidJNIHelper.GetMethodID( 50 | javaMap.GetRawClass(), "put", 51 | "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); 52 | 53 | var args = new object[2]; 54 | foreach (var kvp in parameters) 55 | { 56 | using (var k = new AndroidJavaObject( 57 | "java.lang.String", kvp.Key)) 58 | { 59 | using (var v = new AndroidJavaObject( 60 | "java.lang.String", kvp.Value)) 61 | { 62 | args[0] = k; 63 | args[1] = v; 64 | AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), 65 | putMethod, AndroidJNIHelper.CreateJNIArgArray(args)); 66 | } 67 | } 68 | } 69 | 70 | return javaMap; 71 | } 72 | 73 | } 74 | } -------------------------------------------------------------------------------- /Assets/Pushe/ios/PusheiOSUnityInterface.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Runtime.InteropServices; 4 | 5 | public class PusheiOSUnityInterface { 6 | #if UNITY_IOS && !UNITY_EDITOR 7 | [DllImport("__Internal")] 8 | private static extern void xcodeLog(string message); 9 | 10 | [DllImport("__Internal")] 11 | private static extern void initialize(); 12 | 13 | [DllImport("__Internal")] 14 | private static extern bool isRegistered(); 15 | 16 | [DllImport("__Internal")] 17 | private static extern string getDeviceId(); 18 | 19 | [DllImport("__Internal")] 20 | private static extern string getAdvertisingId(); 21 | 22 | [DllImport("__Internal")] 23 | private static extern void subscribeTo(string topic); 24 | 25 | [DllImport("__Internal")] 26 | private static extern void unsubscribeFrom(string topic); 27 | 28 | [DllImport("__Internal")] 29 | private static extern string getSubscribedTopics(); 30 | 31 | [DllImport("__Internal")] 32 | private static extern void addTags(string tags); 33 | 34 | [DllImport("__Internal")] 35 | private static extern void removeTags(string keys); 36 | 37 | [DllImport("__Internal")] 38 | private static extern string getSubscribedTags(); 39 | 40 | [DllImport("__Internal")] 41 | private static extern void setCustomId(string id); 42 | 43 | [DllImport("__Internal")] 44 | private static extern string getCustomId(); 45 | 46 | [DllImport("__Internal")] 47 | private static extern bool setUserEmail(string email); 48 | 49 | [DllImport("__Internal")] 50 | private static extern string getUserEmail(); 51 | 52 | [DllImport("__Internal")] 53 | private static extern bool setUserPhoneNumber(string phoneNumber); 54 | 55 | [DllImport("__Internal")] 56 | private static extern string getUserPhoneNumber(); 57 | 58 | [DllImport("__Internal")] 59 | private static extern void sendEvent(string eventName); 60 | #endif 61 | 62 | public static void XcodeLog(string message) { 63 | #if UNITY_IOS && !UNITY_EDITOR 64 | xcodeLog(message); 65 | #endif 66 | } 67 | 68 | public static void Initialize() { 69 | #if UNITY_IOS && !UNITY_EDITOR 70 | initialize(); 71 | #endif 72 | } 73 | 74 | public static bool IsRegistered() { 75 | #if UNITY_IOS && !UNITY_EDITOR 76 | return isRegistered(); 77 | #endif 78 | return false; 79 | } 80 | 81 | public static string GetDeviceId() { 82 | #if UNITY_IOS && !UNITY_EDITOR 83 | return getDeviceId(); 84 | #endif 85 | return null; 86 | } 87 | 88 | public static string GetAdvertisingId() { 89 | #if UNITY_IOS && !UNITY_EDITOR 90 | return getAdvertisingId(); 91 | #endif 92 | return null; 93 | } 94 | 95 | public static void Subscribe(string topic) { 96 | #if UNITY_IOS && !UNITY_EDITOR 97 | subscribeTo(topic); 98 | #endif 99 | } 100 | 101 | public static void Unsubscribe(string topic) { 102 | #if UNITY_IOS && !UNITY_EDITOR 103 | unsubscribeFrom(topic); 104 | #endif 105 | } 106 | 107 | public static string[] GetSubscribedTopics() { 108 | #if UNITY_IOS && !UNITY_EDITOR 109 | string result = getSubscribedTopics(); 110 | result = result.TrimStart('['); 111 | result = result.TrimEnd(']'); 112 | string[] des = result.Split(','); 113 | for (int i = 0; i < des.Length; i++) { 114 | des[i] = des[i].TrimStart('"'); 115 | des[i] = des[i].TrimEnd('"'); 116 | } 117 | return des; 118 | #endif 119 | return null; 120 | } 121 | 122 | public static void AddTags(Dictionary tags) { 123 | string stringForm = ""; 124 | for (int i = 0; i < tags.Count; i++) { 125 | if (i != 0) { 126 | stringForm += ","; 127 | } 128 | string key = tags.ElementAt(i).Key; 129 | string value = tags.ElementAt(i).Value; 130 | stringForm += key + ":" + value; 131 | } 132 | #if UNITY_IOS && !UNITY_EDITOR 133 | addTags(stringForm); 134 | #endif 135 | } 136 | 137 | public static void RemoveTags(string[] keys) { 138 | string stringForm = ""; 139 | for (int i = 0; i < keys.Length; i++) { 140 | if (i != 0) { 141 | stringForm += ","; 142 | } 143 | stringForm += keys[i]; 144 | } 145 | #if UNITY_IOS && !UNITY_EDITOR 146 | removeTags(stringForm); 147 | #endif 148 | } 149 | 150 | // {"key1":"value1","key3":"value3","key2":"value2"} 151 | public static Dictionary GetSubscribedTags() { 152 | #if UNITY_IOS && !UNITY_EDITOR 153 | string stringForm = getSubscribedTags(); 154 | stringForm = stringForm.TrimStart('{'); 155 | stringForm = stringForm.TrimEnd('}'); 156 | string[] dicItems = stringForm.Split(','); 157 | Dictionary result = new Dictionary(); 158 | for (int i = 0; i < dicItems.Length; i++) { 159 | string[] temp = dicItems[i].Split(':') ; 160 | result.Add(temp[0], temp[1]); 161 | } 162 | return result; 163 | #endif 164 | return new Dictionary(); 165 | } 166 | 167 | public static void SendEvent(string eventName) { 168 | #if UNITY_IOS && !UNITY_EDITOR 169 | sendEvent(eventName); 170 | #endif 171 | } 172 | 173 | public static void SetCustomId(string id) { 174 | #if UNITY_IOS && !UNITY_EDITOR 175 | setCustomId(id); 176 | #endif 177 | } 178 | 179 | public static string GetCustomId() { 180 | #if UNITY_IOS && !UNITY_EDITOR 181 | return getCustomId(); 182 | #endif 183 | return null; 184 | } 185 | 186 | public static bool SetUserEmail(string email) { 187 | #if UNITY_IOS && !UNITY_EDITOR 188 | return setUserEmail(email); 189 | #endif 190 | return false; 191 | } 192 | 193 | public static string GetUserEmail() { 194 | #if UNITY_IOS && !UNITY_EDITOR 195 | return getUserEmail(); 196 | #endif 197 | return null; 198 | } 199 | 200 | public static bool SetUserPhoneNumber(string phoneNumber) { 201 | #if UNITY_IOS && !UNITY_EDITOR 202 | return setUserPhoneNumber(phoneNumber); 203 | #endif 204 | return false; 205 | } 206 | 207 | public static string GetUserPhoneNumber() { 208 | #if UNITY_IOS && !UNITY_EDITOR 209 | return getUserPhoneNumber(); 210 | #endif 211 | return null; 212 | } 213 | } -------------------------------------------------------------------------------- /Assets/Pushe/ios/PusheiOSUnityInterface.mm: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | char* cStringCopy(const char*); 5 | 6 | extern "C" { 7 | void xcodeLog(const char *message) { 8 | NSString *string = [[NSString alloc] initWithUTF8String:message]; 9 | NSLog(@"++++++++++"); 10 | NSLog(@"🎄 -> %@", string); 11 | NSLog(@"++++++++++"); 12 | } 13 | 14 | void initialize() { 15 | [PusheClient.shared initialize]; 16 | } 17 | 18 | bool isRegistered() { 19 | return [PusheClient.shared isRegistered]; 20 | } 21 | 22 | char * getDeviceId() { 23 | NSString *result = [PusheClient.shared getDeviceId]; 24 | return cStringCopy([result UTF8String]); 25 | } 26 | 27 | char * getAdvertisingId() { 28 | NSString *result = [PusheClient.shared getAdvertisingId]; 29 | return cStringCopy([result UTF8String]); 30 | } 31 | 32 | void subscribeTo(const char *topic) { 33 | NSString *string = [[NSString alloc] initWithUTF8String:topic]; 34 | [PusheClient.shared subscribe:string]; 35 | } 36 | 37 | void unsubscribeFrom(const char *topic) { 38 | NSString *string = [[NSString alloc] initWithUTF8String:topic]; 39 | [PusheClient.shared unsubscribe:string]; 40 | } 41 | 42 | char * getSubscribedTopics() { 43 | NSArray *array = [[NSArray alloc] initWithArray:[PusheClient.shared getSubscribedTopics]]; 44 | NSString *json = NULL; 45 | NSError *error = NULL; 46 | NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NULL error:&error]; 47 | json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 48 | 49 | if (error != NULL) { 50 | return NULL; 51 | } else { 52 | return cStringCopy([json UTF8String]); 53 | } 54 | } 55 | 56 | void addTags(const char *tags) { 57 | NSString *string = [[NSString alloc] initWithUTF8String:tags]; 58 | NSArray *keyValues = [string componentsSeparatedByString:@","]; 59 | NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:keyValues.count]; 60 | for (int i = 0; i < keyValues.count; i++) { 61 | NSArray *temp = [keyValues[i] componentsSeparatedByString:@":"]; 62 | NSString *key = temp[0]; 63 | NSString *value = temp[1]; 64 | [dict setObject:value forKey:key]; 65 | } 66 | 67 | [PusheClient.shared addTags:dict]; 68 | } 69 | 70 | void removeTags(const char * keys) { 71 | xcodeLog(keys); 72 | NSString *string = [[NSString alloc] initWithUTF8String:keys]; 73 | NSArray *keysArray = [string componentsSeparatedByString:@","]; 74 | [PusheClient.shared removeTags:keysArray]; 75 | } 76 | 77 | char * getSubscribedTags() { 78 | NSDictionary *tags = [[NSDictionary alloc] initWithDictionary:[PusheClient.shared getSubscribedTags]]; 79 | NSString *json = NULL; 80 | NSError *error = NULL; 81 | NSData *data = [NSJSONSerialization dataWithJSONObject:tags options:NULL error:&error]; 82 | json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 83 | 84 | if (error != NULL) { 85 | return NULL; 86 | } else { 87 | return cStringCopy([json UTF8String]); 88 | } 89 | } 90 | 91 | void sendEvent(const char * eventName) { 92 | if (eventName == NULL) { 93 | return; 94 | } 95 | 96 | NSString *string = [[NSString alloc] initWithUTF8String:eventName]; 97 | [PusheClient.shared sendEventWithName:string]; 98 | } 99 | 100 | void setCustomId(const char * customId) { 101 | NSString *string; 102 | if (customId == NULL) { 103 | string = NULL; 104 | } else { 105 | string = [[NSString alloc] initWithUTF8String:customId]; 106 | } 107 | 108 | [PusheClient.shared setCustomId:string]; 109 | } 110 | 111 | char * getCustomId() { 112 | NSString *result = [PusheClient.shared getCustomId]; 113 | return cStringCopy([result UTF8String]); 114 | } 115 | 116 | bool setUserEmail(const char * email) { 117 | NSString *string; 118 | if (email == NULL) { 119 | string = NULL; 120 | } else { 121 | string = [[NSString alloc] initWithUTF8String:email]; 122 | } 123 | 124 | return [PusheClient.shared setUserEmail:string]; 125 | } 126 | 127 | char * getUserEmail() { 128 | NSString *result = [PusheClient.shared getUserEmail]; 129 | return cStringCopy([result UTF8String]); 130 | } 131 | 132 | bool setUserPhoneNumber(const char * phoneNumber) { 133 | NSString *string; 134 | if (phoneNumber == NULL) { 135 | string = NULL; 136 | } else { 137 | string = [[NSString alloc] initWithUTF8String:phoneNumber]; 138 | } 139 | 140 | return [PusheClient.shared setUserPhoneNumber:string]; 141 | } 142 | 143 | char * getUserPhoneNumber() { 144 | NSString *result = [PusheClient.shared getUserPhoneNumber]; 145 | return cStringCopy([result UTF8String]); 146 | } 147 | } 148 | 149 | char* cStringCopy(const char* string) { 150 | if (string == NULL) 151 | return NULL; 152 | 153 | char* res = (char*)malloc(strlen(string) + 1); 154 | strcpy(res, string); 155 | 156 | return res; 157 | } 158 | -------------------------------------------------------------------------------- /Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc3b5957150c44449a99008ed7b7a48a 3 | timeCreated: 1606410634 -------------------------------------------------------------------------------- /Assets/Scripts/GameController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.SceneManagement; 6 | 7 | [RequireComponent(typeof(GameUi))] 8 | public class GameController : MonoBehaviour { 9 | 10 | public static GameController Instance { get; private set; } 11 | 12 | [SerializeField] private int knifeCount; 13 | 14 | [Header("Knife Spawning")] 15 | [SerializeField] 16 | private Vector2 knifeSpawnPosition; 17 | 18 | [SerializeField] private GameObject knifeObject; 19 | 20 | public GameUi GameUi { get; private set; } 21 | 22 | private void Awake() 23 | { 24 | Instance = this; 25 | GameUi = GetComponent(); 26 | } 27 | 28 | private void Start() 29 | { 30 | GameUi.SetInitialDisplayedKnifeCount(knifeCount); 31 | SpawnKnife(); 32 | } 33 | 34 | public void OnSuccessfulKnifeHit() 35 | { 36 | if (knifeCount > 0) 37 | { 38 | SpawnKnife(); 39 | } 40 | else 41 | { 42 | StartGameOverSequence(true); 43 | } 44 | } 45 | 46 | public void SpawnKnife() 47 | { 48 | knifeCount--; 49 | Instantiate(knifeObject, knifeSpawnPosition, Quaternion.identity); 50 | 51 | } 52 | 53 | public void StartGameOverSequence(bool win) 54 | { 55 | StartCoroutine("GameOverSequenceCoroutine", win); 56 | } 57 | 58 | private IEnumerator GameOverSequenceCoroutine(bool win) 59 | { 60 | if (win) 61 | { 62 | yield return new WaitForSecondsRealtime(0.3f); 63 | GameUi.ShowRestartButton(); 64 | } 65 | else 66 | { 67 | GameUi.ShowRestartButton(); 68 | } 69 | } 70 | 71 | public void RestartGame() 72 | { 73 | SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex, LoadSceneMode.Single); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /Assets/Scripts/GameController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f410efd0de5c58649a242edbe89db084 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/GameUi.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | 4 | public class GameUi : MonoBehaviour 5 | { 6 | [SerializeField] 7 | private GameObject restartButtonField; 8 | 9 | [Header("Knife count display")] [SerializeField] 10 | private GameObject panelKnives; 11 | 12 | [SerializeField] private GameObject iconKnife; 13 | 14 | [SerializeField] private Color usedKnifeIconColor; 15 | 16 | public void ShowRestartButton() 17 | { 18 | restartButtonField.SetActive(true); 19 | } 20 | 21 | public void SetInitialDisplayedKnifeCount(int count) 22 | { 23 | for (int i = 0; i < count; i++) 24 | { 25 | Instantiate(iconKnife, panelKnives.transform); 26 | } 27 | } 28 | 29 | private int knifeIconIndexToChange = 0; 30 | 31 | public void DecrementDisplayedKnifeCount() 32 | { 33 | panelKnives.transform.GetChild(knifeIconIndexToChange++) 34 | .GetComponent().color = usedKnifeIconColor; 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /Assets/Scripts/GameUi.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2618f7dffd4a4a71bf271f5bb64ec915 3 | timeCreated: 1606410659 -------------------------------------------------------------------------------- /Assets/Scripts/KnifeScripts.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | public class KnifeScripts : MonoBehaviour 7 | { 8 | 9 | [SerializeField] 10 | private Vector2 throwForce; 11 | 12 | private bool isActive = true; 13 | 14 | private Rigidbody2D rb; 15 | private BoxCollider2D knifeCollider; 16 | 17 | private void Awake() 18 | { 19 | rb = GetComponent(); 20 | knifeCollider = GetComponent(); 21 | } 22 | 23 | private void Update() 24 | { 25 | if (Input.GetMouseButtonDown(0) && isActive) 26 | { 27 | rb.AddForce(throwForce, ForceMode2D.Impulse); 28 | rb.gravityScale = 1; 29 | GameController.Instance.GameUi.DecrementDisplayedKnifeCount(); 30 | } 31 | } 32 | 33 | private void OnCollisionEnter2D(Collision2D collision) 34 | { 35 | if (!isActive) return; 36 | 37 | isActive = false; 38 | 39 | if (collision.collider.CompareTag("Log")) 40 | { 41 | GetComponent().Play(); 42 | rb.velocity = new Vector2(0, 0); 43 | rb.bodyType = RigidbodyType2D.Kinematic; 44 | transform.SetParent(collision.collider.transform); 45 | 46 | knifeCollider.offset = new Vector2(knifeCollider.offset.x, -0.4f); 47 | knifeCollider.size = new Vector2(knifeCollider.size.x, 1.2f); 48 | 49 | GameController.Instance.OnSuccessfulKnifeHit(); 50 | } 51 | else if (collision.collider.CompareTag("Knife")) 52 | { 53 | rb.velocity = new Vector2(rb.velocity.x, -2); 54 | GameController.Instance.StartGameOverSequence(false); 55 | } 56 | 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Assets/Scripts/KnifeScripts.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 121a091dc7ed53743a17fa4b5dee3a38 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/LogRotation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | public class LogRotation : MonoBehaviour { 7 | 8 | [Serializable] 9 | class RotationElement 10 | { 11 | #pragma warning disable 0649 12 | public float Speed; 13 | public float Duration; 14 | 15 | #pragma warning restore 0649 16 | } 17 | 18 | [SerializeField] 19 | private RotationElement[] rotationPattern; 20 | 21 | private WheelJoint2D wheelJoint2D; 22 | private JointMotor2D motor; 23 | 24 | private void Awake() 25 | { 26 | wheelJoint2D = GetComponent(); 27 | motor = new JointMotor2D(); 28 | StartCoroutine("PlayRotationPattern"); 29 | } 30 | 31 | private IEnumerator PlayRotationPattern() 32 | { 33 | int rotationIndex = 0; 34 | while (true) 35 | { 36 | yield return new WaitForFixedUpdate(); 37 | 38 | motor.motorSpeed = rotationPattern[rotationIndex].Speed; 39 | motor.maxMotorTorque = 10000; 40 | wheelJoint2D.motor = motor; 41 | 42 | yield return new WaitForSecondsRealtime(rotationPattern[rotationIndex].Duration); 43 | rotationIndex++; 44 | rotationIndex = rotationIndex < rotationPattern.Length ? rotationIndex : 0; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Assets/Scripts/LogRotation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf7a9b401da6b954e861d78a958fc158 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/WoodenParticleMaterial.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: WoodenParticleMaterial 10 | m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 0 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: 18 | - ALWAYS 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BlendOp: 0 60 | - _BumpScale: 1 61 | - _CameraFadingEnabled: 0 62 | - _CameraFarFadeDistance: 2 63 | - _CameraNearFadeDistance: 1 64 | - _ColorMode: 0 65 | - _Cull: 2 66 | - _Cutoff: 0.5 67 | - _DetailNormalMapScale: 1 68 | - _DistortionBlend: 0.5 69 | - _DistortionEnabled: 0 70 | - _DistortionStrength: 1 71 | - _DistortionStrengthScaled: 0 72 | - _DstBlend: 0 73 | - _EmissionEnabled: 0 74 | - _FlipbookMode: 0 75 | - _GlossMapScale: 1 76 | - _Glossiness: 0.5 77 | - _GlossyReflections: 1 78 | - _LightingEnabled: 0 79 | - _Metallic: 0 80 | - _Mode: 0 81 | - _OcclusionStrength: 1 82 | - _Parallax: 0.02 83 | - _SmoothnessTextureChannel: 0 84 | - _SoftParticlesEnabled: 0 85 | - _SoftParticlesFarFadeDistance: 1 86 | - _SoftParticlesNearFadeDistance: 0 87 | - _SpecularHighlights: 1 88 | - _SrcBlend: 1 89 | - _UVSec: 0 90 | - _ZWrite: 1 91 | m_Colors: 92 | - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0} 93 | - _Color: {r: 1, g: 1, b: 1, a: 1} 94 | - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} 95 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 96 | - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} 97 | -------------------------------------------------------------------------------- /Assets/WoodenParticleMaterial.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 129744e937ada2d4d9a7fc3429e650c9 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/knife_hit.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &6991921 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 6991925} 133 | - component: {fileID: 6991924} 134 | - component: {fileID: 6991923} 135 | - component: {fileID: 6991922} 136 | - component: {fileID: 6991926} 137 | m_Layer: 0 138 | m_Name: Main Camera 139 | m_TagString: MainCamera 140 | m_Icon: {fileID: 0} 141 | m_NavMeshLayer: 0 142 | m_StaticEditorFlags: 0 143 | m_IsActive: 1 144 | --- !u!81 &6991922 145 | AudioListener: 146 | m_ObjectHideFlags: 0 147 | m_CorrespondingSourceObject: {fileID: 0} 148 | m_PrefabInstance: {fileID: 0} 149 | m_PrefabAsset: {fileID: 0} 150 | m_GameObject: {fileID: 6991921} 151 | m_Enabled: 1 152 | --- !u!124 &6991923 153 | Behaviour: 154 | m_ObjectHideFlags: 0 155 | m_CorrespondingSourceObject: {fileID: 0} 156 | m_PrefabInstance: {fileID: 0} 157 | m_PrefabAsset: {fileID: 0} 158 | m_GameObject: {fileID: 6991921} 159 | m_Enabled: 1 160 | --- !u!20 &6991924 161 | Camera: 162 | m_ObjectHideFlags: 0 163 | m_CorrespondingSourceObject: {fileID: 0} 164 | m_PrefabInstance: {fileID: 0} 165 | m_PrefabAsset: {fileID: 0} 166 | m_GameObject: {fileID: 6991921} 167 | m_Enabled: 1 168 | serializedVersion: 2 169 | m_ClearFlags: 1 170 | m_BackGroundColor: {r: 0.4339623, g: 0.71151686, b: 1, a: 1} 171 | m_projectionMatrixMode: 1 172 | m_GateFitMode: 2 173 | m_FOVAxisMode: 0 174 | m_SensorSize: {x: 36, y: 24} 175 | m_LensShift: {x: 0, y: 0} 176 | m_FocalLength: 50 177 | m_NormalizedViewPortRect: 178 | serializedVersion: 2 179 | x: 0 180 | y: 0 181 | width: 1 182 | height: 1 183 | near clip plane: 0.3 184 | far clip plane: 1000 185 | field of view: 60 186 | orthographic: 1 187 | orthographic size: 5 188 | m_Depth: -1 189 | m_CullingMask: 190 | serializedVersion: 2 191 | m_Bits: 4294967295 192 | m_RenderingPath: -1 193 | m_TargetTexture: {fileID: 0} 194 | m_TargetDisplay: 0 195 | m_TargetEye: 3 196 | m_HDR: 1 197 | m_AllowMSAA: 1 198 | m_AllowDynamicResolution: 0 199 | m_ForceIntoRT: 0 200 | m_OcclusionCulling: 1 201 | m_StereoConvergence: 10 202 | m_StereoSeparation: 0.022 203 | --- !u!4 &6991925 204 | Transform: 205 | m_ObjectHideFlags: 0 206 | m_CorrespondingSourceObject: {fileID: 0} 207 | m_PrefabInstance: {fileID: 0} 208 | m_PrefabAsset: {fileID: 0} 209 | m_GameObject: {fileID: 6991921} 210 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 211 | m_LocalPosition: {x: 0, y: 0, z: -10} 212 | m_LocalScale: {x: 1, y: 1, z: 1} 213 | m_Children: [] 214 | m_Father: {fileID: 0} 215 | m_RootOrder: 0 216 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 217 | --- !u!114 &6991926 218 | MonoBehaviour: 219 | m_ObjectHideFlags: 0 220 | m_CorrespondingSourceObject: {fileID: 0} 221 | m_PrefabInstance: {fileID: 0} 222 | m_PrefabAsset: {fileID: 0} 223 | m_GameObject: {fileID: 6991921} 224 | m_Enabled: 1 225 | m_EditorHideFlags: 0 226 | m_Script: {fileID: 11500000, guid: 56bc75fe19e354f9880a8ececaed8fef, type: 3} 227 | m_Name: 228 | m_EditorClassIdentifier: 229 | --- !u!1 &162964439 230 | GameObject: 231 | m_ObjectHideFlags: 0 232 | m_CorrespondingSourceObject: {fileID: 0} 233 | m_PrefabInstance: {fileID: 0} 234 | m_PrefabAsset: {fileID: 0} 235 | serializedVersion: 6 236 | m_Component: 237 | - component: {fileID: 162964440} 238 | - component: {fileID: 162964443} 239 | - component: {fileID: 162964442} 240 | - component: {fileID: 162964441} 241 | m_Layer: 0 242 | m_Name: LogMotor 243 | m_TagString: Untagged 244 | m_Icon: {fileID: 0} 245 | m_NavMeshLayer: 0 246 | m_StaticEditorFlags: 0 247 | m_IsActive: 1 248 | --- !u!4 &162964440 249 | Transform: 250 | m_ObjectHideFlags: 0 251 | m_CorrespondingSourceObject: {fileID: 0} 252 | m_PrefabInstance: {fileID: 0} 253 | m_PrefabAsset: {fileID: 0} 254 | m_GameObject: {fileID: 162964439} 255 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 256 | m_LocalPosition: {x: 0, y: 2, z: -10} 257 | m_LocalScale: {x: 1, y: 1, z: 1} 258 | m_Children: 259 | - {fileID: 1943291406} 260 | m_Father: {fileID: 0} 261 | m_RootOrder: 2 262 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 263 | --- !u!114 &162964441 264 | MonoBehaviour: 265 | m_ObjectHideFlags: 0 266 | m_CorrespondingSourceObject: {fileID: 0} 267 | m_PrefabInstance: {fileID: 0} 268 | m_PrefabAsset: {fileID: 0} 269 | m_GameObject: {fileID: 162964439} 270 | m_Enabled: 1 271 | m_EditorHideFlags: 0 272 | m_Script: {fileID: 11500000, guid: bf7a9b401da6b954e861d78a958fc158, type: 3} 273 | m_Name: 274 | m_EditorClassIdentifier: 275 | rotationPattern: 276 | - Speed: 250 277 | Duration: 1 278 | - Speed: -100 279 | Duration: 2 280 | - Speed: -300 281 | Duration: 3 282 | - Speed: 100 283 | Duration: 1 284 | - Speed: -250 285 | Duration: 3 286 | - Speed: 200 287 | Duration: 2 288 | - Speed: 400 289 | Duration: 2 290 | --- !u!235 &162964442 291 | WheelJoint2D: 292 | m_ObjectHideFlags: 0 293 | m_CorrespondingSourceObject: {fileID: 0} 294 | m_PrefabInstance: {fileID: 0} 295 | m_PrefabAsset: {fileID: 0} 296 | m_GameObject: {fileID: 162964439} 297 | m_Enabled: 1 298 | serializedVersion: 4 299 | m_EnableCollision: 0 300 | m_ConnectedRigidBody: {fileID: 1943291408} 301 | m_BreakForce: Infinity 302 | m_BreakTorque: Infinity 303 | m_AutoConfigureConnectedAnchor: 1 304 | m_Anchor: {x: 0, y: 0} 305 | m_ConnectedAnchor: {x: 0, y: 0} 306 | m_Suspension: 307 | m_DampingRatio: 0.7 308 | m_Frequency: 2 309 | m_Angle: 90 310 | m_UseMotor: 0 311 | m_Motor: 312 | m_MotorSpeed: 0 313 | m_MaximumMotorForce: 10000 314 | --- !u!50 &162964443 315 | Rigidbody2D: 316 | serializedVersion: 4 317 | m_ObjectHideFlags: 0 318 | m_CorrespondingSourceObject: {fileID: 0} 319 | m_PrefabInstance: {fileID: 0} 320 | m_PrefabAsset: {fileID: 0} 321 | m_GameObject: {fileID: 162964439} 322 | m_BodyType: 1 323 | m_Simulated: 1 324 | m_UseFullKinematicContacts: 0 325 | m_UseAutoMass: 0 326 | m_Mass: 1 327 | m_LinearDrag: 0 328 | m_AngularDrag: 0.05 329 | m_GravityScale: 1 330 | m_Material: {fileID: 0} 331 | m_Interpolate: 0 332 | m_SleepingMode: 1 333 | m_CollisionDetection: 0 334 | m_Constraints: 0 335 | --- !u!1 &567165807 336 | GameObject: 337 | m_ObjectHideFlags: 0 338 | m_CorrespondingSourceObject: {fileID: 0} 339 | m_PrefabInstance: {fileID: 0} 340 | m_PrefabAsset: {fileID: 0} 341 | serializedVersion: 6 342 | m_Component: 343 | - component: {fileID: 567165811} 344 | - component: {fileID: 567165810} 345 | - component: {fileID: 567165809} 346 | - component: {fileID: 567165808} 347 | m_Layer: 0 348 | m_Name: Canvas 349 | m_TagString: Untagged 350 | m_Icon: {fileID: 0} 351 | m_NavMeshLayer: 0 352 | m_StaticEditorFlags: 0 353 | m_IsActive: 1 354 | --- !u!114 &567165808 355 | MonoBehaviour: 356 | m_ObjectHideFlags: 0 357 | m_CorrespondingSourceObject: {fileID: 0} 358 | m_PrefabInstance: {fileID: 0} 359 | m_PrefabAsset: {fileID: 0} 360 | m_GameObject: {fileID: 567165807} 361 | m_Enabled: 1 362 | m_EditorHideFlags: 0 363 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} 364 | m_Name: 365 | m_EditorClassIdentifier: 366 | m_IgnoreReversedGraphics: 1 367 | m_BlockingObjects: 0 368 | m_BlockingMask: 369 | serializedVersion: 2 370 | m_Bits: 4294967295 371 | --- !u!114 &567165809 372 | MonoBehaviour: 373 | m_ObjectHideFlags: 0 374 | m_CorrespondingSourceObject: {fileID: 0} 375 | m_PrefabInstance: {fileID: 0} 376 | m_PrefabAsset: {fileID: 0} 377 | m_GameObject: {fileID: 567165807} 378 | m_Enabled: 1 379 | m_EditorHideFlags: 0 380 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} 381 | m_Name: 382 | m_EditorClassIdentifier: 383 | m_UiScaleMode: 1 384 | m_ReferencePixelsPerUnit: 100 385 | m_ScaleFactor: 1 386 | m_ReferenceResolution: {x: 1080, y: 1920} 387 | m_ScreenMatchMode: 1 388 | m_MatchWidthOrHeight: 0 389 | m_PhysicalUnit: 3 390 | m_FallbackScreenDPI: 96 391 | m_DefaultSpriteDPI: 96 392 | m_DynamicPixelsPerUnit: 1 393 | --- !u!223 &567165810 394 | Canvas: 395 | m_ObjectHideFlags: 0 396 | m_CorrespondingSourceObject: {fileID: 0} 397 | m_PrefabInstance: {fileID: 0} 398 | m_PrefabAsset: {fileID: 0} 399 | m_GameObject: {fileID: 567165807} 400 | m_Enabled: 1 401 | serializedVersion: 3 402 | m_RenderMode: 1 403 | m_Camera: {fileID: 6991924} 404 | m_PlaneDistance: 100 405 | m_PixelPerfect: 0 406 | m_ReceivesEvents: 1 407 | m_OverrideSorting: 0 408 | m_OverridePixelPerfect: 0 409 | m_SortingBucketNormalizedSize: 0 410 | m_AdditionalShaderChannelsFlag: 0 411 | m_SortingLayerID: 0 412 | m_SortingOrder: 0 413 | m_TargetDisplay: 0 414 | --- !u!224 &567165811 415 | RectTransform: 416 | m_ObjectHideFlags: 0 417 | m_CorrespondingSourceObject: {fileID: 0} 418 | m_PrefabInstance: {fileID: 0} 419 | m_PrefabAsset: {fileID: 0} 420 | m_GameObject: {fileID: 567165807} 421 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 422 | m_LocalPosition: {x: 0, y: 0, z: 0} 423 | m_LocalScale: {x: 0, y: 0, z: 0} 424 | m_Children: 425 | - {fileID: 1903449787} 426 | - {fileID: 586333361} 427 | - {fileID: 2011861367} 428 | m_Father: {fileID: 0} 429 | m_RootOrder: 3 430 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 431 | m_AnchorMin: {x: 0, y: 0} 432 | m_AnchorMax: {x: 0, y: 0} 433 | m_AnchoredPosition: {x: 0, y: 0} 434 | m_SizeDelta: {x: 0, y: 0} 435 | m_Pivot: {x: 0, y: 0} 436 | --- !u!1 &586333360 437 | GameObject: 438 | m_ObjectHideFlags: 0 439 | m_CorrespondingSourceObject: {fileID: 0} 440 | m_PrefabInstance: {fileID: 0} 441 | m_PrefabAsset: {fileID: 0} 442 | serializedVersion: 6 443 | m_Component: 444 | - component: {fileID: 586333361} 445 | - component: {fileID: 586333364} 446 | - component: {fileID: 586333363} 447 | - component: {fileID: 586333362} 448 | m_Layer: 0 449 | m_Name: RestartButton 450 | m_TagString: Untagged 451 | m_Icon: {fileID: 0} 452 | m_NavMeshLayer: 0 453 | m_StaticEditorFlags: 0 454 | m_IsActive: 0 455 | --- !u!224 &586333361 456 | RectTransform: 457 | m_ObjectHideFlags: 0 458 | m_CorrespondingSourceObject: {fileID: 0} 459 | m_PrefabInstance: {fileID: 0} 460 | m_PrefabAsset: {fileID: 0} 461 | m_GameObject: {fileID: 586333360} 462 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 463 | m_LocalPosition: {x: 0, y: 0, z: 0} 464 | m_LocalScale: {x: 1, y: 1, z: 1} 465 | m_Children: 466 | - {fileID: 1485640667} 467 | m_Father: {fileID: 567165811} 468 | m_RootOrder: 1 469 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 470 | m_AnchorMin: {x: 0.5, y: 0.5} 471 | m_AnchorMax: {x: 0.5, y: 0.5} 472 | m_AnchoredPosition: {x: 0, y: -400} 473 | m_SizeDelta: {x: 500, y: 150} 474 | m_Pivot: {x: 0.5, y: 0.5} 475 | --- !u!114 &586333362 476 | MonoBehaviour: 477 | m_ObjectHideFlags: 0 478 | m_CorrespondingSourceObject: {fileID: 0} 479 | m_PrefabInstance: {fileID: 0} 480 | m_PrefabAsset: {fileID: 0} 481 | m_GameObject: {fileID: 586333360} 482 | m_Enabled: 1 483 | m_EditorHideFlags: 0 484 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 485 | m_Name: 486 | m_EditorClassIdentifier: 487 | m_Navigation: 488 | m_Mode: 3 489 | m_SelectOnUp: {fileID: 0} 490 | m_SelectOnDown: {fileID: 0} 491 | m_SelectOnLeft: {fileID: 0} 492 | m_SelectOnRight: {fileID: 0} 493 | m_Transition: 1 494 | m_Colors: 495 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 496 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 497 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 498 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 499 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 500 | m_ColorMultiplier: 1 501 | m_FadeDuration: 0.1 502 | m_SpriteState: 503 | m_HighlightedSprite: {fileID: 0} 504 | m_PressedSprite: {fileID: 0} 505 | m_SelectedSprite: {fileID: 0} 506 | m_DisabledSprite: {fileID: 0} 507 | m_AnimationTriggers: 508 | m_NormalTrigger: Normal 509 | m_HighlightedTrigger: Highlighted 510 | m_PressedTrigger: Pressed 511 | m_SelectedTrigger: Highlighted 512 | m_DisabledTrigger: Disabled 513 | m_Interactable: 1 514 | m_TargetGraphic: {fileID: 586333363} 515 | m_OnClick: 516 | m_PersistentCalls: 517 | m_Calls: 518 | - m_Target: {fileID: 1379276996} 519 | m_MethodName: RestartGame 520 | m_Mode: 1 521 | m_Arguments: 522 | m_ObjectArgument: {fileID: 0} 523 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 524 | m_IntArgument: 0 525 | m_FloatArgument: 0 526 | m_StringArgument: 527 | m_BoolArgument: 0 528 | m_CallState: 2 529 | --- !u!114 &586333363 530 | MonoBehaviour: 531 | m_ObjectHideFlags: 0 532 | m_CorrespondingSourceObject: {fileID: 0} 533 | m_PrefabInstance: {fileID: 0} 534 | m_PrefabAsset: {fileID: 0} 535 | m_GameObject: {fileID: 586333360} 536 | m_Enabled: 1 537 | m_EditorHideFlags: 0 538 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 539 | m_Name: 540 | m_EditorClassIdentifier: 541 | m_Material: {fileID: 0} 542 | m_Color: {r: 0.6901961, g: 0.38431376, b: 0.26666668, a: 1} 543 | m_RaycastTarget: 1 544 | m_Maskable: 1 545 | m_OnCullStateChanged: 546 | m_PersistentCalls: 547 | m_Calls: [] 548 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 549 | m_Type: 1 550 | m_PreserveAspect: 0 551 | m_FillCenter: 1 552 | m_FillMethod: 4 553 | m_FillAmount: 1 554 | m_FillClockwise: 1 555 | m_FillOrigin: 0 556 | m_UseSpriteMesh: 0 557 | m_PixelsPerUnitMultiplier: 1 558 | --- !u!222 &586333364 559 | CanvasRenderer: 560 | m_ObjectHideFlags: 0 561 | m_CorrespondingSourceObject: {fileID: 0} 562 | m_PrefabInstance: {fileID: 0} 563 | m_PrefabAsset: {fileID: 0} 564 | m_GameObject: {fileID: 586333360} 565 | m_CullTransparentMesh: 0 566 | --- !u!1 &1379276995 567 | GameObject: 568 | m_ObjectHideFlags: 0 569 | m_CorrespondingSourceObject: {fileID: 0} 570 | m_PrefabInstance: {fileID: 0} 571 | m_PrefabAsset: {fileID: 0} 572 | serializedVersion: 6 573 | m_Component: 574 | - component: {fileID: 1379276998} 575 | - component: {fileID: 1379276997} 576 | - component: {fileID: 1379276996} 577 | m_Layer: 0 578 | m_Name: GameController 579 | m_TagString: Untagged 580 | m_Icon: {fileID: 0} 581 | m_NavMeshLayer: 0 582 | m_StaticEditorFlags: 0 583 | m_IsActive: 1 584 | --- !u!114 &1379276996 585 | MonoBehaviour: 586 | m_ObjectHideFlags: 0 587 | m_CorrespondingSourceObject: {fileID: 0} 588 | m_PrefabInstance: {fileID: 0} 589 | m_PrefabAsset: {fileID: 0} 590 | m_GameObject: {fileID: 1379276995} 591 | m_Enabled: 1 592 | m_EditorHideFlags: 0 593 | m_Script: {fileID: 11500000, guid: f410efd0de5c58649a242edbe89db084, type: 3} 594 | m_Name: 595 | m_EditorClassIdentifier: 596 | knifeCount: 8 597 | knifeSpawnPosition: {x: 0, y: -3.5} 598 | knifeObject: {fileID: 1619870185730534, guid: abf01071418859d42aff268402fe9d3a, 599 | type: 3} 600 | --- !u!114 &1379276997 601 | MonoBehaviour: 602 | m_ObjectHideFlags: 0 603 | m_CorrespondingSourceObject: {fileID: 0} 604 | m_PrefabInstance: {fileID: 0} 605 | m_PrefabAsset: {fileID: 0} 606 | m_GameObject: {fileID: 1379276995} 607 | m_Enabled: 1 608 | m_EditorHideFlags: 0 609 | m_Script: {fileID: 11500000, guid: 2618f7dffd4a4a71bf271f5bb64ec915, type: 3} 610 | m_Name: 611 | m_EditorClassIdentifier: 612 | restartButtonField: {fileID: 586333360} 613 | panelKnives: {fileID: 2011861366} 614 | iconKnife: {fileID: 1424785169228978, guid: 520e831dd61809f4fa315b4238681697, type: 3} 615 | usedKnifeIconColor: {r: 1, g: 1, b: 1, a: 0.503} 616 | --- !u!4 &1379276998 617 | Transform: 618 | m_ObjectHideFlags: 0 619 | m_CorrespondingSourceObject: {fileID: 0} 620 | m_PrefabInstance: {fileID: 0} 621 | m_PrefabAsset: {fileID: 0} 622 | m_GameObject: {fileID: 1379276995} 623 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 624 | m_LocalPosition: {x: 0.20116082, y: 0.3045786, z: 0.022767741} 625 | m_LocalScale: {x: 1, y: 1, z: 1} 626 | m_Children: [] 627 | m_Father: {fileID: 0} 628 | m_RootOrder: 1 629 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 630 | --- !u!1 &1485640666 631 | GameObject: 632 | m_ObjectHideFlags: 0 633 | m_CorrespondingSourceObject: {fileID: 0} 634 | m_PrefabInstance: {fileID: 0} 635 | m_PrefabAsset: {fileID: 0} 636 | serializedVersion: 6 637 | m_Component: 638 | - component: {fileID: 1485640667} 639 | - component: {fileID: 1485640669} 640 | - component: {fileID: 1485640668} 641 | m_Layer: 0 642 | m_Name: Text 643 | m_TagString: Untagged 644 | m_Icon: {fileID: 0} 645 | m_NavMeshLayer: 0 646 | m_StaticEditorFlags: 0 647 | m_IsActive: 1 648 | --- !u!224 &1485640667 649 | RectTransform: 650 | m_ObjectHideFlags: 0 651 | m_CorrespondingSourceObject: {fileID: 0} 652 | m_PrefabInstance: {fileID: 0} 653 | m_PrefabAsset: {fileID: 0} 654 | m_GameObject: {fileID: 1485640666} 655 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 656 | m_LocalPosition: {x: 0, y: 0, z: 0} 657 | m_LocalScale: {x: 1, y: 1, z: 1} 658 | m_Children: [] 659 | m_Father: {fileID: 586333361} 660 | m_RootOrder: 0 661 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 662 | m_AnchorMin: {x: 0, y: 0} 663 | m_AnchorMax: {x: 1, y: 1} 664 | m_AnchoredPosition: {x: 0, y: 0} 665 | m_SizeDelta: {x: 0, y: 0} 666 | m_Pivot: {x: 0.5, y: 0.5} 667 | --- !u!114 &1485640668 668 | MonoBehaviour: 669 | m_ObjectHideFlags: 0 670 | m_CorrespondingSourceObject: {fileID: 0} 671 | m_PrefabInstance: {fileID: 0} 672 | m_PrefabAsset: {fileID: 0} 673 | m_GameObject: {fileID: 1485640666} 674 | m_Enabled: 1 675 | m_EditorHideFlags: 0 676 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 677 | m_Name: 678 | m_EditorClassIdentifier: 679 | m_Material: {fileID: 0} 680 | m_Color: {r: 0.90196085, g: 0.77647066, b: 0.48627454, a: 1} 681 | m_RaycastTarget: 1 682 | m_Maskable: 1 683 | m_OnCullStateChanged: 684 | m_PersistentCalls: 685 | m_Calls: [] 686 | m_FontData: 687 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 688 | m_FontSize: 100 689 | m_FontStyle: 1 690 | m_BestFit: 0 691 | m_MinSize: 1 692 | m_MaxSize: 100 693 | m_Alignment: 4 694 | m_AlignByGeometry: 0 695 | m_RichText: 1 696 | m_HorizontalOverflow: 0 697 | m_VerticalOverflow: 0 698 | m_LineSpacing: 1 699 | m_Text: Restart 700 | --- !u!222 &1485640669 701 | CanvasRenderer: 702 | m_ObjectHideFlags: 0 703 | m_CorrespondingSourceObject: {fileID: 0} 704 | m_PrefabInstance: {fileID: 0} 705 | m_PrefabAsset: {fileID: 0} 706 | m_GameObject: {fileID: 1485640666} 707 | m_CullTransparentMesh: 0 708 | --- !u!1 &1903449786 709 | GameObject: 710 | m_ObjectHideFlags: 0 711 | m_CorrespondingSourceObject: {fileID: 0} 712 | m_PrefabInstance: {fileID: 0} 713 | m_PrefabAsset: {fileID: 0} 714 | serializedVersion: 6 715 | m_Component: 716 | - component: {fileID: 1903449787} 717 | - component: {fileID: 1903449789} 718 | - component: {fileID: 1903449788} 719 | m_Layer: 0 720 | m_Name: EventSystem 721 | m_TagString: Untagged 722 | m_Icon: {fileID: 0} 723 | m_NavMeshLayer: 0 724 | m_StaticEditorFlags: 0 725 | m_IsActive: 1 726 | --- !u!4 &1903449787 727 | Transform: 728 | m_ObjectHideFlags: 0 729 | m_CorrespondingSourceObject: {fileID: 0} 730 | m_PrefabInstance: {fileID: 0} 731 | m_PrefabAsset: {fileID: 0} 732 | m_GameObject: {fileID: 1903449786} 733 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 734 | m_LocalPosition: {x: 0, y: 0, z: -17280} 735 | m_LocalScale: {x: 192, y: 192, z: 192} 736 | m_Children: [] 737 | m_Father: {fileID: 567165811} 738 | m_RootOrder: 0 739 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 740 | --- !u!114 &1903449788 741 | MonoBehaviour: 742 | m_ObjectHideFlags: 0 743 | m_CorrespondingSourceObject: {fileID: 0} 744 | m_PrefabInstance: {fileID: 0} 745 | m_PrefabAsset: {fileID: 0} 746 | m_GameObject: {fileID: 1903449786} 747 | m_Enabled: 1 748 | m_EditorHideFlags: 0 749 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 750 | m_Name: 751 | m_EditorClassIdentifier: 752 | m_HorizontalAxis: Horizontal 753 | m_VerticalAxis: Vertical 754 | m_SubmitButton: Submit 755 | m_CancelButton: Cancel 756 | m_InputActionsPerSecond: 10 757 | m_RepeatDelay: 0.5 758 | m_ForceModuleActive: 0 759 | --- !u!114 &1903449789 760 | MonoBehaviour: 761 | m_ObjectHideFlags: 0 762 | m_CorrespondingSourceObject: {fileID: 0} 763 | m_PrefabInstance: {fileID: 0} 764 | m_PrefabAsset: {fileID: 0} 765 | m_GameObject: {fileID: 1903449786} 766 | m_Enabled: 1 767 | m_EditorHideFlags: 0 768 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 769 | m_Name: 770 | m_EditorClassIdentifier: 771 | m_FirstSelected: {fileID: 0} 772 | m_sendNavigationEvents: 1 773 | m_DragThreshold: 5 774 | --- !u!1 &1943291405 775 | GameObject: 776 | m_ObjectHideFlags: 0 777 | m_CorrespondingSourceObject: {fileID: 0} 778 | m_PrefabInstance: {fileID: 0} 779 | m_PrefabAsset: {fileID: 0} 780 | serializedVersion: 6 781 | m_Component: 782 | - component: {fileID: 1943291406} 783 | - component: {fileID: 1943291409} 784 | - component: {fileID: 1943291408} 785 | - component: {fileID: 1943291407} 786 | m_Layer: 0 787 | m_Name: log 788 | m_TagString: Log 789 | m_Icon: {fileID: 0} 790 | m_NavMeshLayer: 0 791 | m_StaticEditorFlags: 0 792 | m_IsActive: 1 793 | --- !u!4 &1943291406 794 | Transform: 795 | m_ObjectHideFlags: 0 796 | m_CorrespondingSourceObject: {fileID: 0} 797 | m_PrefabInstance: {fileID: 0} 798 | m_PrefabAsset: {fileID: 0} 799 | m_GameObject: {fileID: 1943291405} 800 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 801 | m_LocalPosition: {x: 0, y: 0, z: 10} 802 | m_LocalScale: {x: 0.2, y: 0.2, z: 0} 803 | m_Children: [] 804 | m_Father: {fileID: 162964440} 805 | m_RootOrder: 0 806 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 807 | --- !u!58 &1943291407 808 | CircleCollider2D: 809 | m_ObjectHideFlags: 0 810 | m_CorrespondingSourceObject: {fileID: 0} 811 | m_PrefabInstance: {fileID: 0} 812 | m_PrefabAsset: {fileID: 0} 813 | m_GameObject: {fileID: 1943291405} 814 | m_Enabled: 1 815 | m_Density: 1 816 | m_Material: {fileID: 0} 817 | m_IsTrigger: 0 818 | m_UsedByEffector: 0 819 | m_UsedByComposite: 0 820 | m_Offset: {x: 0, y: 0} 821 | serializedVersion: 2 822 | m_Radius: 0.75 823 | --- !u!50 &1943291408 824 | Rigidbody2D: 825 | serializedVersion: 4 826 | m_ObjectHideFlags: 0 827 | m_CorrespondingSourceObject: {fileID: 0} 828 | m_PrefabInstance: {fileID: 0} 829 | m_PrefabAsset: {fileID: 0} 830 | m_GameObject: {fileID: 1943291405} 831 | m_BodyType: 0 832 | m_Simulated: 1 833 | m_UseFullKinematicContacts: 0 834 | m_UseAutoMass: 0 835 | m_Mass: 1 836 | m_LinearDrag: 0 837 | m_AngularDrag: 0 838 | m_GravityScale: 0 839 | m_Material: {fileID: 0} 840 | m_Interpolate: 0 841 | m_SleepingMode: 1 842 | m_CollisionDetection: 1 843 | m_Constraints: 3 844 | --- !u!212 &1943291409 845 | SpriteRenderer: 846 | m_ObjectHideFlags: 0 847 | m_CorrespondingSourceObject: {fileID: 0} 848 | m_PrefabInstance: {fileID: 0} 849 | m_PrefabAsset: {fileID: 0} 850 | m_GameObject: {fileID: 1943291405} 851 | m_Enabled: 1 852 | m_CastShadows: 0 853 | m_ReceiveShadows: 0 854 | m_DynamicOccludee: 1 855 | m_MotionVectors: 1 856 | m_LightProbeUsage: 1 857 | m_ReflectionProbeUsage: 1 858 | m_RayTracingMode: 0 859 | m_RenderingLayerMask: 1 860 | m_RendererPriority: 0 861 | m_Materials: 862 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 863 | m_StaticBatchInfo: 864 | firstSubMesh: 0 865 | subMeshCount: 0 866 | m_StaticBatchRoot: {fileID: 0} 867 | m_ProbeAnchor: {fileID: 0} 868 | m_LightProbeVolumeOverride: {fileID: 0} 869 | m_ScaleInLightmap: 1 870 | m_ReceiveGI: 1 871 | m_PreserveUVs: 0 872 | m_IgnoreNormalsForChartDetection: 0 873 | m_ImportantGI: 0 874 | m_StitchLightmapSeams: 0 875 | m_SelectedEditorRenderState: 0 876 | m_MinimumChartSize: 4 877 | m_AutoUVMaxDistance: 0.5 878 | m_AutoUVMaxAngle: 89 879 | m_LightmapParameters: {fileID: 0} 880 | m_SortingLayerID: 0 881 | m_SortingLayer: 0 882 | m_SortingOrder: 1 883 | m_Sprite: {fileID: 21300000, guid: 6fcd0ee7c1f04cc43b6655f345ab21e8, type: 3} 884 | m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} 885 | m_FlipX: 0 886 | m_FlipY: 0 887 | m_DrawMode: 0 888 | m_Size: {x: 2.9333334, y: 2.9333334} 889 | m_AdaptiveModeThreshold: 0.5 890 | m_SpriteTileMode: 0 891 | m_WasSpriteAssigned: 1 892 | m_MaskInteraction: 0 893 | m_SpriteSortPoint: 0 894 | --- !u!1 &2011861366 895 | GameObject: 896 | m_ObjectHideFlags: 0 897 | m_CorrespondingSourceObject: {fileID: 0} 898 | m_PrefabInstance: {fileID: 0} 899 | m_PrefabAsset: {fileID: 0} 900 | serializedVersion: 6 901 | m_Component: 902 | - component: {fileID: 2011861367} 903 | - component: {fileID: 2011861369} 904 | - component: {fileID: 2011861368} 905 | m_Layer: 0 906 | m_Name: PaneKnives 907 | m_TagString: Untagged 908 | m_Icon: {fileID: 0} 909 | m_NavMeshLayer: 0 910 | m_StaticEditorFlags: 0 911 | m_IsActive: 1 912 | --- !u!224 &2011861367 913 | RectTransform: 914 | m_ObjectHideFlags: 0 915 | m_CorrespondingSourceObject: {fileID: 0} 916 | m_PrefabInstance: {fileID: 0} 917 | m_PrefabAsset: {fileID: 0} 918 | m_GameObject: {fileID: 2011861366} 919 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 920 | m_LocalPosition: {x: 0, y: 0, z: 0} 921 | m_LocalScale: {x: 1, y: 1, z: 1} 922 | m_Children: [] 923 | m_Father: {fileID: 567165811} 924 | m_RootOrder: 2 925 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 926 | m_AnchorMin: {x: 0, y: 0} 927 | m_AnchorMax: {x: 0, y: 1} 928 | m_AnchoredPosition: {x: 100, y: 0} 929 | m_SizeDelta: {x: 200, y: -200} 930 | m_Pivot: {x: 0.5, y: 0.5} 931 | --- !u!114 &2011861368 932 | MonoBehaviour: 933 | m_ObjectHideFlags: 0 934 | m_CorrespondingSourceObject: {fileID: 0} 935 | m_PrefabInstance: {fileID: 0} 936 | m_PrefabAsset: {fileID: 0} 937 | m_GameObject: {fileID: 2011861366} 938 | m_Enabled: 1 939 | m_EditorHideFlags: 0 940 | m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} 941 | m_Name: 942 | m_EditorClassIdentifier: 943 | m_Padding: 944 | m_Left: 0 945 | m_Right: 0 946 | m_Top: 0 947 | m_Bottom: 0 948 | m_ChildAlignment: 7 949 | m_Spacing: 0 950 | m_ChildForceExpandWidth: 0 951 | m_ChildForceExpandHeight: 0 952 | m_ChildControlWidth: 0 953 | m_ChildControlHeight: 0 954 | m_ChildScaleWidth: 0 955 | m_ChildScaleHeight: 0 956 | --- !u!222 &2011861369 957 | CanvasRenderer: 958 | m_ObjectHideFlags: 0 959 | m_CorrespondingSourceObject: {fileID: 0} 960 | m_PrefabInstance: {fileID: 0} 961 | m_PrefabAsset: {fileID: 0} 962 | m_GameObject: {fileID: 2011861366} 963 | m_CullTransparentMesh: 0 964 | -------------------------------------------------------------------------------- /Assets/knife_hit.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c058eb3b1af61d347ae4ee7428d691a6 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /ProjectSettings/AndroidResolverDependencies.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | androidx.multidex:multidex:2.0.0 4 | co.pushe.plus:base:2.4.1 5 | co.pushe.plus:hms:2.4.1 6 | co.pushe.plus:inappmessaging:2.4.1 7 | 8 | 9 | Assets/Plugins/Android/androidx.activity.activity-1.1.0.aar 10 | Assets/Plugins/Android/androidx.annotation.annotation-1.1.0.jar 11 | Assets/Plugins/Android/androidx.appcompat.appcompat-1.1.0.aar 12 | Assets/Plugins/Android/androidx.appcompat.appcompat-resources-1.1.0.aar 13 | Assets/Plugins/Android/androidx.arch.core.core-common-2.1.0.jar 14 | Assets/Plugins/Android/androidx.arch.core.core-runtime-2.1.0.aar 15 | Assets/Plugins/Android/androidx.cardview.cardview-1.0.0.aar 16 | Assets/Plugins/Android/androidx.collection.collection-1.1.0.jar 17 | Assets/Plugins/Android/androidx.core.core-1.2.0.aar 18 | Assets/Plugins/Android/androidx.cursoradapter.cursoradapter-1.0.0.aar 19 | Assets/Plugins/Android/androidx.customview.customview-1.0.0.aar 20 | Assets/Plugins/Android/androidx.documentfile.documentfile-1.0.0.aar 21 | Assets/Plugins/Android/androidx.drawerlayout.drawerlayout-1.0.0.aar 22 | Assets/Plugins/Android/androidx.fragment.fragment-1.2.2.aar 23 | Assets/Plugins/Android/androidx.interpolator.interpolator-1.0.0.aar 24 | Assets/Plugins/Android/androidx.legacy.legacy-support-core-utils-1.0.0.aar 25 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-common-2.2.0.jar 26 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-extensions-2.2.0.aar 27 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-2.2.0.aar 28 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-livedata-core-2.2.0.aar 29 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-process-2.2.0.aar 30 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-runtime-2.2.0.aar 31 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-service-2.2.0.aar 32 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-2.2.0.aar 33 | Assets/Plugins/Android/androidx.lifecycle.lifecycle-viewmodel-savedstate-2.2.0.aar 34 | Assets/Plugins/Android/androidx.loader.loader-1.0.0.aar 35 | Assets/Plugins/Android/androidx.localbroadcastmanager.localbroadcastmanager-1.0.0.aar 36 | Assets/Plugins/Android/androidx.media.media-1.1.0.aar 37 | Assets/Plugins/Android/androidx.multidex.multidex-2.0.0.aar 38 | Assets/Plugins/Android/androidx.print.print-1.0.0.aar 39 | Assets/Plugins/Android/androidx.room.room-common-2.2.5.jar 40 | Assets/Plugins/Android/androidx.room.room-runtime-2.2.5.aar 41 | Assets/Plugins/Android/androidx.savedstate.savedstate-1.0.0.aar 42 | Assets/Plugins/Android/androidx.sqlite.sqlite-2.1.0.aar 43 | Assets/Plugins/Android/androidx.sqlite.sqlite-framework-2.1.0.aar 44 | Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-1.1.0.aar 45 | Assets/Plugins/Android/androidx.vectordrawable.vectordrawable-animated-1.1.0.aar 46 | Assets/Plugins/Android/androidx.versionedparcelable.versionedparcelable-1.1.0.aar 47 | Assets/Plugins/Android/androidx.viewpager.viewpager-1.0.0.aar 48 | Assets/Plugins/Android/androidx.work.work-runtime-2.4.0.aar 49 | Assets/Plugins/Android/androidx.work.work-runtime-ktx-2.4.0.aar 50 | Assets/Plugins/Android/androidx.work.work-rxjava2-2.4.0.aar 51 | Assets/Plugins/Android/co.pushe.plus.analytics-2.4.1.aar 52 | Assets/Plugins/Android/co.pushe.plus.base-2.4.1.aar 53 | Assets/Plugins/Android/co.pushe.plus.core-2.4.1.aar 54 | Assets/Plugins/Android/co.pushe.plus.datalytics-2.4.1.aar 55 | Assets/Plugins/Android/co.pushe.plus.fcm-2.4.1.aar 56 | Assets/Plugins/Android/co.pushe.plus.hms-2.4.1.aar 57 | Assets/Plugins/Android/co.pushe.plus.inappmessaging-2.4.1.aar 58 | Assets/Plugins/Android/co.pushe.plus.notification-2.4.1.aar 59 | Assets/Plugins/Android/co.pushe.plus.sentry-2.4.1.aar 60 | Assets/Plugins/Android/com.fasterxml.jackson.core.jackson-core-2.8.7.jar 61 | Assets/Plugins/Android/com.google.android.datatransport.transport-api-2.2.0.aar 62 | Assets/Plugins/Android/com.google.android.datatransport.transport-backend-cct-2.2.0.aar 63 | Assets/Plugins/Android/com.google.android.datatransport.transport-runtime-2.2.0.aar 64 | Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-17.0.0.aar 65 | Assets/Plugins/Android/com.google.android.gms.play-services-base-17.3.0.aar 66 | Assets/Plugins/Android/com.google.android.gms.play-services-basement-17.3.0.aar 67 | Assets/Plugins/Android/com.google.android.gms.play-services-cloud-messaging-16.0.0.aar 68 | Assets/Plugins/Android/com.google.android.gms.play-services-location-17.1.0.aar 69 | Assets/Plugins/Android/com.google.android.gms.play-services-places-placereport-17.0.0.aar 70 | Assets/Plugins/Android/com.google.android.gms.play-services-stats-17.0.0.aar 71 | Assets/Plugins/Android/com.google.android.gms.play-services-tasks-17.1.0.aar 72 | Assets/Plugins/Android/com.google.auto.value.auto-value-annotations-1.6.5.jar 73 | Assets/Plugins/Android/com.google.dagger.dagger-2.27.jar 74 | Assets/Plugins/Android/com.google.firebase.firebase-common-19.3.0.aar 75 | Assets/Plugins/Android/com.google.firebase.firebase-components-16.0.0.aar 76 | Assets/Plugins/Android/com.google.firebase.firebase-datatransport-17.0.3.aar 77 | Assets/Plugins/Android/com.google.firebase.firebase-encoders-json-16.0.0.aar 78 | Assets/Plugins/Android/com.google.firebase.firebase-iid-21.0.0.aar 79 | Assets/Plugins/Android/com.google.firebase.firebase-iid-interop-17.0.0.aar 80 | Assets/Plugins/Android/com.google.firebase.firebase-installations-16.3.3.aar 81 | Assets/Plugins/Android/com.google.firebase.firebase-installations-interop-16.0.0.aar 82 | Assets/Plugins/Android/com.google.firebase.firebase-measurement-connector-18.0.0.aar 83 | Assets/Plugins/Android/com.google.firebase.firebase-messaging-21.0.0.aar 84 | Assets/Plugins/Android/com.google.guava.listenablefuture-1.0.jar 85 | Assets/Plugins/Android/com.huawei.agconnect.agconnect-core-1.4.0.300.aar 86 | Assets/Plugins/Android/com.huawei.android.hms.security-base-1.1.5.301.aar 87 | Assets/Plugins/Android/com.huawei.android.hms.security-encrypt-1.1.5.301.aar 88 | Assets/Plugins/Android/com.huawei.android.hms.security-ssl-1.1.5.301.aar 89 | Assets/Plugins/Android/com.huawei.hmf.tasks-1.4.1.300.aar 90 | Assets/Plugins/Android/com.huawei.hms.ads-identifier-3.4.29.301.aar 91 | Assets/Plugins/Android/com.huawei.hms.availableupdate-5.0.0.301.aar 92 | Assets/Plugins/Android/com.huawei.hms.base-5.0.0.301.aar 93 | Assets/Plugins/Android/com.huawei.hms.device-5.0.0.301.aar 94 | Assets/Plugins/Android/com.huawei.hms.log-5.0.0.301.aar 95 | Assets/Plugins/Android/com.huawei.hms.network-common-4.0.2.300.aar 96 | Assets/Plugins/Android/com.huawei.hms.network-grs-4.0.2.300.aar 97 | Assets/Plugins/Android/com.huawei.hms.opendevice-5.0.2.300.aar 98 | Assets/Plugins/Android/com.huawei.hms.push-5.0.2.300.aar 99 | Assets/Plugins/Android/com.huawei.hms.stats-5.0.0.301.aar 100 | Assets/Plugins/Android/com.huawei.hms.ui-5.0.0.301.aar 101 | Assets/Plugins/Android/com.huawei.hms.update-2.0.6.302.aar 102 | Assets/Plugins/Android/com.squareup.moshi.moshi-1.7.0.jar 103 | Assets/Plugins/Android/com.squareup.okio.okio-1.15.0.jar 104 | Assets/Plugins/Android/io.reactivex.rxjava2.rxjava-2.2.20.jar 105 | Assets/Plugins/Android/io.sentry.sentry-1.7.10.jar 106 | Assets/Plugins/Android/io.sentry.sentry-android-1.7.10.jar 107 | Assets/Plugins/Android/javax.inject.javax.inject-1.jar 108 | Assets/Plugins/Android/org.jetbrains.annotations-13.0.jar 109 | Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-android-extensions-runtime-1.3.61.jar 110 | Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-1.3.71.jar 111 | Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-common-1.3.71.jar 112 | Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.3.61.jar 113 | Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.3.4.jar 114 | Assets/Plugins/Android/org.jetbrains.kotlinx.kotlinx-coroutines-core-1.3.4.jar 115 | Assets/Plugins/Android/org.reactivestreams.reactive-streams-1.0.3.jar 116 | Assets/Plugins/Android/org.slf4j.slf4j-api-1.7.25.jar 117 | Assets/Plugins/Android/org.slf4j.slf4j-simple-1.7.25.jar 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 1 23 | m_ClothInterCollisionSettingsToggle: 0 24 | m_ContactPairsMode: 0 25 | m_BroadphaseType: 0 26 | m_WorldBounds: 27 | m_Center: {x: 0, y: 0, z: 0} 28 | m_Extent: {x: 250, y: 250, z: 250} 29 | m_WorldSubdivisions: 8 30 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Hidden Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 1 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 4 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 1 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0} 41 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 42 | m_PreloadedShaders: [] 43 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 44 | type: 0} 45 | m_CustomRenderPipeline: {fileID: 0} 46 | m_TransparencySortMode: 0 47 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 48 | m_DefaultRenderingPath: 1 49 | m_DefaultMobileRenderingPath: 1 50 | m_TierSettings: [] 51 | m_LightmapStripping: 0 52 | m_FogStripping: 0 53 | m_InstancingStripping: 0 54 | m_LightmapKeepPlain: 1 55 | m_LightmapKeepDirCombined: 1 56 | m_LightmapKeepDynamicPlain: 1 57 | m_LightmapKeepDynamicDirCombined: 1 58 | m_LightmapKeepShadowMask: 1 59 | m_LightmapKeepSubtractive: 1 60 | m_FogKeepLinear: 1 61 | m_FogKeepExp: 1 62 | m_FogKeepExp2: 1 63 | m_AlbedoSwatchInfos: [] 64 | m_LightsUseLinearIntensity: 0 65 | m_LightsUseColorTemperature: 0 66 | m_LogWhenShaderIsCompiled: 0 67 | m_AllowEnlightenSupportForUpgradedProject: 1 68 | -------------------------------------------------------------------------------- /ProjectSettings/GvhProjectSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13960, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_ScopedRegistriesSettingsExpanded: 1 16 | oneTimeWarningShown: 0 17 | m_Registries: 18 | - m_Id: main 19 | m_Name: 20 | m_Url: https://packages.unity.com 21 | m_Scopes: [] 22 | m_IsDefault: 1 23 | m_UserSelectedRegistryName: 24 | m_UserAddingNewScopedRegistry: 0 25 | m_RegistryInfoDraft: 26 | m_ErrorMessage: 27 | m_Original: 28 | m_Id: 29 | m_Name: 30 | m_Url: 31 | m_Scopes: [] 32 | m_IsDefault: 0 33 | m_Modified: 0 34 | m_Name: 35 | m_Url: 36 | m_Scopes: 37 | - 38 | m_SelectedScopeIndex: 0 39 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_AutoSyncTransforms: 1 28 | m_AlwaysShowColliders: 0 29 | m_ShowColliderSleep: 1 30 | m_ShowColliderContacts: 0 31 | m_ShowColliderAABB: 0 32 | m_ContactArrowScale: 0.2 33 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 34 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 35 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 36 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 37 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 38 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: c9125d2efa68f514ba4489d8fb77c1e8 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: KnifeHitTest 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosUseCustomAppBackgroundBehavior: 0 56 | iosAllowHTTPDownload: 1 57 | allowedAutorotateToPortrait: 1 58 | allowedAutorotateToPortraitUpsideDown: 1 59 | allowedAutorotateToLandscapeRight: 1 60 | allowedAutorotateToLandscapeLeft: 1 61 | useOSAutorotation: 1 62 | use32BitDisplayBuffer: 1 63 | preserveFramebufferAlpha: 0 64 | disableDepthAndStencilBuffers: 0 65 | androidStartInFullscreen: 1 66 | androidRenderOutsideSafeArea: 1 67 | androidUseSwappy: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 0 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | useFlipModelSwapchain: 1 83 | resizableWindow: 0 84 | useMacAppStoreValidation: 0 85 | macAppStoreCategory: public.app-category.games 86 | gpuSkinning: 0 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | fullscreenMode: 1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | xboxOneResolution: 0 101 | xboxOneSResolution: 0 102 | xboxOneXResolution: 3 103 | xboxOneMonoLoggingLevel: 0 104 | xboxOneLoggingLevel: 1 105 | xboxOneDisableEsram: 0 106 | xboxOneEnableTypeOptimization: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 1048576 109 | switchQueueControlMemory: 16384 110 | switchQueueComputeMemory: 262144 111 | switchNVNShaderPoolsGranularity: 33554432 112 | switchNVNDefaultPoolsGranularity: 16777216 113 | switchNVNOtherPoolsGranularity: 16777216 114 | switchNVNMaxPublicTextureIDCount: 0 115 | switchNVNMaxPublicSamplerIDCount: 0 116 | stadiaPresentMode: 0 117 | stadiaTargetFramerate: 0 118 | vulkanNumSwapchainBuffers: 3 119 | vulkanEnableSetSRGBWrite: 0 120 | vulkanEnableLateAcquireNextImage: 0 121 | m_SupportedAspectRatios: 122 | 4:3: 1 123 | 5:4: 1 124 | 16:10: 1 125 | 16:9: 1 126 | Others: 1 127 | bundleVersion: 1.0 128 | preloadedAssets: [] 129 | metroInputSource: 0 130 | wsaTransparentSwapchain: 0 131 | m_HolographicPauseOnTrackingLoss: 1 132 | xboxOneDisableKinectGpuReservation: 0 133 | xboxOneEnable7thCore: 0 134 | vrSettings: 135 | cardboard: 136 | depthFormat: 0 137 | enableTransitionView: 0 138 | daydream: 139 | depthFormat: 0 140 | useSustainedPerformanceMode: 0 141 | enableVideoLayer: 0 142 | useProtectedVideoMemory: 0 143 | minimumSupportedHeadTracking: 0 144 | maximumSupportedHeadTracking: 1 145 | hololens: 146 | depthFormat: 1 147 | depthBufferSharingEnabled: 0 148 | lumin: 149 | depthFormat: 0 150 | frameTiming: 2 151 | enableGLCache: 0 152 | glCacheMaxBlobSize: 524288 153 | glCacheMaxFileSize: 8388608 154 | oculus: 155 | sharedDepthBuffer: 0 156 | dashSupport: 0 157 | lowOverheadMode: 0 158 | protectedContext: 0 159 | v2Signing: 0 160 | enable360StereoCapture: 0 161 | isWsaHolographicRemotingEnabled: 0 162 | enableFrameTimingStats: 0 163 | useHDRDisplay: 0 164 | D3DHDRBitDepth: 0 165 | m_ColorGamuts: 00000000 166 | targetPixelDensity: 30 167 | resolutionScalingMode: 0 168 | androidSupportedAspectRatio: 1 169 | androidMaxAspectRatio: 2.1 170 | applicationIdentifier: 171 | Android: co.pushe.sample.unity 172 | buildNumber: {} 173 | AndroidBundleVersionCode: 1 174 | AndroidMinSdkVersion: 19 175 | AndroidTargetSdkVersion: 0 176 | AndroidPreferredInstallLocation: 1 177 | aotOptions: 178 | stripEngineCode: 1 179 | iPhoneStrippingLevel: 0 180 | iPhoneScriptCallOptimization: 0 181 | ForceInternetPermission: 0 182 | ForceSDCardPermission: 0 183 | CreateWallpaper: 0 184 | APKExpansionFiles: 0 185 | keepLoadedShadersAlive: 0 186 | StripUnusedMeshComponents: 0 187 | VertexChannelCompressionMask: 4054 188 | iPhoneSdkVersion: 988 189 | iOSTargetOSVersionString: 10.0 190 | tvOSSdkVersion: 0 191 | tvOSRequireExtendedGameController: 0 192 | tvOSTargetOSVersionString: 10.0 193 | uIPrerenderedIcon: 0 194 | uIRequiresPersistentWiFi: 0 195 | uIRequiresFullScreen: 1 196 | uIStatusBarHidden: 1 197 | uIExitOnSuspend: 0 198 | uIStatusBarStyle: 0 199 | appleTVSplashScreen: {fileID: 0} 200 | appleTVSplashScreen2x: {fileID: 0} 201 | tvOSSmallIconLayers: [] 202 | tvOSSmallIconLayers2x: [] 203 | tvOSLargeIconLayers: [] 204 | tvOSLargeIconLayers2x: [] 205 | tvOSTopShelfImageLayers: [] 206 | tvOSTopShelfImageLayers2x: [] 207 | tvOSTopShelfImageWideLayers: [] 208 | tvOSTopShelfImageWideLayers2x: [] 209 | iOSLaunchScreenType: 0 210 | iOSLaunchScreenPortrait: {fileID: 0} 211 | iOSLaunchScreenLandscape: {fileID: 0} 212 | iOSLaunchScreenBackgroundColor: 213 | serializedVersion: 2 214 | rgba: 0 215 | iOSLaunchScreenFillPct: 100 216 | iOSLaunchScreenSize: 100 217 | iOSLaunchScreenCustomXibPath: 218 | iOSLaunchScreeniPadType: 0 219 | iOSLaunchScreeniPadImage: {fileID: 0} 220 | iOSLaunchScreeniPadBackgroundColor: 221 | serializedVersion: 2 222 | rgba: 0 223 | iOSLaunchScreeniPadFillPct: 100 224 | iOSLaunchScreeniPadSize: 100 225 | iOSLaunchScreeniPadCustomXibPath: 226 | iOSUseLaunchScreenStoryboard: 0 227 | iOSLaunchScreenCustomStoryboardPath: 228 | iOSDeviceRequirements: [] 229 | iOSURLSchemes: [] 230 | iOSBackgroundModes: 0 231 | iOSMetalForceHardShadows: 0 232 | metalEditorSupport: 1 233 | metalAPIValidation: 1 234 | iOSRenderExtraFrameOnPause: 0 235 | iosCopyPluginsCodeInsteadOfSymlink: 0 236 | appleDeveloperTeamID: 237 | iOSManualSigningProvisioningProfileID: 238 | tvOSManualSigningProvisioningProfileID: 239 | iOSManualSigningProvisioningProfileType: 0 240 | tvOSManualSigningProvisioningProfileType: 0 241 | appleEnableAutomaticSigning: 0 242 | iOSRequireARKit: 0 243 | iOSAutomaticallyDetectAndAddCapabilities: 1 244 | appleEnableProMotion: 0 245 | clonedFromGUID: 00000000000000000000000000000000 246 | templatePackageId: 247 | templateDefaultScene: 248 | AndroidTargetArchitectures: 5 249 | AndroidSplashScreenScale: 0 250 | androidSplashScreen: {fileID: 0} 251 | AndroidKeystoreName: 252 | AndroidKeyaliasName: 253 | AndroidBuildApkPerCpuArchitecture: 0 254 | AndroidTVCompatibility: 1 255 | AndroidIsGame: 1 256 | AndroidEnableTango: 0 257 | androidEnableBanner: 1 258 | androidUseLowAccuracyLocation: 0 259 | androidUseCustomKeystore: 0 260 | m_AndroidBanners: 261 | - width: 320 262 | height: 180 263 | banner: {fileID: 0} 264 | androidGamepadSupportLevel: 0 265 | AndroidValidateAppBundleSize: 1 266 | AndroidAppBundleSizeToValidate: 150 267 | m_BuildTargetIcons: [] 268 | m_BuildTargetPlatformIcons: 269 | - m_BuildTarget: Android 270 | m_Icons: 271 | - m_Textures: [] 272 | m_Width: 432 273 | m_Height: 432 274 | m_Kind: 2 275 | m_SubKind: 276 | - m_Textures: [] 277 | m_Width: 324 278 | m_Height: 324 279 | m_Kind: 2 280 | m_SubKind: 281 | - m_Textures: [] 282 | m_Width: 216 283 | m_Height: 216 284 | m_Kind: 2 285 | m_SubKind: 286 | - m_Textures: [] 287 | m_Width: 162 288 | m_Height: 162 289 | m_Kind: 2 290 | m_SubKind: 291 | - m_Textures: [] 292 | m_Width: 108 293 | m_Height: 108 294 | m_Kind: 2 295 | m_SubKind: 296 | - m_Textures: [] 297 | m_Width: 81 298 | m_Height: 81 299 | m_Kind: 2 300 | m_SubKind: 301 | - m_Textures: [] 302 | m_Width: 192 303 | m_Height: 192 304 | m_Kind: 0 305 | m_SubKind: 306 | - m_Textures: [] 307 | m_Width: 144 308 | m_Height: 144 309 | m_Kind: 0 310 | m_SubKind: 311 | - m_Textures: [] 312 | m_Width: 96 313 | m_Height: 96 314 | m_Kind: 0 315 | m_SubKind: 316 | - m_Textures: [] 317 | m_Width: 72 318 | m_Height: 72 319 | m_Kind: 0 320 | m_SubKind: 321 | - m_Textures: [] 322 | m_Width: 48 323 | m_Height: 48 324 | m_Kind: 0 325 | m_SubKind: 326 | - m_Textures: [] 327 | m_Width: 36 328 | m_Height: 36 329 | m_Kind: 0 330 | m_SubKind: 331 | - m_Textures: [] 332 | m_Width: 192 333 | m_Height: 192 334 | m_Kind: 1 335 | m_SubKind: 336 | - m_Textures: [] 337 | m_Width: 144 338 | m_Height: 144 339 | m_Kind: 1 340 | m_SubKind: 341 | - m_Textures: [] 342 | m_Width: 96 343 | m_Height: 96 344 | m_Kind: 1 345 | m_SubKind: 346 | - m_Textures: [] 347 | m_Width: 72 348 | m_Height: 72 349 | m_Kind: 1 350 | m_SubKind: 351 | - m_Textures: [] 352 | m_Width: 48 353 | m_Height: 48 354 | m_Kind: 1 355 | m_SubKind: 356 | - m_Textures: [] 357 | m_Width: 36 358 | m_Height: 36 359 | m_Kind: 1 360 | m_SubKind: 361 | m_BuildTargetBatching: [] 362 | m_BuildTargetGraphicsJobs: 363 | - m_BuildTarget: MacStandaloneSupport 364 | m_GraphicsJobs: 0 365 | - m_BuildTarget: Switch 366 | m_GraphicsJobs: 0 367 | - m_BuildTarget: MetroSupport 368 | m_GraphicsJobs: 0 369 | - m_BuildTarget: AppleTVSupport 370 | m_GraphicsJobs: 0 371 | - m_BuildTarget: BJMSupport 372 | m_GraphicsJobs: 0 373 | - m_BuildTarget: LinuxStandaloneSupport 374 | m_GraphicsJobs: 0 375 | - m_BuildTarget: PS4Player 376 | m_GraphicsJobs: 0 377 | - m_BuildTarget: iOSSupport 378 | m_GraphicsJobs: 0 379 | - m_BuildTarget: WindowsStandaloneSupport 380 | m_GraphicsJobs: 0 381 | - m_BuildTarget: XboxOnePlayer 382 | m_GraphicsJobs: 0 383 | - m_BuildTarget: LuminSupport 384 | m_GraphicsJobs: 0 385 | - m_BuildTarget: CloudRendering 386 | m_GraphicsJobs: 0 387 | - m_BuildTarget: AndroidPlayer 388 | m_GraphicsJobs: 0 389 | - m_BuildTarget: WebGLSupport 390 | m_GraphicsJobs: 0 391 | m_BuildTargetGraphicsJobMode: 392 | - m_BuildTarget: PS4Player 393 | m_GraphicsJobMode: 0 394 | - m_BuildTarget: XboxOnePlayer 395 | m_GraphicsJobMode: 0 396 | m_BuildTargetGraphicsAPIs: [] 397 | m_BuildTargetVRSettings: [] 398 | openGLRequireES31: 0 399 | openGLRequireES31AEP: 0 400 | openGLRequireES32: 0 401 | m_TemplateCustomTags: {} 402 | mobileMTRendering: 403 | Android: 1 404 | iPhone: 1 405 | tvOS: 1 406 | m_BuildTargetGroupLightmapEncodingQuality: [] 407 | m_BuildTargetGroupLightmapSettings: [] 408 | playModeTestRunnerEnabled: 0 409 | runPlayModeTestAsEditModeTest: 0 410 | actionOnDotNetUnhandledException: 1 411 | enableInternalProfiler: 0 412 | logObjCUncaughtExceptions: 1 413 | enableCrashReportAPI: 0 414 | cameraUsageDescription: 415 | locationUsageDescription: 416 | microphoneUsageDescription: 417 | switchNetLibKey: 418 | switchSocketMemoryPoolSize: 6144 419 | switchSocketAllocatorPoolSize: 128 420 | switchSocketConcurrencyLimit: 14 421 | switchScreenResolutionBehavior: 2 422 | switchUseCPUProfiler: 0 423 | switchApplicationID: 0x01004b9000490000 424 | switchNSODependencies: 425 | switchTitleNames_0: 426 | switchTitleNames_1: 427 | switchTitleNames_2: 428 | switchTitleNames_3: 429 | switchTitleNames_4: 430 | switchTitleNames_5: 431 | switchTitleNames_6: 432 | switchTitleNames_7: 433 | switchTitleNames_8: 434 | switchTitleNames_9: 435 | switchTitleNames_10: 436 | switchTitleNames_11: 437 | switchTitleNames_12: 438 | switchTitleNames_13: 439 | switchTitleNames_14: 440 | switchPublisherNames_0: 441 | switchPublisherNames_1: 442 | switchPublisherNames_2: 443 | switchPublisherNames_3: 444 | switchPublisherNames_4: 445 | switchPublisherNames_5: 446 | switchPublisherNames_6: 447 | switchPublisherNames_7: 448 | switchPublisherNames_8: 449 | switchPublisherNames_9: 450 | switchPublisherNames_10: 451 | switchPublisherNames_11: 452 | switchPublisherNames_12: 453 | switchPublisherNames_13: 454 | switchPublisherNames_14: 455 | switchIcons_0: {fileID: 0} 456 | switchIcons_1: {fileID: 0} 457 | switchIcons_2: {fileID: 0} 458 | switchIcons_3: {fileID: 0} 459 | switchIcons_4: {fileID: 0} 460 | switchIcons_5: {fileID: 0} 461 | switchIcons_6: {fileID: 0} 462 | switchIcons_7: {fileID: 0} 463 | switchIcons_8: {fileID: 0} 464 | switchIcons_9: {fileID: 0} 465 | switchIcons_10: {fileID: 0} 466 | switchIcons_11: {fileID: 0} 467 | switchIcons_12: {fileID: 0} 468 | switchIcons_13: {fileID: 0} 469 | switchIcons_14: {fileID: 0} 470 | switchSmallIcons_0: {fileID: 0} 471 | switchSmallIcons_1: {fileID: 0} 472 | switchSmallIcons_2: {fileID: 0} 473 | switchSmallIcons_3: {fileID: 0} 474 | switchSmallIcons_4: {fileID: 0} 475 | switchSmallIcons_5: {fileID: 0} 476 | switchSmallIcons_6: {fileID: 0} 477 | switchSmallIcons_7: {fileID: 0} 478 | switchSmallIcons_8: {fileID: 0} 479 | switchSmallIcons_9: {fileID: 0} 480 | switchSmallIcons_10: {fileID: 0} 481 | switchSmallIcons_11: {fileID: 0} 482 | switchSmallIcons_12: {fileID: 0} 483 | switchSmallIcons_13: {fileID: 0} 484 | switchSmallIcons_14: {fileID: 0} 485 | switchManualHTML: 486 | switchAccessibleURLs: 487 | switchLegalInformation: 488 | switchMainThreadStackSize: 1048576 489 | switchPresenceGroupId: 490 | switchLogoHandling: 0 491 | switchReleaseVersion: 0 492 | switchDisplayVersion: 1.0.0 493 | switchStartupUserAccount: 0 494 | switchTouchScreenUsage: 0 495 | switchSupportedLanguagesMask: 0 496 | switchLogoType: 0 497 | switchApplicationErrorCodeCategory: 498 | switchUserAccountSaveDataSize: 0 499 | switchUserAccountSaveDataJournalSize: 0 500 | switchApplicationAttribute: 0 501 | switchCardSpecSize: -1 502 | switchCardSpecClock: -1 503 | switchRatingsMask: 0 504 | switchRatingsInt_0: 0 505 | switchRatingsInt_1: 0 506 | switchRatingsInt_2: 0 507 | switchRatingsInt_3: 0 508 | switchRatingsInt_4: 0 509 | switchRatingsInt_5: 0 510 | switchRatingsInt_6: 0 511 | switchRatingsInt_7: 0 512 | switchRatingsInt_8: 0 513 | switchRatingsInt_9: 0 514 | switchRatingsInt_10: 0 515 | switchRatingsInt_11: 0 516 | switchRatingsInt_12: 0 517 | switchLocalCommunicationIds_0: 518 | switchLocalCommunicationIds_1: 519 | switchLocalCommunicationIds_2: 520 | switchLocalCommunicationIds_3: 521 | switchLocalCommunicationIds_4: 522 | switchLocalCommunicationIds_5: 523 | switchLocalCommunicationIds_6: 524 | switchLocalCommunicationIds_7: 525 | switchParentalControl: 0 526 | switchAllowsScreenshot: 1 527 | switchAllowsVideoCapturing: 1 528 | switchAllowsRuntimeAddOnContentInstall: 0 529 | switchDataLossConfirmation: 0 530 | switchUserAccountLockEnabled: 0 531 | switchSystemResourceMemory: 16777216 532 | switchSupportedNpadStyles: 3 533 | switchNativeFsCacheSize: 32 534 | switchIsHoldTypeHorizontal: 0 535 | switchSupportedNpadCount: 8 536 | switchSocketConfigEnabled: 0 537 | switchTcpInitialSendBufferSize: 32 538 | switchTcpInitialReceiveBufferSize: 64 539 | switchTcpAutoSendBufferSizeMax: 256 540 | switchTcpAutoReceiveBufferSizeMax: 256 541 | switchUdpSendBufferSize: 9 542 | switchUdpReceiveBufferSize: 42 543 | switchSocketBufferEfficiency: 4 544 | switchSocketInitializeEnabled: 1 545 | switchNetworkInterfaceManagerInitializeEnabled: 1 546 | switchPlayerConnectionEnabled: 1 547 | ps4NPAgeRating: 12 548 | ps4NPTitleSecret: 549 | ps4NPTrophyPackPath: 550 | ps4ParentalLevel: 11 551 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 552 | ps4Category: 0 553 | ps4MasterVersion: 01.00 554 | ps4AppVersion: 01.00 555 | ps4AppType: 0 556 | ps4ParamSfxPath: 557 | ps4VideoOutPixelFormat: 0 558 | ps4VideoOutInitialWidth: 1920 559 | ps4VideoOutBaseModeInitialWidth: 1920 560 | ps4VideoOutReprojectionRate: 60 561 | ps4PronunciationXMLPath: 562 | ps4PronunciationSIGPath: 563 | ps4BackgroundImagePath: 564 | ps4StartupImagePath: 565 | ps4StartupImagesFolder: 566 | ps4IconImagesFolder: 567 | ps4SaveDataImagePath: 568 | ps4SdkOverride: 569 | ps4BGMPath: 570 | ps4ShareFilePath: 571 | ps4ShareOverlayImagePath: 572 | ps4PrivacyGuardImagePath: 573 | ps4ExtraSceSysFile: 574 | ps4NPtitleDatPath: 575 | ps4RemotePlayKeyAssignment: -1 576 | ps4RemotePlayKeyMappingDir: 577 | ps4PlayTogetherPlayerCount: 0 578 | ps4EnterButtonAssignment: 1 579 | ps4ApplicationParam1: 0 580 | ps4ApplicationParam2: 0 581 | ps4ApplicationParam3: 0 582 | ps4ApplicationParam4: 0 583 | ps4DownloadDataSize: 0 584 | ps4GarlicHeapSize: 2048 585 | ps4ProGarlicHeapSize: 2560 586 | playerPrefsMaxSize: 32768 587 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 588 | ps4pnSessions: 1 589 | ps4pnPresence: 1 590 | ps4pnFriends: 1 591 | ps4pnGameCustomData: 1 592 | playerPrefsSupport: 0 593 | enableApplicationExit: 0 594 | resetTempFolder: 1 595 | restrictedAudioUsageRights: 0 596 | ps4UseResolutionFallback: 0 597 | ps4ReprojectionSupport: 0 598 | ps4UseAudio3dBackend: 0 599 | ps4UseLowGarlicFragmentationMode: 1 600 | ps4SocialScreenEnabled: 0 601 | ps4ScriptOptimizationLevel: 0 602 | ps4Audio3dVirtualSpeakerCount: 14 603 | ps4attribCpuUsage: 0 604 | ps4PatchPkgPath: 605 | ps4PatchLatestPkgPath: 606 | ps4PatchChangeinfoPath: 607 | ps4PatchDayOne: 0 608 | ps4attribUserManagement: 0 609 | ps4attribMoveSupport: 0 610 | ps4attrib3DSupport: 0 611 | ps4attribShareSupport: 0 612 | ps4attribExclusiveVR: 0 613 | ps4disableAutoHideSplash: 0 614 | ps4videoRecordingFeaturesUsed: 0 615 | ps4contentSearchFeaturesUsed: 0 616 | ps4CompatibilityPS5: 0 617 | ps4GPU800MHz: 1 618 | ps4attribEyeToEyeDistanceSettingVR: 0 619 | ps4IncludedModules: [] 620 | ps4attribVROutputEnabled: 0 621 | monoEnv: 622 | splashScreenBackgroundSourceLandscape: {fileID: 0} 623 | splashScreenBackgroundSourcePortrait: {fileID: 0} 624 | blurSplashScreenBackground: 1 625 | spritePackerPolicy: 626 | webGLMemorySize: 256 627 | webGLExceptionSupport: 1 628 | webGLNameFilesAsHashes: 0 629 | webGLDataCaching: 0 630 | webGLDebugSymbols: 0 631 | webGLEmscriptenArgs: 632 | webGLModulesDirectory: 633 | webGLTemplate: APPLICATION:Default 634 | webGLAnalyzeBuildSize: 0 635 | webGLUseEmbeddedResources: 0 636 | webGLCompressionFormat: 1 637 | webGLLinkerTarget: 1 638 | webGLThreadsSupport: 0 639 | webGLWasmStreaming: 0 640 | scriptingDefineSymbols: {} 641 | platformArchitecture: {} 642 | scriptingBackend: {} 643 | il2cppCompilerConfiguration: {} 644 | managedStrippingLevel: {} 645 | incrementalIl2cppBuild: {} 646 | allowUnsafeCode: 0 647 | additionalIl2CppArgs: 648 | scriptingRuntimeVersion: 1 649 | gcIncremental: 0 650 | gcWBarrierValidation: 0 651 | apiCompatibilityLevelPerPlatform: {} 652 | m_RenderingPath: 1 653 | m_MobileRenderingPath: 1 654 | metroPackageName: KnifeHitTest 655 | metroPackageVersion: 656 | metroCertificatePath: 657 | metroCertificatePassword: 658 | metroCertificateSubject: 659 | metroCertificateIssuer: 660 | metroCertificateNotAfter: 0000000000000000 661 | metroApplicationDescription: KnifeHitTest 662 | wsaImages: {} 663 | metroTileShortName: 664 | metroTileShowName: 0 665 | metroMediumTileShowName: 0 666 | metroLargeTileShowName: 0 667 | metroWideTileShowName: 0 668 | metroSupportStreamingInstall: 0 669 | metroLastRequiredScene: 0 670 | metroDefaultTileSize: 1 671 | metroTileForegroundText: 2 672 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 673 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 674 | a: 1} 675 | metroSplashScreenUseBackgroundColor: 0 676 | platformCapabilities: {} 677 | metroTargetDeviceFamilies: {} 678 | metroFTAName: 679 | metroFTAFileTypes: [] 680 | metroProtocolName: 681 | XboxOneProductId: 682 | XboxOneUpdateKey: 683 | XboxOneSandboxId: 684 | XboxOneContentId: 685 | XboxOneTitleId: 686 | XboxOneSCId: 687 | XboxOneGameOsOverridePath: 688 | XboxOnePackagingOverridePath: 689 | XboxOneAppManifestOverridePath: 690 | XboxOneVersion: 1.0.0.0 691 | XboxOnePackageEncryption: 0 692 | XboxOnePackageUpdateGranularity: 2 693 | XboxOneDescription: 694 | XboxOneLanguage: 695 | - enus 696 | XboxOneCapability: [] 697 | XboxOneGameRating: {} 698 | XboxOneIsContentPackage: 0 699 | XboxOneEnableGPUVariability: 0 700 | XboxOneSockets: {} 701 | XboxOneSplashScreen: {fileID: 0} 702 | XboxOneAllowedProductIds: [] 703 | XboxOnePersistentLocalStorageSize: 0 704 | XboxOneXTitleMemory: 8 705 | XboxOneOverrideIdentityName: 706 | XboxOneOverrideIdentityPublisher: 707 | vrEditorSettings: 708 | daydream: 709 | daydreamIconForeground: {fileID: 0} 710 | daydreamIconBackground: {fileID: 0} 711 | cloudServicesEnabled: {} 712 | luminIcon: 713 | m_Name: 714 | m_ModelFolderPath: 715 | m_PortalFolderPath: 716 | luminCert: 717 | m_CertPath: 718 | m_SignPackage: 1 719 | luminIsChannelApp: 0 720 | luminVersion: 721 | m_VersionCode: 1 722 | m_VersionName: 723 | apiCompatibilityLevel: 6 724 | cloudProjectId: 725 | framebufferDepthMemorylessMode: 0 726 | projectName: 727 | organizationId: 728 | cloudEnabled: 0 729 | enableNativePlatformBackendsForNewInputSystem: 0 730 | disableOldInputManagerSupport: 0 731 | legacyClampBlendShapeWeights: 1 732 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.15f1 2 | m_EditorVersionWithRevision: 2019.4.15f1 (fbf367ac14e9) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 4 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 4 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 1 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 1 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 4 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 2 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 1 108 | antiAliasing: 0 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 1 112 | billboardsFaceCameraPosition: 1 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 4 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 2 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 70 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 2 136 | antiAliasing: 2 137 | softParticles: 1 138 | softVegetation: 1 139 | realtimeReflectionProbes: 1 140 | billboardsFaceCameraPosition: 1 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 4 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 4 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSM: 5 183 | PSP2: 2 184 | Standalone: 5 185 | Tizen: 2 186 | WebGL: 3 187 | WiiU: 5 188 | Windows Store Apps: 5 189 | XboxOne: 5 190 | iPhone: 2 191 | tvOS: 2 192 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: 7 | - Log 8 | - Knife 9 | layers: 10 | - Default 11 | - TransparentFX 12 | - Ignore Raycast 13 | - 14 | - Water 15 | - UI 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | - 41 | - 42 | m_SortingLayers: 43 | - name: Default 44 | uniqueID: 0 45 | locked: 0 46 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KnifeHit sample 2 | 3 | this sample is made using Unity 2019.4 LTS and uses Pushe **0.7.0 - Unity** 4 | 5 | screenshot -------------------------------------------------------------------------------- /apple_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pusheco/pushe-unity-sample/a875fa9b7f5a770507b8bb462a543b1fc6d5ecca/apple_test.png --------------------------------------------------------------------------------