Compare commits

...

25 Commits

@ -0,0 +1,13 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/projectSettingsUpdater.xml
/modules.xml
/.idea.FlyingFred.iml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

@ -0,0 +1,110 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Material.001
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _EMISSION
- _NORMALMAP
m_InvalidKeywords:
- TCP2_DISABLE_WRAPPED_LIGHT
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: ce9864b7b4711b643b1ddc3148de95bd, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 2800000, guid: 1e759b8af964d7f46acd44a876ac1017, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 1e759b8af964d7f46acd44a876ac1017, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Ramp:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RampSmooth: 0.2
- _RampSmoothAdd: 0.2
- _RampThreshold: 0.5
- _RimMax: 0.85
- _RimMin: 0.6
- _RimStrength: 0.5
- _SmoothnessTextureChannel: 0
- _SpecBlend: 1
- _SpecSmooth: 1
- _SpecularHighlights: 1
- _SrcBlend: 1
- _TCP2_DISABLE_WRAPPED_LIGHT: 1
- _TCP2_RAMPTEXT: 0
- _TCP2_SPEC_TOON: 0
- _TCP2_STYLIZED_FRESNEL: 0
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0.5849056, g: 0.5849056, b: 0.5849056, a: 1}
- _HColor: {r: 1, g: 1, b: 1, a: 1}
- _RimColor: {r: 0.8, g: 0.8, b: 0.8, a: 0.6}
- _SColor: {r: 0.24999997, g: 0.24999997, b: 0.24999997, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1e6fd264a3c81384e9f36e4269411f95
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

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

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

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

@ -0,0 +1,109 @@
fileFormatVersion: 2
guid: 69ece8eb9e64d694d805fcc7bdfffc31
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 57bd34a5869c54c409f725b511ae73e8
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects:
- first:
type: UnityEngine:Material
assembly: UnityEngine.CoreModule
name: Material.001
second: {fileID: 2100000, guid: 1e6fd264a3c81384e9f36e4269411f95, type: 2}
- first:
type: UnityEngine:Texture2D
assembly: UnityEngine.CoreModule
name: Material.001_Base_color
second: {fileID: 2800000, guid: 1e759b8af964d7f46acd44a876ac1017, type: 3}
- first:
type: UnityEngine:Texture2D
assembly: UnityEngine.CoreModule
name: Material.001_Normal
second: {fileID: 2800000, guid: ce9864b7b4711b643b1ddc3148de95bd, type: 3}
- first:
type: UnityEngine:Texture2D
assembly: UnityEngine.CoreModule
name: Material.001_Roughness
second: {fileID: 2800000, guid: 48758a352506abf46956b5ae20e476b4, type: 3}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

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

@ -0,0 +1,85 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Material
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _ALPHATEST_ON
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2450
stringTagMap:
RenderType: TransparentCutout
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 6b0c1ab9e240c2c4a8de374a623a6663, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 1
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f95cc37992466e64fac732855a75aa20
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 KiB

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

@ -0,0 +1,119 @@
fileFormatVersion: 2
guid: b9ceba9e7cc930d4f8fcddbac316065a
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects:
- first:
type: UnityEngine:Material
assembly: UnityEngine.CoreModule
name: Material
second: {fileID: 2100000, guid: f95cc37992466e64fac732855a75aa20, type: 2}
- first:
type: UnityEngine:Texture2D
assembly: UnityEngine.CoreModule
name: Window texture 1
second: {fileID: 2800000, guid: 6b0c1ab9e240c2c4a8de374a623a6663, type: 3}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

@ -1,28 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Character
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 2851773742377054681}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1107 &2851773742377054681
--- !u!1107 &-5755336560415773370
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
@ -32,8 +10,8 @@ AnimatorStateMachine:
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 8539129991129156910}
m_Position: {x: 235, y: 83, z: 0}
m_State: {fileID: -3114726293803031763}
m_Position: {x: 375.12134, y: 25.825226, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
@ -43,8 +21,8 @@ AnimatorStateMachine:
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 8539129991129156910}
--- !u!1102 &8539129991129156910
m_DefaultState: {fileID: -3114726293803031763}
--- !u!1102 &-3114726293803031763
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
@ -64,9 +42,31 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 0}
m_Motion: {fileID: -203655887218126122, guid: 76f75fbc06a3f7148bed008d9716f31e, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Character
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: -5755336560415773370}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8fd695de3ddb9764e9cac971a489fcdb
guid: d3db7326820be64419d72bd73cc970ed
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000

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

File diff suppressed because one or more lines are too long

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9f122d7675e946044b184b453938b811
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

@ -0,0 +1,21 @@
fileFormatVersion: 2
guid: e31ece6fdbf05e94a984bfafd987c291
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- Sen
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:

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

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

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dependencies>
<!-- See https://github.com/googlesamples/unity-jar-resolver#usage for
how to configure dependencies -->
<androidPackages>
<androidPackage spec="com.google.android.gms:play-services-auth:16+">
<androidSdkPackageIds>
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
</androidSdkPackageIds>
</androidPackage>
</androidPackages>
<!-- iOS Cocoapod dependencies can be specified by each iosPod element. -->
<iosPods>
<iosPod name="GoogleSignIn" version=">= 4.0.2" bitcodeEnabled="false"
minTargetSdk="6.0">
</iosPod>
</iosPods>
</dependencies>

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 938014c9994164100b26d82840a88fbb
labels:
- gvh
- gvh_version-1.0.4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dependencies>
<!-- Internal library dependency generated at build time. -->
<androidPackages>
<androidPackage spec="com.google.signin:google-signin-support:1.0.4">
<repositories>
<repository>Assets/GoogleSignIn/Editor/m2repository</repository>
</repositories>
</androidPackage>
</androidPackages>
</dependencies>

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e8689106c65f445c19cec6044d615c19
labels:
- gvh
- gvh_version-1.0.4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,33 @@
Assets/PlayServicesResolver/Editor/Google.VersionHandlerImpl_v1.2.89.0.dll
Assets/PlayServicesResolver/Editor/Google.IOSResolver_v1.2.89.0.dll
Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll
Assets/PlayServicesResolver/Editor/Google.JarResolver_v1.2.89.0.dll
Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm
Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h
Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h
Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm
Assets/Parse/LICENSE
Assets/Parse/Plugins/Unity.Compat.dll
Assets/Parse/Plugins/Unity.Tasks.dll
Assets/SignInSample/MainScene.unity
Assets/SignInSample/SigninSampleScript.cs
Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
Assets/GoogleSignIn/Impl/SignInHelperObject.cs
Assets/GoogleSignIn/Impl/NativeFuture.cs
Assets/GoogleSignIn/Impl/BaseObject.cs
Assets/GoogleSignIn/GoogleSignIn.cs
Assets/GoogleSignIn/GoogleSignInConfiguration.cs
Assets/GoogleSignIn/Future.cs
Assets/GoogleSignIn/GoogleSignInUser.cs
Assets/GoogleSignIn/GoogleSignInStatusCode.cs
Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a67d5f0cfc09749e6b1ce13e8b8e6e1d
labels:
- gvh
- gvh_manifest
- gvh_version-1.0.4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

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

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

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

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

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

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 001a15402063b4df983ba8bc4ddb269f
folderAsset: yes
timeCreated: 1537405253
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.signin</groupId>
<artifactId>google-signin-support</artifactId>
<version>1.0.4</version>
<packaging>srcaar</packaging>
</project>

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 907bf7a19cd7848cabf1f641f61343ee
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a3f74b3d329a24e81a6c6f9f1d2f46f1
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e1a3ff77f802d43818521ff3db2bf944
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 79f9d122dd99b483282294f3b1f1bd36
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 6eab7a3cbdbf34cffaf951dc9210a32c
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: d508eb0e16bb14c8a962b343e755ef01
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.google.signin</groupId>
<artifactId>google-signin-support</artifactId>
<versioning>
<release>1.0.4</release>
<versions>
<version>1.0.4</version>
</versions>
<lastUpdated>20180920010048</lastUpdated>
</versioning>
</metadata>

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: c020582c1a85d47c7934908f00a0bd37
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: f3911d467587242978192a8723c68395
labels:
- gvh
- gvh_version-1.0.4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 16b8065a143bb4277af08381a56157dd
labels:
- gvh
- gvh_version-1.0.4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,84 @@
// <copyright file="Future.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google {
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
/// <summary>
/// Interface for implementations of the Future<T> API.
/// </summary>
internal interface FutureAPIImpl<T> {
bool Pending { get; }
GoogleSignInStatusCode Status { get; }
T Result { get; }
}
/// <summary>
/// Future return value.
/// </summary>
/// <remarks>This class provides a promise of a result from a method call.
/// The typical usage is to check the Pending property until it is false.
/// At this time either the Status or Result will be available for use.
/// Result is only set if the operation was successful.
/// As a convience, a coroutine to complete a Task is provided.
/// </remarks>
public class Future<T> {
private FutureAPIImpl<T> apiImpl;
internal Future(FutureAPIImpl<T> impl) {
apiImpl = impl;
}
/// <summary>
/// Gets a value indicating whether this
/// <see cref="T:Google.Future`1"/> is pending.
/// </summary>
/// <value><c>true</c> if pending; otherwise, <c>false</c>.</value>
public bool Pending { get { return apiImpl.Pending; } }
/// <summary>
/// Gets the status.
/// </summary>
/// <value>The status is set when Pending == false.</value>
GoogleSignInStatusCode Status { get { return apiImpl.Status; } }
/// <summary>
/// Gets the result.
/// </summary>
/// <value>The result is set when Pending == false and there is no error.
/// </value>
T Result { get { return apiImpl.Result; } }
/// <summary>
/// Waits for result then completes the TaskCompleationSource.
/// </summary>
/// <returns>The for result.</returns>
/// <param name="tcs">Tcs.</param>
internal IEnumerator WaitForResult(TaskCompletionSource<T> tcs) {
yield return new WaitUntil(() => !Pending);
if (Status == GoogleSignInStatusCode.Canceled) {
tcs.SetCanceled();
} else if (Status == GoogleSignInStatusCode.Success ||
Status == GoogleSignInStatusCode.SuccessCached) {
tcs.SetResult(Result);
} else {
tcs.SetException(new GoogleSignIn.SignInException(Status));
}
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: ad3b09fb652fb4ff0a68d1966f13160e
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,202 @@
// <copyright file="GoogleSignIn.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google {
using System;
using System.Runtime.Serialization;
using System.Threading.Tasks;
using Google.Impl;
using UnityEngine;
/// <summary>
/// Google sign in API.
/// </summary>
/// <remarks>This class implements the GoogleSignInAPI for Unity.
/// Typical usage is to set the Configuration options as needed, then
/// get the DefaultInstance and call signIn or signInSilently. See
/// the <a href="https://developers.google.com/identity">
/// Google Sign-In API documentation for more details.</a>
/// <para>
/// <code>
/// private static readonly GoogleSignInConfiguration configuration =
/// new GoogleSignInConfiguration {
/// WebClientId = "<your client id here >",
/// RequestIdToken = true
/// };
///
/// public void OnSignIn() {
/// GoogleSignIn.Configuration = configuration;
/// GoogleSignIn.Configuration.UseGameSignIn = false;
/// GoogleSignIn.Configuration.RequestIdToken = true;
/// GoogleSignIn.DefaultInstance.SignIn().ContinueWith(
/// OnAuthenticationFinished);
/// }
/// </code>
/// </para>
/// </remarks>
public class GoogleSignIn {
#if !UNITY_ANDROID && !UNITY_IOS
static GoogleSignIn() {
Debug.LogError("This platform is not supported");
}
#endif
private static GoogleSignIn theInstance = null;
private static GoogleSignInConfiguration theConfiguration = null;
private ISignInImpl impl;
///<summary> The configuration settings for Google Sign-in.</summary>
///<remarks> The configuration should be set before calling the sign-in
/// methods. Once the configuration is set it cannot be changed.
///</remarks>
public static GoogleSignInConfiguration Configuration {
set {
// Can set the configuration until the singleton is created.
if (theInstance == null || theConfiguration == value || theConfiguration == null) {
theConfiguration = value;
} else {
throw new SignInException(GoogleSignInStatusCode.DeveloperError,
"DefaultInstance already created. " +
" Cannot change configuration after creation.");
}
}
get {
return theConfiguration;
}
}
/// <summary>
/// Singleton instance of this class.
/// </summary>
/// <value>The instance.</value>
public static GoogleSignIn DefaultInstance {
get {
if (theInstance == null) {
#if UNITY_ANDROID || UNITY_IOS
theInstance = new GoogleSignIn(new GoogleSignInImpl(Configuration));
#else
theInstance = new GoogleSignIn(null);
throw new SignInException(
GoogleSignInStatusCode.DeveloperError,
"This platform is not supported by GoogleSignIn");
#endif
}
return theInstance;
}
}
internal GoogleSignIn(GoogleSignInImpl impl) {
this.impl = impl;
}
public void EnableDebugLogging(bool flag) {
impl.EnableDebugLogging(flag);
}
/// <summary>Starts the authentication process.</summary>
/// <remarks>
/// The authenication process is started and may display account picker
/// popups and consent prompts based on the state of authentication and
/// the requested elements.
/// </remarks>
public Task<GoogleSignInUser> SignIn() {
var tcs = new TaskCompletionSource<GoogleSignInUser>();
SignInHelperObject.Instance.StartCoroutine(
impl.SignIn().WaitForResult(tcs));
return tcs.Task;
}
/// <summary>Starts the silent authentication process.</summary>
/// <remarks>
/// The authenication process is started and will attempt to sign in without
/// displaying any UI. If this cannot be done, the developer should call
/// SignIn().
/// </remarks>
public Task<GoogleSignInUser> SignInSilently() {
var tcs = new TaskCompletionSource<GoogleSignInUser>();
SignInHelperObject.Instance.StartCoroutine(
impl.SignInSilently().WaitForResult(tcs));
return tcs.Task;
}
/// <summary>
/// Signs out the User.
/// </summary>
/// <remarks>Future sign-in attempts will require the user to select the
/// account to use when signing in.
/// </remarks>
public void SignOut() {
theConfiguration = null;
impl.SignOut();
}
/// <summary>
/// Disconnect this instance.
/// </summary>
/// <remarks>When the user is disconnected, it revokes all access that may
/// have been granted to this application. This includes any server side
/// access tokens derived from server auth codes. As a result, future
/// sign-in attempts will require the user to re-consent to the requested
/// scopes.
/// </remarks>
public void Disconnect() {
impl.Disconnect();
}
/// <summary>
/// Sign in exception. This is a checked exception for handling specific
/// errors during the sign-in process.
/// </summary>
[Serializable]
public class SignInException : Exception {
internal SignInException(GoogleSignInStatusCode status) {
Status = status;
}
public SignInException(GoogleSignInStatusCode status, string message) :
base(message) {
Status = status;
}
public SignInException(GoogleSignInStatusCode status, string message,
Exception innerException) : base(message, innerException) {
Status = status;
}
protected SignInException(GoogleSignInStatusCode status,
SerializationInfo info,
StreamingContext context) :
base(info, context) {
Status = status;
}
public GoogleSignInStatusCode Status {
get;
internal set;
}
}
}
internal interface ISignInImpl {
Future<GoogleSignInUser> SignIn();
Future<GoogleSignInUser> SignInSilently();
void EnableDebugLogging(bool flag);
void SignOut();
void Disconnect();
}
} // namespace Google

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 138b984208e394be797ce8905a44fd54
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,63 @@
// <copyright file="GoogleSignInConfiguration.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google {
using System.Collections.Generic;
/// <summary>
/// Configuration properties for Google Sign-In.
/// </summary>
public class GoogleSignInConfiguration {
/// <summary>Set to true to use games signin, false for default signin.
/// </summary>
/// <remarks>Note: The Games configuration is not supported on non-Android
/// platforms.
/// If games configuration is used, you must also add the
/// play-services-games libraries and dependencies.
/// See the README for more details.
/// </remarks>
public bool UseGameSignIn = false;
/// <summary>Web client id associated with this app.</summary>
/// <remarks>Required for requesting auth code or id token.</remarks>
public string WebClientId = null;
/// <summary>Set to true for getting an auth code when authenticating.
/// </summary>
public bool RequestAuthCode = false;
/// <summary>Set to true to request to reset the refresh token.
/// Causes re-consent.
/// </summary>
public bool ForceTokenRefresh = false;
/// <summary>Request email address, requires consent.</summary>
public bool RequestEmail = false;
/// <summary>Request id token, requires consent.</summary>
public bool RequestIdToken = false;
/// <summary>Request profile information, requires consent.</summary>
public bool RequestProfile = false;
/// <summary>Hides popup UIs from games services.</summary>
/// <remarks>Used with games signin to show or hide the connecting popup UI
/// and to associate an invisible view for other popups. This is
/// recommended for VR applications. This has no effect if UseGameSignIn is
/// false.
/// </remarks>
public bool HidePopups = false;
/// <summary>Account name to use when authenticating,
/// null indicates use default.</summary>
public string AccountName = null;
/// <summary>Additional scopes to request, requires consent.</summary>
public IEnumerable<string> AdditionalScopes = null;
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 0c3999c0f68f04ae08f04fb3bf2a2050
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,50 @@
using UnityEngine;
using Google;
using System.Threading.Tasks;
public class GoogleSignInController : MonoBehaviour
{
private GoogleSignInConfiguration configuration;
void Awake()
{
// Set up the Google Sign-In configuration
configuration = new GoogleSignInConfiguration
{
WebClientId = "624507103444-6agok4g1q29bsb615v235jbf0k585ruk.apps.googleusercontent.com",
RequestEmail = true,
RequestIdToken = false, // ❌ We no longer request IdToken, since we use ServerAuthCode instead
RequestAuthCode = true // ✅ Enable ServerAuthCode for secure backend authentication
};
GoogleSignIn.Configuration = configuration;
}
public void SignInWithGoogle()
{
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnGoogleSignIn);
}
private void OnGoogleSignIn(Task<GoogleSignInUser> task)
{
if (task.IsFaulted)
{
Debug.LogError("Google Sign-In encountered an error: " + task.Exception);
}
else if (task.IsCanceled)
{
Debug.Log("Google Sign-In was canceled.");
}
else
{
GoogleSignInUser user = task.Result;
Debug.Log("✅ Google Sign-In succeeded!");
Debug.Log("👤 Display Name: " + user.DisplayName);
Debug.Log("📧 Email: " + user.Email);
Debug.Log("🔑 Server Auth Code: " + user.AuthCode);
// 🔹 Send this AuthCode to your backend (PlayFab, Firebase, or custom server)
// The backend will exchange this for an access token.
}
}
}

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

@ -0,0 +1,72 @@
// <copyright file="GoogleSignInStatusCode.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google {
/// <summary>
/// Status code for the SignIn operations.
/// </summary>
/// <remarks>All successful status codes are less than or equal to 0.
/// </remarks>
public enum GoogleSignInStatusCode {
/// <summary>The operation was successful, but used the device's cache.
/// </summary>
SuccessCached = -1,
/// <summary>The operation was successful.</summary>
Success = 0,
/// <summary>The client attempted to call a method from an API that
/// failed to connect.</summary>
ApiNotConnected = 1,
/// <summary>The result was canceled either due to client disconnect
/// or cancel().</summary>
Canceled = 2,
/// <summary> A blocking call was interrupted while waiting and did not
/// run to completion.</summary>
Interrupted = 3,
/// <summary> The client attempted to connect to the service with an
/// invalid account name specified. </summary>
InvalidAccount = 4,
/// <summary>Timed out while awaiting the result.</summary>
Timeout = 5,
/// <summary>The application is misconfigured.
/// This error is not recoverable.</summary>
/// <remarks>
/// The developer should look at the logs after this to determine
/// more actionable information.
/// </remarks>
DeveloperError = 6,
/// <summary>An internal error occurred. Retrying should resolve the
/// problem.</summary>
InternalError = 7,
/// <summary>A network error occurred. Retrying should resolve the problem.
/// </summary>
NetworkError = 8,
/// <summary> The operation failed with no more detailed information.
/// </summary>
Error = 9,
}
} // namespace GoogleSignIn

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 077933fcaedac412d9762bf3e0a3be68
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,76 @@
// <copyright file="GoogleSignInUser.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google {
using System;
/// <summary> Information for the authenticated user.</summary>
public class GoogleSignInUser {
/// <summary> Server AuthCode to be exchanged for an auth token.</summary>
///<remarks> null if not requested, or if there was an error.</remarks>
public string AuthCode {
get;
internal set;
}
/// <summary> Email address.</summary>
///<remarks> null if not requested, or if there was an error.</remarks>
public string Email {
get;
internal set;
}
/// <summary> Id token.</summary>
///<remarks> null if not requested, or if there was an error.</remarks>
public string IdToken {
get;
internal set;
}
/// <summary> Display Name.</summary>
public string DisplayName {
get;
internal set;
}
/// <summary> Given Name.</summary>
public string GivenName {
get;
internal set;
}
/// <summary> Family Name.</summary>
public string FamilyName {
get;
internal set;
}
/// <summary> Profile photo</summary>
/// <remarks> Can be null if the profile is not requested,
/// or none set.</remarks>
public Uri ImageUrl {
get;
internal set;
}
/// <summary> User ID</summary>
public string UserId {
get;
internal set;
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: c56b92217d0144af5907627d1235e0a5
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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

@ -0,0 +1,70 @@
// <copyright file="BaseObject.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google.Impl {
using System;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
/// <summary>
/// Base object manages the pointer to a native object which provides the
/// implementation of a C# object.
/// </summary>
internal abstract class BaseObject : IDisposable {
// handle to native object.
private HandleRef selfHandleRef;
private static HandleRef nullSelf = new HandleRef();
public BaseObject(IntPtr intPtr) {
selfHandleRef = new HandleRef(this, intPtr);
}
protected HandleRef SelfPtr() {
if (selfHandleRef.Equals(nullSelf)) {
throw new InvalidOperationException(
"Attempted to use object after it was cleaned up");
}
return selfHandleRef;
}
public virtual void Dispose() {
selfHandleRef = nullSelf;
}
internal delegate UIntPtr OutStringMethod([In, Out] byte[] out_bytes,
UIntPtr out_size);
internal static String OutParamsToString(OutStringMethod outStringMethod) {
UIntPtr requiredSize = outStringMethod(null, UIntPtr.Zero);
if (requiredSize.Equals(UIntPtr.Zero)) {
return null;
}
string str = null;
try {
byte[] array = new byte[requiredSize.ToUInt32()];
outStringMethod(array, requiredSize);
str = Encoding.UTF8.GetString(array, 0,
(int)requiredSize.ToUInt32() - 1);
} catch (Exception e) {
Debug.LogError("Exception creating string from char array: " + e);
str = string.Empty;
}
return str;
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: fe250cda690a44cb08f8f7d26c9723b4
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,187 @@
// <copyright file="GoogleSignInImpl.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google.Impl {
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
internal class GoogleSignInImpl : BaseObject, ISignInImpl {
#if UNITY_ANDROID
private const string DllName = "native-googlesignin";
#else
private const string DllName = "__Internal";
#endif
internal GoogleSignInImpl(GoogleSignInConfiguration configuration)
: base(GoogleSignIn_Create(GetPlayerActivity())) {
if (configuration != null) {
List<string> scopes = new List<string>();
if (configuration.AdditionalScopes != null) {
scopes.AddRange(configuration.AdditionalScopes);
}
GoogleSignIn_Configure(SelfPtr(), configuration.UseGameSignIn,
configuration.WebClientId,
configuration.RequestAuthCode,
configuration.ForceTokenRefresh,
configuration.RequestEmail,
configuration.RequestIdToken,
configuration.HidePopups,
scopes.ToArray(),
scopes.Count,
configuration.AccountName);
}
}
/// <summary>Enables/Disables verbose logging to help troubleshooting</summary>
public void EnableDebugLogging(bool flag) {
GoogleSignIn_EnableDebugLogging(SelfPtr(), flag);
}
/// <summary>
/// Starts the authentication process.
/// </summary>
/// <remarks>
/// The authenication process is started and may display account picker
/// popups and consent prompts based on the state of authentication and
/// the requested elements.
/// </remarks>
public Future<GoogleSignInUser> SignIn() {
IntPtr nativeFuture = GoogleSignIn_SignIn(SelfPtr());
return new Future<GoogleSignInUser>(new NativeFuture(nativeFuture));
}
/// <summary>
/// Starts the authentication process.
/// </summary>
/// <remarks>
/// The authenication process is started and may display account picker
/// popups and consent prompts based on the state of authentication and
/// the requested elements.
/// </remarks>
public Future<GoogleSignInUser> SignInSilently() {
IntPtr nativeFuture = GoogleSignIn_SignInSilently(SelfPtr());
return new Future<GoogleSignInUser>(new NativeFuture(nativeFuture));
}
/// <summary>
/// Signs out the User.
/// </summary>
public void SignOut() {
GoogleSignIn_Signout(SelfPtr());
}
/// <summary>
/// Disconnects the user from the application and revokes all consent.
/// </summary>
public void Disconnect() {
GoogleSignIn_Disconnect(SelfPtr());
}
/// <summary>
/// Creates an instance of the native Google Sign-In implementation.
/// </summary>
/// <remarks>
/// For Android this must be the JNI raw object for the parentActivity.
/// For iOS it is ignored.
/// </remarks>
/// <returns>The pointer to the instance.</returns>
/// <param name="data">Data used in creating the instance.</param>
[DllImport(DllName)]
static extern IntPtr GoogleSignIn_Create(IntPtr data);
[DllImport(DllName)]
static extern void GoogleSignIn_EnableDebugLogging(HandleRef self, bool flag);
[DllImport(DllName)]
static extern bool GoogleSignIn_Configure(HandleRef self,
bool useGameSignIn, string webClientId,
bool requestAuthCode, bool forceTokenRefresh, bool requestEmail,
bool requestIdToken, bool hidePopups, string[] additionalScopes,
int scopeCount, string accountName);
[DllImport(DllName)]
static extern IntPtr GoogleSignIn_SignIn(HandleRef self);
[DllImport(DllName)]
static extern IntPtr GoogleSignIn_SignInSilently(HandleRef self);
[DllImport(DllName)]
static extern void GoogleSignIn_Signout(HandleRef self);
[DllImport(DllName)]
static extern void GoogleSignIn_Disconnect(HandleRef self);
[DllImport(DllName)]
internal static extern void GoogleSignIn_DisposeFuture(HandleRef self);
[DllImport(DllName)]
internal static extern bool GoogleSignIn_Pending(HandleRef self);
[DllImport(DllName)]
internal static extern IntPtr GoogleSignIn_Result(HandleRef self);
[DllImport(DllName)]
internal static extern int GoogleSignIn_Status(HandleRef self);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
HandleRef self, [In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetDisplayName(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetEmail(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetFamilyName(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetGivenName(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetIdToken(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetImageUrl(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
[DllImport(DllName)]
internal static extern UIntPtr GoogleSignIn_GetUserId(HandleRef self,
[In, Out] byte[] bytes, UIntPtr len);
// Gets the Unity player activity.
// For iOS, this returns Zero.
private static IntPtr GetPlayerActivity() {
#if UNITY_ANDROID
UnityEngine.AndroidJavaClass jc = new UnityEngine.AndroidJavaClass(
"com.unity3d.player.UnityPlayer");
return jc.GetStatic<UnityEngine.AndroidJavaObject>("currentActivity")
.GetRawObject();
#else
return IntPtr.Zero;
#endif
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 9ae1f008f9f994b9c96c1a14067d7b48
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,102 @@
// <copyright file="NativeFuture.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google.Impl {
using System;
using System.Runtime.InteropServices;
/// <summary>
/// Native future is an interal class that implements the FutureAPIImpl
/// by calling native methods which are implemented in the native code.
/// </summary>
internal class NativeFuture : BaseObject, FutureAPIImpl<GoogleSignInUser> {
internal NativeFuture(IntPtr ptr) : base(ptr) {
}
public override void Dispose() {
GoogleSignInImpl.GoogleSignIn_DisposeFuture(SelfPtr());
base.Dispose();
}
public bool Pending {
get {
return GoogleSignInImpl.GoogleSignIn_Pending(SelfPtr());
}
}
public GoogleSignInUser Result {
get {
IntPtr ptr = GoogleSignInImpl.GoogleSignIn_Result(SelfPtr());
if (ptr != IntPtr.Zero) {
GoogleSignInUser user = new GoogleSignInUser();
HandleRef userPtr = new HandleRef(user, ptr);
user.DisplayName = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetDisplayName(userPtr,
out_string,
out_size));
user.Email = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetEmail(userPtr, out_string,
out_size));
user.FamilyName = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetFamilyName(userPtr, out_string,
out_size));
user.GivenName = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetGivenName(userPtr, out_string,
out_size));
user.IdToken = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetIdToken(userPtr, out_string,
out_size));
user.AuthCode = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetServerAuthCode(userPtr, out_string,
out_size));
string url = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetImageUrl(userPtr, out_string,
out_size));
if (url.Length > 0) {
user.ImageUrl = new System.Uri(url);
}
user.UserId = OutParamsToString((out_string, out_size) =>
GoogleSignInImpl.GoogleSignIn_GetUserId(userPtr, out_string,
out_size));
return user;
} else {
return null;
}
}
}
/// <summary>
/// Gets the status.
/// </summary>
/// <remarks>The platform specific implementation maps the platform specific
/// code to one defined in GoogleSignStatusCode.</remarks>
/// <value>The status.</value>
public GoogleSignInStatusCode Status {
get {
return (GoogleSignInStatusCode)GoogleSignInImpl.GoogleSignIn_Status(
SelfPtr());
}
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 5f1aae79b1ca4432d9d8ec382c54bf46
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,42 @@
// <copyright file="SignInHelperObject.cs" company="Google Inc.">
// Copyright (C) 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace Google.Impl {
using UnityEngine;
///<summary>Helper object to connect the Sign-in API to the Unity Game Scene.
///</summary>
///<remarks>This class is added to the scene so that the Google Sign-in API
/// can start coroutines.
///</remarks>
public class SignInHelperObject : MonoBehaviour {
private static SignInHelperObject instance;
internal static SignInHelperObject Instance {
get {
if (Application.isPlaying) {
// add an invisible game object to the scene
GameObject obj = new GameObject("GoogleSignInHelperObject");
DontDestroyOnLoad(obj);
instance = obj.AddComponent<SignInHelperObject>();
} else {
instance = new SignInHelperObject();
}
return instance;
}
}
}
}

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: ad98e5b48888e44eb81dd5884d3a1754
labels:
- gvh
- gvh_version-1.0.4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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

@ -0,0 +1,233 @@
using UnityEngine;
using UnityEngine.UI;
using Google;
using PlayFab;
using PlayFab.ClientModels;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class GoogleSignInManager : MonoBehaviour
{
private GoogleSignInConfiguration configuration;
public Bootstrapper bootstrapper;
public Button googleSignInButton;
public Button guestLoginButton;
void Awake()
{
configuration = new GoogleSignInConfiguration
{
WebClientId = "1021701058525-72qg4sbvqv3m3q7it4eck2h86ekoflla.apps.googleusercontent.com",
RequestEmail = true,
RequestAuthCode = true
};
GoogleSignIn.Configuration = configuration;
Application.quitting += SyncPlayerPrefsToPlayFabOnQuit;
}
void Start()
{
googleSignInButton.onClick.RemoveAllListeners();
googleSignInButton.onClick.AddListener(SignInWithGoogle);
guestLoginButton.onClick.RemoveAllListeners();
guestLoginButton.onClick.AddListener(GuestLogin);
if (PlayerPrefs.HasKey("PlayFabID") && !PlayerPrefs.HasKey("GuestMode"))
{
Debug.Log("User previously signed in with Google. Attempting silent login...");
googleSignInButton.gameObject.SetActive(false);
guestLoginButton.gameObject.SetActive(false);
SignInSilently();
}
else if (PlayerPrefs.HasKey("GuestMode"))
{
Debug.Log("Guest mode previously selected. Letting user choose again.");
googleSignInButton.gameObject.SetActive(true);
guestLoginButton.gameObject.SetActive(true);
}
else
{
Debug.Log("No login info found. Showing login options.");
googleSignInButton.gameObject.SetActive(true);
guestLoginButton.gameObject.SetActive(true);
}
}
public void GuestLogin()
{
Debug.Log("Starting game in Guest Mode...");
SafePlayerPrefs.SetInt("GuestMode", 1);
PlayerPrefs.Save();
googleSignInButton.gameObject.SetActive(false);
guestLoginButton.gameObject.SetActive(false);
bootstrapper.StartGame();
}
public void SignInWithGoogle()
{
PlayerPrefs.DeleteKey("GuestMode");
PlayerPrefs.DeleteAll();
PlayerPrefs.Save();
googleSignInButton.interactable = false;
guestLoginButton.interactable = false;
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnGoogleSignIn);
}
private void OnGoogleSignIn(Task<GoogleSignInUser> task)
{
if (task.IsFaulted || task.IsCanceled)
{
Debug.LogError("Google Sign-In failed: " + task.Exception);
googleSignInButton.gameObject.SetActive(true);
googleSignInButton.interactable = true;
guestLoginButton.gameObject.SetActive(true);
guestLoginButton.interactable = true;
return;
}
GoogleSignInUser user = task.Result;
string authCode = user.AuthCode;
SafePlayerPrefs.SetString("GoogleAuthCode", authCode);
PlayerPrefs.Save();
LoginToPlayFab(authCode);
}
private void SignInSilently()
{
Debug.Log("Attempting Google Silent Sign-In...");
GoogleSignIn.DefaultInstance.SignInSilently().ContinueWith(task =>
{
if (task.IsFaulted || task.IsCanceled)
{
Debug.LogWarning("Silent Sign-In failed. Showing login buttons.");
googleSignInButton.gameObject.SetActive(true);
googleSignInButton.interactable = true;
guestLoginButton.gameObject.SetActive(true);
guestLoginButton.interactable = true;
return;
}
GoogleSignInUser user = task.Result;
string authCode = user.AuthCode;
SafePlayerPrefs.SetString("GoogleAuthCode", authCode);
PlayerPrefs.Save();
LoginToPlayFab(authCode);
});
}
private void LoginToPlayFab(string authCode)
{
PlayFabSettings.staticSettings.TitleId = GameConstants.PlayfabTitleId;
var request = new LoginWithGoogleAccountRequest
{
TitleId = GameConstants.PlayfabTitleId,
ServerAuthCode = authCode,
CreateAccount = true
};
PlayFabClientAPI.LoginWithGoogleAccount(request, OnPlayFabLoginSuccess, OnPlayFabLoginFailure);
}
private void OnPlayFabLoginSuccess(LoginResult result)
{
Debug.Log("✅ PlayFab Login Success! PlayFab ID: " + result.PlayFabId);
SafePlayerPrefs.SetString("PlayFabID", result.PlayFabId);
PlayerPrefs.Save();
LoadPlayerPrefsFromPlayFab(() =>
{
googleSignInButton.gameObject.SetActive(false);
guestLoginButton.gameObject.SetActive(false);
bootstrapper.StartGame();
});
}
private void OnPlayFabLoginFailure(PlayFabError error)
{
Debug.LogError("❌ PlayFab Login Failed: " + error.GenerateErrorReport());
googleSignInButton.gameObject.SetActive(true);
googleSignInButton.interactable = true;
guestLoginButton.gameObject.SetActive(true);
guestLoginButton.interactable = true;
}
private void LoadPlayerPrefsFromPlayFab(Action onComplete)
{
PlayFabClientAPI.GetUserData(new GetUserDataRequest(), result =>
{
if (result.Data != null)
{
foreach (var entry in result.Data)
{
string key = entry.Key;
string rawValue = entry.Value.Value;
if (rawValue.StartsWith("int:") && int.TryParse(rawValue.Substring(4), out int i))
SafePlayerPrefs.SetInt(key, i);
else if (rawValue.StartsWith("float:") && float.TryParse(rawValue.Substring(6), out float f))
SafePlayerPrefs.SetFloat(key, f);
else if (rawValue.StartsWith("string:"))
SafePlayerPrefs.SetString(key, rawValue.Substring(7));
else
SafePlayerPrefs.SetString(key, rawValue);
PlayerPrefsKeys.RegisterKey(key);
}
PlayerPrefs.Save();
}
onComplete?.Invoke();
},
error =>
{
Debug.LogError("❌ Failed to load SafePlayerPrefs from PlayFab: " + error.GenerateErrorReport());
onComplete?.Invoke();
});
}
public void SyncPlayerPrefsToPlayFabOnQuit()
{
if (PlayerPrefs.HasKey("GuestMode")) return;
Dictionary<string, string> allPrefs = new Dictionary<string, string>();
foreach (var key in PlayerPrefsKeys.GetAllKeys())
{
allPrefs[key] = PlayerPrefs.GetString(key);
}
var request = new UpdateUserDataRequest
{
Data = allPrefs
};
PlayFabClientAPI.UpdateUserData(request,
result => Debug.Log("✅ Synced SafePlayerPrefs to PlayFab on quit."),
error => Debug.LogError("❌ Failed to sync SafePlayerPrefs: " + error.GenerateErrorReport()));
}
public void SignOut()
{
PlayerPrefs.DeleteKey("GoogleAuthCode");
PlayerPrefs.DeleteKey("PlayFabID");
PlayerPrefs.DeleteKey("GuestMode");
PlayerPrefs.Save();
GoogleSignIn.DefaultInstance.SignOut();
Debug.Log("User signed out.");
}
}

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

@ -0,0 +1,23 @@
using System.Collections.Generic;
using UnityEngine;
public static class PlayerPrefsKeys
{
private const string KeyRegistry = "_AllPlayerPrefsKeys";
public static void RegisterKey(string key)
{
var keys = PlayerPrefs.GetString(KeyRegistry, "");
if (!keys.Contains(key))
{
keys += key + ";";
SafePlayerPrefs.SetString(KeyRegistry, keys);
PlayerPrefs.Save();
}
}
public static List<string> GetAllKeys()
{
var keysString = PlayerPrefs.GetString(KeyRegistry, "");
return new List<string>(keysString.Split(';', System.StringSplitOptions.RemoveEmptyEntries));
}
}

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

@ -0,0 +1,227 @@
using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;
using System.Collections;
using System.Collections.Generic;
public class PlayerPrefsSyncManager : MonoBehaviour
{
public static PlayerPrefsSyncManager instance;
private const int MaxKeysPerRequest = 10;
private static float syncDelay = 3f;
private static float syncTimer = 0f;
private static bool syncPending = false;
private Coroutine periodicSyncCoroutine;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
Application.wantsToQuit += OnWantsToQuit;
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
periodicSyncCoroutine = StartCoroutine(PeriodicSyncCoroutine());
}
private void Update()
{
if (syncPending)
{
syncTimer -= Time.unscaledDeltaTime;
if (syncTimer <= 0f)
{
syncPending = false;
Debug.Log("🌀 Debounced sync triggered.");
StartCoroutine(SyncCoroutine());
}
}
}
public static void RequestSync()
{
if (!instance) return;
syncTimer = syncDelay;
syncPending = true;
}
private bool OnWantsToQuit()
{
if (PlayFabClientAPI.IsClientLoggedIn())
{
StartCoroutine(SyncThenQuit());
return false;
}
return true;
}
private void OnApplicationPause(bool pause)
{
if (pause)
{
Debug.Log("📱 App paused — syncing.");
StartCoroutine(SyncCoroutine());
}
}
private IEnumerator PeriodicSyncCoroutine()
{
float interval = 120f; // 3 minutes
while (true)
{
yield return new WaitForSecondsRealtime(interval);
if (PlayFabClientAPI.IsClientLoggedIn())
{
Debug.Log("⏰ Periodic sync triggered.");
yield return SyncCoroutine();
}
}
}
private IEnumerator SyncThenQuit()
{
bool isDone = false;
SyncPlayerPrefsToPlayFab(() =>
{
isDone = true;
});
float timeout = 5f;
float timer = 0f;
while (!isDone && timer < timeout)
{
timer += Time.unscaledDeltaTime;
yield return null;
}
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
private IEnumerator SyncCoroutine()
{
bool isDone = false;
SyncPlayerPrefsToPlayFab(() =>
{
isDone = true;
});
float timeout = 5f;
float timer = 0f;
while (!isDone && timer < timeout)
{
timer += Time.unscaledDeltaTime;
yield return null;
}
}
public void SyncPlayerPrefsToPlayFab(System.Action onComplete = null)
{
if (!PlayFabClientAPI.IsClientLoggedIn())
{
onComplete?.Invoke();
return;
}
var keys = PlayerPrefsKeys.GetAllKeys();
if (keys.Count == 0)
{
Debug.Log("No PlayerPrefs keys registered, skipping sync.");
onComplete?.Invoke();
return;
}
Dictionary<string, string> allPrefs = new Dictionary<string, string>();
foreach (var key in keys)
{
string strVal = PlayerPrefs.GetString(key, "__MISSING__");
if (strVal != "__MISSING__")
{
allPrefs[key] = "string:" + strVal;
continue;
}
int intVal = PlayerPrefs.GetInt(key, int.MinValue + 1);
if (intVal != int.MinValue + 1)
{
allPrefs[key] = "int:" + intVal;
continue;
}
float floatVal = PlayerPrefs.GetFloat(key, float.MinValue + 1);
if (floatVal != float.MinValue + 1)
{
allPrefs[key] = "float:" + floatVal.ToString("R");
}
}
// Batch in chunks of 10
var batches = new List<Dictionary<string, string>>();
var currentBatch = new Dictionary<string, string>();
foreach (var pair in allPrefs)
{
currentBatch[pair.Key] = pair.Value;
if (currentBatch.Count == MaxKeysPerRequest)
{
batches.Add(currentBatch);
currentBatch = new Dictionary<string, string>();
}
}
if (currentBatch.Count > 0)
{
batches.Add(currentBatch);
}
UploadPlayerPrefsBatches(batches, 0, onComplete);
}
private void UploadPlayerPrefsBatches(List<Dictionary<string, string>> batches, int index, System.Action onComplete)
{
if (index >= batches.Count)
{
Debug.Log("✅ All PlayerPrefs batches synced to PlayFab.");
onComplete?.Invoke();
return;
}
var request = new UpdateUserDataRequest
{
Data = batches[index],
Permission = UserDataPermission.Public
};
PlayFabClientAPI.UpdateUserData(request,
result =>
{
Debug.Log($"✅ Synced batch {index + 1}/{batches.Count}");
UploadPlayerPrefsBatches(batches, index + 1, onComplete);
},
error =>
{
Debug.LogError($"❌ Failed to sync batch {index + 1}/{batches.Count}: {error.GenerateErrorReport()}");
onComplete?.Invoke(); // Fail fast or add retry logic
});
}
}

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

@ -0,0 +1,124 @@
using PlayFab.ClientModels;
using PlayFab;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using MS;
using TMPro;
public class Profile : MonoBehaviour
{
// Start is called before the first frame update
public Button EnteredNameButton;
public List<Sprite> AvatarSprites;
public Sprite AvatarSelectedSprite;
public Popup EnterNamePanel;
public Popup MainPanel;
public TMP_InputField nameInputField;
public Image HeaderProfileImg;
public TextMeshProUGUI HeaderProfileName;
public Image LevelFillerImg;
public TextMeshProUGUI LevelFillerText;
private void Start()
{
CheckForDisplayName();
CheckForAvatar();
if (EnteredNameButton != null)
EnteredNameButton.interactable = false;
}
private void CheckForAvatar()
{
int hasSelectedAvatar = PlayerPrefs.GetInt(GameConstants.AvatarSelectedCheckKey, 0);
if (hasSelectedAvatar > 0)
{
//string name = PlayerPrefs.GetString(GameConstants.DisplayNameKey);
//PlayFabLeaderboards.DisplayName = name;
AvatarSelectedSprite = AvatarSprites[PlayerPrefs.GetInt(GameConstants.AvatarSelectedIndex)];
HeaderProfileImg.sprite = AvatarSelectedSprite;
}
else
{
MainPanel.Close();
if (!EnterNamePanel.isOpen)
EnterNamePanel.Open();
}
}
private void CheckForDisplayName()
{
int hasEnteredName = PlayerPrefs.GetInt(GameConstants.NameEnteredCheckKey, 0);
if (hasEnteredName > 0)
{
string name = PlayerPrefs.GetString(GameConstants.DisplayNameKey);
PlayFabLeaderboards.DisplayName = name;
PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(name);
HeaderProfileName.text = name;
LevelFillerSetter();
}
else
{
Debug.Log("Name not found in plaerprefs");
MainPanel.Close();
if (!EnterNamePanel.isOpen)
EnterNamePanel.Open();
}
}
public void LevelFillerSetter()
{
int bestScore = PlayerPrefs.GetInt("BestScore", 0); // Default to 0 if not set
float fillAmount = Mathf.Clamp01((float)bestScore / 100f); // Ensure it stays between 0 and 1
LevelFillerImg.fillAmount = fillAmount;
//LevelFillerText.text = bestScore + "/" + maxScore;
}
public void OnDisplayNameEntered()
{
if (PlayFabClientAPI.IsClientLoggedIn())
{
PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text);
}
SafePlayerPrefs.SetInt(GameConstants.NameEnteredCheckKey, 1);
SafePlayerPrefs.SetString(GameConstants.DisplayNameKey, nameInputField.text);
HeaderProfileName.text = nameInputField.text;
EnterNamePanel.Close();
LevelFillerSetter();
}
public void OnAvatarSelected(int AvatarID)
{
//PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text);
EnteredNameButton.interactable = true;
SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedCheckKey, 1);
SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedIndex, AvatarID);
AvatarSelectedSprite = AvatarSprites[AvatarID];
HeaderProfileImg.sprite = AvatarSelectedSprite;
SetAvatarID(AvatarID);
//NameEnterPanel.Close();
}
public void SetAvatarID(int avatarID)
{
var request = new UpdateUserDataRequest
{
Data = new Dictionary<string, string>
{
{ "AvatarID", avatarID.ToString() } // Convert int to string for storage
},
Permission = UserDataPermission.Public
};
if (PlayFabClientAPI.IsClientLoggedIn())
PlayFabClientAPI.UpdateUserData(request, OnDataUpdateSuccess, OnDataUpdateFailure);
}
private void OnDataUpdateSuccess(UpdateUserDataResult result)
{
Debug.Log("Avatar ID updated successfully.");
}
private void OnDataUpdateFailure(PlayFabError error)
{
Debug.LogError("Failed to update Avatar ID: " + error.GenerateErrorReport());
}
}

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

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

Loading…
Cancel
Save