├── .gitattributes ├── Runtime ├── Scripts │ ├── Networking │ │ ├── URLParameters.cs │ │ ├── URLParameters.cs.meta │ │ ├── ConnexionManager.cs.meta │ │ └── ConnexionManager.cs │ ├── Security │ │ ├── IObfuscation.cs │ │ ├── BasicObfuscation.cs.meta │ │ ├── IObfuscation.cs.meta │ │ └── BasicObfuscation.cs │ ├── Security.meta │ ├── Networking.meta │ ├── Asynkrone.UnityTelegramGame.asmdef.meta │ └── Asynkrone.UnityTelegramGame.asmdef └── Scripts.meta ├── LICENSE.md.meta ├── README.md.meta ├── package.json.meta ├── Runtime.meta ├── package.json ├── Samples~ └── SampleGame │ ├── Scripts │ └── ScoreManager.cs │ └── Scenes │ └── SampleScene.unity ├── LICENSE.md ├── sequence.puml ├── .gitignore └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /Runtime/Scripts/Networking/URLParameters.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asynkr/unity-telegram-game/HEAD/Runtime/Scripts/Networking/URLParameters.cs -------------------------------------------------------------------------------- /LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ae92df110183384286ed662bfa0f4f5 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1918fdcb320c8c346b7a38994c39cea9 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7d2b0525eee602d46afa68484f8ebfc6 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime/Scripts/Security/IObfuscation.cs: -------------------------------------------------------------------------------- 1 | namespace Asynkrone.UnityTelegramGame.Security 2 | { 3 | public interface IObfuscation { 4 | public long Obfuscate(long playerId, long score); 5 | } 6 | } -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7f84f9be64e7a9489903f2a66de9e4d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 447d6bd6a11b67b469a6b9bf752a2ad5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Scripts/Security.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3eca0e881c020c1448d045ff7c878f01 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Scripts/Networking.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 17d5fe1c2b4c18d43bf92c5d87c8b107 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Scripts/Asynkrone.UnityTelegramGame.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f6cf431c79b3f8f4da4e6ccb877d6d4c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime/Scripts/Networking/URLParameters.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 704add625b3e8124ca7e108cf00deb5c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Scripts/Security/BasicObfuscation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aafe4f10e75686b428f2cafd10eacbbb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Scripts/Security/IObfuscation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6cddd5cdd2dec39498473f6f2d51814f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Scripts/Networking/ConnexionManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87f236aeddefa934aadab311e2f4ff59 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Scripts/Asynkrone.UnityTelegramGame.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Asynkrone.UnityTelegramGame", 3 | "rootNamespace": "", 4 | "references": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [], 12 | "versionDefines": [], 13 | "noEngineReferences": false 14 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.asynkrone.unitytelegramgame", 3 | "version": "1.0.0", 4 | "displayName": "Unity Telegram Game", 5 | "description": "This package enables you to create a WebGL Telegram Game that shares score with an app.", 6 | "unity": "2019.1", 7 | "keywords": [ 8 | "telegram", 9 | "webgl", 10 | "score" 11 | ], 12 | "author": { 13 | "name": "Asynkrone", 14 | "email": "asynkr@gmail.com" 15 | }, 16 | "type": "library", 17 | "samples": [ 18 | { 19 | "displayName": "Sample Game", 20 | "description": "Contains a sample game that uses the package.", 21 | "path": "Samples~/SampleGame" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /Samples~/SampleGame/Scripts/ScoreManager.cs: -------------------------------------------------------------------------------- 1 | using Asynkrone.UnityTelegramGame.Networking; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.UI; 6 | 7 | public class ScoreManager : MonoBehaviour 8 | { 9 | [SerializeField] private Text scoreText; 10 | [SerializeField] private ConnexionManager telegramConnexionManager; 11 | 12 | [SerializeField] private int score; 13 | 14 | private void Update() 15 | { 16 | scoreText.text = score.ToString(); 17 | } 18 | 19 | public void OnClickAddToScore() 20 | { 21 | score++; 22 | } 23 | public void OnClickShareScore() 24 | { 25 | telegramConnexionManager.SendScore(score); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Alexandre Laval 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /sequence.puml: -------------------------------------------------------------------------------- 1 | @startuml Sequence Diagram 2 | 3 | skinparam ParticipantPadding 20 4 | skinparam BoxPadding 10 5 | 6 | box "Client Side" #Pink 7 | actor "Telegram User" as TU 8 | participant "Frontend\n(Unity Game)" as F 9 | end box 10 | 11 | box "Node.js Server\n(my-website.com)" 12 | participant Backend as B 13 | end box 14 | 15 | box "Telegram" #LightBlue 16 | participant "Telegram Backend" as T 17 | end box 18 | 19 | == Initialization == 20 | 21 | activate B 22 | 23 | TU -> T : Click on "Play" button 24 | activate T 25 | B -> T : Polling 26 | note right : Backend regularly\nchecks on Bot API\nto see changes 27 | T -> B : User requested game 28 | B -> T : User must be redirected\nto my-website.com 29 | 30 | T -> TU : Redirect to my-website.com 31 | TU -> B : Go to my-website.com 32 | create F 33 | B -> F : Serve frontend 34 | activate F 35 | F -> TU 36 | 37 | == Game starts == 38 | 39 | group User playing 40 | TU -> F 41 | F -> TU 42 | end 43 | 44 | == Game ends == 45 | 46 | F -> B : Send score\n(obfuscated) 47 | deactivate F 48 | note left: User can see this request\nbeing sent to the backend 49 | B -> B : Decode\nobfuscated score 50 | 51 | B -> T : Update score\nand edit leaderboard message 52 | T -> TU : Edit leaderboard message 53 | 54 | @enduml 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Uu]ser[Ss]ettings/ 12 | 13 | # MemoryCaptures can get excessive in size. 14 | # They also could contain extremely sensitive data 15 | /[Mm]emoryCaptures/ 16 | 17 | # Recordings can get excessive in size 18 | /[Rr]ecordings/ 19 | 20 | # Uncomment this line if you wish to ignore the asset store tools plugin 21 | # /[Aa]ssets/AssetStoreTools* 22 | 23 | # Autogenerated Jetbrains Rider plugin 24 | /[Aa]ssets/Plugins/Editor/JetBrains* 25 | 26 | # Visual Studio cache directory 27 | .vs/ 28 | 29 | # Gradle cache directory 30 | .gradle/ 31 | 32 | # Autogenerated VS/MD/Consulo solution and project files 33 | ExportedObj/ 34 | .consulo/ 35 | *.csproj 36 | *.unityproj 37 | *.sln 38 | *.suo 39 | *.tmp 40 | *.user 41 | *.userprefs 42 | *.pidb 43 | *.booproj 44 | *.svd 45 | *.pdb 46 | *.mdb 47 | *.opendb 48 | *.VC.db 49 | 50 | # Unity3D generated meta files 51 | *.pidb.meta 52 | *.pdb.meta 53 | *.mdb.meta 54 | 55 | # Unity3D generated file on crash reports 56 | sysinfo.txt 57 | 58 | # Builds 59 | *.apk 60 | *.aab 61 | *.unitypackage 62 | *.app 63 | 64 | # Crashlytics generated file 65 | crashlytics-build.properties 66 | 67 | # Packed Addressables 68 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* 69 | 70 | # Temporary auto-generated Android Assets 71 | /[Aa]ssets/[Ss]treamingAssets/aa.meta 72 | /[Aa]ssets/[Ss]treamingAssets/aa/* 73 | -------------------------------------------------------------------------------- /Runtime/Scripts/Security/BasicObfuscation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Asynkrone.UnityTelegramGame.Security 4 | { 5 | public class BasicObfuscation : IObfuscation 6 | { 7 | private long[] BIG_PRIMES; 8 | public delegate int PlayerIdToTokenIndex(long playerId); 9 | private PlayerIdToTokenIndex playerIdToTokenIndex; 10 | 11 | /// 12 | /// Provides a basic obfuscation of the score, 13 | /// so that it will be difficult to cheat. 14 | ///
15 | /// The obfuscation relies on the server app and the Unity app 16 | /// both knowing the player id and the tokens. 17 | ///
18 | /// One can't rely solely on player id because it is shared with no obfuscation to the game. 19 | /// One can't rely solely on 1 big prime because it's easy to trace back to the prime knowing the score. 20 | ///
21 | /// The big prime numbers 22 | /// The method to go from player Id to a token in big primes 23 | public BasicObfuscation(long[] bigPrimes, PlayerIdToTokenIndex playerIdToTokenIndex) 24 | { 25 | this.BIG_PRIMES = bigPrimes; 26 | this.playerIdToTokenIndex = playerIdToTokenIndex; 27 | } 28 | public BasicObfuscation(long[] bigPrimes) : this(bigPrimes, BasicPlayerIdToTokenIndex) { } 29 | 30 | private static int SumDigits(long value) 31 | { 32 | if (value < 10) return (int)value; 33 | 34 | long sum = 0; 35 | while (value != 0) 36 | { 37 | long rem; 38 | value = Math.DivRem(value, 10, out rem); 39 | sum += rem; 40 | } 41 | 42 | if (sum >= 10) 43 | sum = SumDigits(sum); 44 | 45 | return (int)sum; 46 | } 47 | public static int BasicPlayerIdToTokenIndex(long playerId) 48 | { 49 | return SumDigits(playerId) - 1; 50 | } 51 | 52 | public long Obfuscate(long playerId, long score) 53 | { 54 | int index = playerIdToTokenIndex(playerId); 55 | 56 | long token = BIG_PRIMES[index]; 57 | return score * token; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Runtime/Scripts/Networking/ConnexionManager.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using UnityEngine; 3 | using UnityEngine.Networking; 4 | using Asynkrone.UnityTelegramGame.Security; 5 | 6 | namespace Asynkrone.UnityTelegramGame.Networking 7 | { 8 | public class ConnexionManager : MonoBehaviour 9 | { 10 | [Tooltip("The end point where the score will be read & handled on your app")] [SerializeField] private string serverURI = "https://example.com/highscore/"; 11 | [Tooltip("Big prime numbers to provide a basic security when sending score to the app")] [SerializeField] private long[] SCORE_TOKEN = { }; 12 | private IObfuscation obfuscation; 13 | 14 | private string playerId = ""; 15 | private bool dontSend = false; 16 | 17 | void Start() 18 | { 19 | obfuscation = new BasicObfuscation(SCORE_TOKEN); 20 | 21 | #if UNITY_EDITOR 22 | dontSend = true; 23 | #elif UNITY_WEBGL 24 | // The telegram game is launched with the player id as parameter 25 | playerId = URLParameters.GetSearchParameters()["id"]; 26 | // Debug.Log("Got playerId: " + playerId); 27 | #endif 28 | } 29 | 30 | 31 | public void SendScore(int score) 32 | { 33 | StartCoroutine(SendScoreCor(score)); 34 | } 35 | IEnumerator SendScoreCor(int score) 36 | { 37 | // Debug.Log("Asked score: " + score.ToString()); 38 | 39 | if (dontSend || playerId == "") yield break; 40 | 41 | long obfuscatedScore = obfuscation.Obfuscate(long.Parse(playerId), score); 42 | 43 | string uri = serverURI + obfuscatedScore.ToString() + "?id=" + playerId; 44 | using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)) 45 | { 46 | // Request and wait for the desired page. 47 | yield return webRequest.SendWebRequest(); 48 | 49 | switch (webRequest.result) 50 | { 51 | case UnityWebRequest.Result.ConnectionError: 52 | Debug.LogError("Error sending score: " + webRequest.error); 53 | break; 54 | case UnityWebRequest.Result.DataProcessingError: 55 | Debug.LogError("Error sending score: " + webRequest.error); 56 | break; 57 | case UnityWebRequest.Result.ProtocolError: 58 | Debug.LogError("Error sending score: " + webRequest.error); 59 | break; 60 | case UnityWebRequest.Result.Success: 61 | Debug.Log("Success sending score"); 62 | break; 63 | } 64 | } 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity Telegram Game 2 | 3 | This package enables you to create a WebGL Telegram Game using Unity game engine. 4 | 5 | > For the Node.js bot server, see [unity-telegram-game-backend](https://github.com/asynkr/unity-telegram-game-backend) 6 | 7 | ## Overview 8 | 9 | Telegram gives the possibility to connect HTML5 games to a bot. See [Telegram documentation](https://core.telegram.org/bots/games) for more information. 10 | This feature provides a way to create a game that can be played directly embedded in Telegram mobile apps, and a built-in score feature, that allows users to see a leaderboard specific to each group chat. 11 | 12 | Moreover, games created with this feature can easily be shared on group chats, providing a unique way to share your games. 13 | 14 | This package provides simple scripts to create a WebGL Game in Unity that can be connected to a bot. 15 | 16 | This package is only half of the solution. You still need to create a bot that serves the game and receives score from the client. You will find the other half in the [unity-telegram-game-backend](https://github.com/asynkr/unity-telegram-game-backend) repo. 17 | 18 | ## Installation 19 | 20 | ### Unity 21 | 22 | * Download this package from the package manager. Select "from git url" and enter: 23 | ``` 24 | https://github.com/asynkr/unity-telegram-game.git 25 | ``` 26 | * Add a GameObject with the `ConnexionManager` script attached. 27 | * Setup the `ConnexionManager` variables in the inspector: 28 | * Enter the right url (the endpoint that you will catch in the bot server) 29 | * Setup the obfuscation. If you want to use the default obfuscation, add 9 big prime numbers in the array. If you want to use your own obfuscation, create a script that implements `IObfuscation`. 30 | * Call the `sendScore` method wherever and whenever you want (it does not need to be at the end of the game, nor when the user quit your app). 31 | * Make sure you're building for WebGL. 32 | 33 | WebGL can be hard to build sometimes, new problems can arise from compression/optimization. To make sure the build is supposed to work, independently of the node app, you can use "Build and Run" in Unity, or upload it on a separated host (like heroku or itch.io). In particular, most common problems are with compression. See [Unity documentation on deploying with WebGL](https://docs.unity3d.com/Manual/webgl-deploying.html) and [the necessary server configs provided by Unity](https://docs.unity3d.com/Manual/webgl-server-configuration-code-samples.html). In the server config, you'll also have to properly declare the folder where your `index.html` will be. Finally, some compilation/compression options won't work. By trial and error, for example, I found that I needed to **enable the `Decompression fallback`option** in the Player Settings. 34 | 35 | ### Node.js server 36 | 37 | See [unity-telegram-game-backend](https://github.com/asynkr/unity-telegram-game-backend) for complete instructions. 38 | 39 | ## Complementary Info 40 | 41 | ### Sequence Diagram 42 | 43 | The process and the different back-and-forth interactions can be hard to follow. Here is a sequence diagram that shows the complete process. 44 | 45 | ![Sequence Diagram](http://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/asynkr/unity-telegram-game/main/sequence.puml) 46 | 47 | Note that "Telegram Backend" refers to both the app and the bot API. 48 | 49 | ### Obfuscation 50 | 51 | When sending the score from the HTML game to the backend, the simplest way to do it would be to use a request that looks like `https://www.my-website.com/score?id=123456&score=543`. 52 | Problem is a geeky user can easily find the score in the request, and therefore send a request with the same player id and a score only limited by the 32/64 bit size of the score in the backend. 53 | Note that **it is NOT a big deal**. We're talking about a highscore in a private group chat, not your banking card number. 54 | 55 | However, this package provides a way to obfuscate the score. 56 | This is a very poor security measure, as it doesn't follow [Kerckhoffs's principle](https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle). But this is good enough to stop the geeks. Note that it does not protect you from the hardcore nerds. 57 | 58 | You can use the given obfuscation script, or you can create your own. 59 | Using the default obfuscation script means the user can know your algorithm by finding this repo (if you're currently trying to do such a thing: hello there). 60 | 61 | Again, since this is not about any banking card number, it isn't a big deal. Your main goal is to make your game fun for everyone, not to make sure every point is deserved. 62 | And if you're giving cashprizes to the players, please reconsider your choice to do your competition on Telegram (and to use this package). 63 | -------------------------------------------------------------------------------- /Samples~/SampleGame/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1 &76199456 127 | GameObject: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | serializedVersion: 6 133 | m_Component: 134 | - component: {fileID: 76199458} 135 | - component: {fileID: 76199457} 136 | m_Layer: 0 137 | m_Name: ConnexionManager 138 | m_TagString: Untagged 139 | m_Icon: {fileID: 0} 140 | m_NavMeshLayer: 0 141 | m_StaticEditorFlags: 0 142 | m_IsActive: 1 143 | --- !u!114 &76199457 144 | MonoBehaviour: 145 | m_ObjectHideFlags: 0 146 | m_CorrespondingSourceObject: {fileID: 0} 147 | m_PrefabInstance: {fileID: 0} 148 | m_PrefabAsset: {fileID: 0} 149 | m_GameObject: {fileID: 76199456} 150 | m_Enabled: 1 151 | m_EditorHideFlags: 0 152 | m_Script: {fileID: 11500000, guid: 87f236aeddefa934aadab311e2f4ff59, type: 3} 153 | m_Name: 154 | m_EditorClassIdentifier: 155 | serverURI: https://example.com/highscore/ 156 | --- !u!4 &76199458 157 | Transform: 158 | m_ObjectHideFlags: 0 159 | m_CorrespondingSourceObject: {fileID: 0} 160 | m_PrefabInstance: {fileID: 0} 161 | m_PrefabAsset: {fileID: 0} 162 | m_GameObject: {fileID: 76199456} 163 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 164 | m_LocalPosition: {x: 0, y: 0, z: 0} 165 | m_LocalScale: {x: 1, y: 1, z: 1} 166 | m_Children: [] 167 | m_Father: {fileID: 0} 168 | m_RootOrder: 2 169 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 170 | --- !u!1 &519420028 171 | GameObject: 172 | m_ObjectHideFlags: 0 173 | m_CorrespondingSourceObject: {fileID: 0} 174 | m_PrefabInstance: {fileID: 0} 175 | m_PrefabAsset: {fileID: 0} 176 | serializedVersion: 6 177 | m_Component: 178 | - component: {fileID: 519420032} 179 | - component: {fileID: 519420031} 180 | - component: {fileID: 519420029} 181 | m_Layer: 0 182 | m_Name: Main Camera 183 | m_TagString: MainCamera 184 | m_Icon: {fileID: 0} 185 | m_NavMeshLayer: 0 186 | m_StaticEditorFlags: 0 187 | m_IsActive: 1 188 | --- !u!81 &519420029 189 | AudioListener: 190 | m_ObjectHideFlags: 0 191 | m_CorrespondingSourceObject: {fileID: 0} 192 | m_PrefabInstance: {fileID: 0} 193 | m_PrefabAsset: {fileID: 0} 194 | m_GameObject: {fileID: 519420028} 195 | m_Enabled: 1 196 | --- !u!20 &519420031 197 | Camera: 198 | m_ObjectHideFlags: 0 199 | m_CorrespondingSourceObject: {fileID: 0} 200 | m_PrefabInstance: {fileID: 0} 201 | m_PrefabAsset: {fileID: 0} 202 | m_GameObject: {fileID: 519420028} 203 | m_Enabled: 1 204 | serializedVersion: 2 205 | m_ClearFlags: 2 206 | m_BackGroundColor: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 0} 207 | m_projectionMatrixMode: 1 208 | m_GateFitMode: 2 209 | m_FOVAxisMode: 0 210 | m_SensorSize: {x: 36, y: 24} 211 | m_LensShift: {x: 0, y: 0} 212 | m_FocalLength: 50 213 | m_NormalizedViewPortRect: 214 | serializedVersion: 2 215 | x: 0 216 | y: 0 217 | width: 1 218 | height: 1 219 | near clip plane: 0.3 220 | far clip plane: 1000 221 | field of view: 60 222 | orthographic: 1 223 | orthographic size: 5 224 | m_Depth: -1 225 | m_CullingMask: 226 | serializedVersion: 2 227 | m_Bits: 4294967295 228 | m_RenderingPath: -1 229 | m_TargetTexture: {fileID: 0} 230 | m_TargetDisplay: 0 231 | m_TargetEye: 0 232 | m_HDR: 1 233 | m_AllowMSAA: 0 234 | m_AllowDynamicResolution: 0 235 | m_ForceIntoRT: 0 236 | m_OcclusionCulling: 0 237 | m_StereoConvergence: 10 238 | m_StereoSeparation: 0.022 239 | --- !u!4 &519420032 240 | Transform: 241 | m_ObjectHideFlags: 0 242 | m_CorrespondingSourceObject: {fileID: 0} 243 | m_PrefabInstance: {fileID: 0} 244 | m_PrefabAsset: {fileID: 0} 245 | m_GameObject: {fileID: 519420028} 246 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 247 | m_LocalPosition: {x: 0, y: 0, z: -10} 248 | m_LocalScale: {x: 1, y: 1, z: 1} 249 | m_Children: 250 | - {fileID: 1681919129} 251 | m_Father: {fileID: 0} 252 | m_RootOrder: 0 253 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 254 | --- !u!1 &717976018 255 | GameObject: 256 | m_ObjectHideFlags: 0 257 | m_CorrespondingSourceObject: {fileID: 0} 258 | m_PrefabInstance: {fileID: 0} 259 | m_PrefabAsset: {fileID: 0} 260 | serializedVersion: 6 261 | m_Component: 262 | - component: {fileID: 717976019} 263 | - component: {fileID: 717976021} 264 | - component: {fileID: 717976020} 265 | m_Layer: 5 266 | m_Name: Text 267 | m_TagString: Untagged 268 | m_Icon: {fileID: 0} 269 | m_NavMeshLayer: 0 270 | m_StaticEditorFlags: 0 271 | m_IsActive: 1 272 | --- !u!224 &717976019 273 | RectTransform: 274 | m_ObjectHideFlags: 0 275 | m_CorrespondingSourceObject: {fileID: 0} 276 | m_PrefabInstance: {fileID: 0} 277 | m_PrefabAsset: {fileID: 0} 278 | m_GameObject: {fileID: 717976018} 279 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 280 | m_LocalPosition: {x: 0, y: 0, z: 0} 281 | m_LocalScale: {x: 1, y: 1, z: 1} 282 | m_Children: [] 283 | m_Father: {fileID: 1674569260} 284 | m_RootOrder: 0 285 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 286 | m_AnchorMin: {x: 0, y: 0} 287 | m_AnchorMax: {x: 1, y: 1} 288 | m_AnchoredPosition: {x: 0, y: 0} 289 | m_SizeDelta: {x: 0, y: 0} 290 | m_Pivot: {x: 0.5, y: 0.5} 291 | --- !u!114 &717976020 292 | MonoBehaviour: 293 | m_ObjectHideFlags: 0 294 | m_CorrespondingSourceObject: {fileID: 0} 295 | m_PrefabInstance: {fileID: 0} 296 | m_PrefabAsset: {fileID: 0} 297 | m_GameObject: {fileID: 717976018} 298 | m_Enabled: 1 299 | m_EditorHideFlags: 0 300 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 301 | m_Name: 302 | m_EditorClassIdentifier: 303 | m_Material: {fileID: 0} 304 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 305 | m_RaycastTarget: 1 306 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 307 | m_Maskable: 1 308 | m_OnCullStateChanged: 309 | m_PersistentCalls: 310 | m_Calls: [] 311 | m_FontData: 312 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 313 | m_FontSize: 90 314 | m_FontStyle: 0 315 | m_BestFit: 0 316 | m_MinSize: 1 317 | m_MaxSize: 101 318 | m_Alignment: 4 319 | m_AlignByGeometry: 0 320 | m_RichText: 1 321 | m_HorizontalOverflow: 0 322 | m_VerticalOverflow: 0 323 | m_LineSpacing: 1 324 | m_Text: Click to share your score ! 325 | --- !u!222 &717976021 326 | CanvasRenderer: 327 | m_ObjectHideFlags: 0 328 | m_CorrespondingSourceObject: {fileID: 0} 329 | m_PrefabInstance: {fileID: 0} 330 | m_PrefabAsset: {fileID: 0} 331 | m_GameObject: {fileID: 717976018} 332 | m_CullTransparentMesh: 1 333 | --- !u!1 &816344635 334 | GameObject: 335 | m_ObjectHideFlags: 0 336 | m_CorrespondingSourceObject: {fileID: 0} 337 | m_PrefabInstance: {fileID: 0} 338 | m_PrefabAsset: {fileID: 0} 339 | serializedVersion: 6 340 | m_Component: 341 | - component: {fileID: 816344636} 342 | - component: {fileID: 816344639} 343 | - component: {fileID: 816344638} 344 | - component: {fileID: 816344637} 345 | m_Layer: 5 346 | m_Name: ScoreButton 347 | m_TagString: Untagged 348 | m_Icon: {fileID: 0} 349 | m_NavMeshLayer: 0 350 | m_StaticEditorFlags: 0 351 | m_IsActive: 1 352 | --- !u!224 &816344636 353 | RectTransform: 354 | m_ObjectHideFlags: 0 355 | m_CorrespondingSourceObject: {fileID: 0} 356 | m_PrefabInstance: {fileID: 0} 357 | m_PrefabAsset: {fileID: 0} 358 | m_GameObject: {fileID: 816344635} 359 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 360 | m_LocalPosition: {x: 0, y: 0, z: 0} 361 | m_LocalScale: {x: 1, y: 1, z: 1} 362 | m_Children: 363 | - {fileID: 1482583935} 364 | m_Father: {fileID: 1681919129} 365 | m_RootOrder: 0 366 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 367 | m_AnchorMin: {x: 0.5, y: 0.5} 368 | m_AnchorMax: {x: 0.5, y: 0.5} 369 | m_AnchoredPosition: {x: 0, y: 300} 370 | m_SizeDelta: {x: 700, y: 300} 371 | m_Pivot: {x: 0.5, y: 0.5} 372 | --- !u!114 &816344637 373 | MonoBehaviour: 374 | m_ObjectHideFlags: 0 375 | m_CorrespondingSourceObject: {fileID: 0} 376 | m_PrefabInstance: {fileID: 0} 377 | m_PrefabAsset: {fileID: 0} 378 | m_GameObject: {fileID: 816344635} 379 | m_Enabled: 1 380 | m_EditorHideFlags: 0 381 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 382 | m_Name: 383 | m_EditorClassIdentifier: 384 | m_Navigation: 385 | m_Mode: 3 386 | m_WrapAround: 0 387 | m_SelectOnUp: {fileID: 0} 388 | m_SelectOnDown: {fileID: 0} 389 | m_SelectOnLeft: {fileID: 0} 390 | m_SelectOnRight: {fileID: 0} 391 | m_Transition: 1 392 | m_Colors: 393 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 394 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 395 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 396 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 397 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 398 | m_ColorMultiplier: 1 399 | m_FadeDuration: 0.1 400 | m_SpriteState: 401 | m_HighlightedSprite: {fileID: 0} 402 | m_PressedSprite: {fileID: 0} 403 | m_SelectedSprite: {fileID: 0} 404 | m_DisabledSprite: {fileID: 0} 405 | m_AnimationTriggers: 406 | m_NormalTrigger: Normal 407 | m_HighlightedTrigger: Highlighted 408 | m_PressedTrigger: Pressed 409 | m_SelectedTrigger: Selected 410 | m_DisabledTrigger: Disabled 411 | m_Interactable: 1 412 | m_TargetGraphic: {fileID: 816344638} 413 | m_OnClick: 414 | m_PersistentCalls: 415 | m_Calls: 416 | - m_Target: {fileID: 1564750635} 417 | m_TargetAssemblyTypeName: ScoreManager, Assembly-CSharp 418 | m_MethodName: OnClickAddToScore 419 | m_Mode: 1 420 | m_Arguments: 421 | m_ObjectArgument: {fileID: 0} 422 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 423 | m_IntArgument: 0 424 | m_FloatArgument: 0 425 | m_StringArgument: 426 | m_BoolArgument: 0 427 | m_CallState: 2 428 | --- !u!114 &816344638 429 | MonoBehaviour: 430 | m_ObjectHideFlags: 0 431 | m_CorrespondingSourceObject: {fileID: 0} 432 | m_PrefabInstance: {fileID: 0} 433 | m_PrefabAsset: {fileID: 0} 434 | m_GameObject: {fileID: 816344635} 435 | m_Enabled: 1 436 | m_EditorHideFlags: 0 437 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 438 | m_Name: 439 | m_EditorClassIdentifier: 440 | m_Material: {fileID: 0} 441 | m_Color: {r: 1, g: 1, b: 1, a: 1} 442 | m_RaycastTarget: 1 443 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 444 | m_Maskable: 1 445 | m_OnCullStateChanged: 446 | m_PersistentCalls: 447 | m_Calls: [] 448 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 449 | m_Type: 1 450 | m_PreserveAspect: 0 451 | m_FillCenter: 1 452 | m_FillMethod: 4 453 | m_FillAmount: 1 454 | m_FillClockwise: 1 455 | m_FillOrigin: 0 456 | m_UseSpriteMesh: 0 457 | m_PixelsPerUnitMultiplier: 1 458 | --- !u!222 &816344639 459 | CanvasRenderer: 460 | m_ObjectHideFlags: 0 461 | m_CorrespondingSourceObject: {fileID: 0} 462 | m_PrefabInstance: {fileID: 0} 463 | m_PrefabAsset: {fileID: 0} 464 | m_GameObject: {fileID: 816344635} 465 | m_CullTransparentMesh: 1 466 | --- !u!1 &1446504916 467 | GameObject: 468 | m_ObjectHideFlags: 0 469 | m_CorrespondingSourceObject: {fileID: 0} 470 | m_PrefabInstance: {fileID: 0} 471 | m_PrefabAsset: {fileID: 0} 472 | serializedVersion: 6 473 | m_Component: 474 | - component: {fileID: 1446504919} 475 | - component: {fileID: 1446504918} 476 | - component: {fileID: 1446504917} 477 | m_Layer: 0 478 | m_Name: EventSystem 479 | m_TagString: Untagged 480 | m_Icon: {fileID: 0} 481 | m_NavMeshLayer: 0 482 | m_StaticEditorFlags: 0 483 | m_IsActive: 1 484 | --- !u!114 &1446504917 485 | MonoBehaviour: 486 | m_ObjectHideFlags: 0 487 | m_CorrespondingSourceObject: {fileID: 0} 488 | m_PrefabInstance: {fileID: 0} 489 | m_PrefabAsset: {fileID: 0} 490 | m_GameObject: {fileID: 1446504916} 491 | m_Enabled: 1 492 | m_EditorHideFlags: 0 493 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 494 | m_Name: 495 | m_EditorClassIdentifier: 496 | m_HorizontalAxis: Horizontal 497 | m_VerticalAxis: Vertical 498 | m_SubmitButton: Submit 499 | m_CancelButton: Cancel 500 | m_InputActionsPerSecond: 10 501 | m_RepeatDelay: 0.5 502 | m_ForceModuleActive: 0 503 | --- !u!114 &1446504918 504 | MonoBehaviour: 505 | m_ObjectHideFlags: 0 506 | m_CorrespondingSourceObject: {fileID: 0} 507 | m_PrefabInstance: {fileID: 0} 508 | m_PrefabAsset: {fileID: 0} 509 | m_GameObject: {fileID: 1446504916} 510 | m_Enabled: 1 511 | m_EditorHideFlags: 0 512 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 513 | m_Name: 514 | m_EditorClassIdentifier: 515 | m_FirstSelected: {fileID: 0} 516 | m_sendNavigationEvents: 1 517 | m_DragThreshold: 10 518 | --- !u!4 &1446504919 519 | Transform: 520 | m_ObjectHideFlags: 0 521 | m_CorrespondingSourceObject: {fileID: 0} 522 | m_PrefabInstance: {fileID: 0} 523 | m_PrefabAsset: {fileID: 0} 524 | m_GameObject: {fileID: 1446504916} 525 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 526 | m_LocalPosition: {x: 0, y: 0, z: 0} 527 | m_LocalScale: {x: 1, y: 1, z: 1} 528 | m_Children: [] 529 | m_Father: {fileID: 0} 530 | m_RootOrder: 1 531 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 532 | --- !u!1 &1482583934 533 | GameObject: 534 | m_ObjectHideFlags: 0 535 | m_CorrespondingSourceObject: {fileID: 0} 536 | m_PrefabInstance: {fileID: 0} 537 | m_PrefabAsset: {fileID: 0} 538 | serializedVersion: 6 539 | m_Component: 540 | - component: {fileID: 1482583935} 541 | - component: {fileID: 1482583937} 542 | - component: {fileID: 1482583936} 543 | m_Layer: 5 544 | m_Name: Text 545 | m_TagString: Untagged 546 | m_Icon: {fileID: 0} 547 | m_NavMeshLayer: 0 548 | m_StaticEditorFlags: 0 549 | m_IsActive: 1 550 | --- !u!224 &1482583935 551 | RectTransform: 552 | m_ObjectHideFlags: 0 553 | m_CorrespondingSourceObject: {fileID: 0} 554 | m_PrefabInstance: {fileID: 0} 555 | m_PrefabAsset: {fileID: 0} 556 | m_GameObject: {fileID: 1482583934} 557 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 558 | m_LocalPosition: {x: 0, y: 0, z: 0} 559 | m_LocalScale: {x: 1, y: 1, z: 1} 560 | m_Children: [] 561 | m_Father: {fileID: 816344636} 562 | m_RootOrder: 0 563 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 564 | m_AnchorMin: {x: 0, y: 0} 565 | m_AnchorMax: {x: 1, y: 1} 566 | m_AnchoredPosition: {x: 0, y: 0} 567 | m_SizeDelta: {x: 0, y: 0} 568 | m_Pivot: {x: 0.5, y: 0.5} 569 | --- !u!114 &1482583936 570 | MonoBehaviour: 571 | m_ObjectHideFlags: 0 572 | m_CorrespondingSourceObject: {fileID: 0} 573 | m_PrefabInstance: {fileID: 0} 574 | m_PrefabAsset: {fileID: 0} 575 | m_GameObject: {fileID: 1482583934} 576 | m_Enabled: 1 577 | m_EditorHideFlags: 0 578 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 579 | m_Name: 580 | m_EditorClassIdentifier: 581 | m_Material: {fileID: 0} 582 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 583 | m_RaycastTarget: 1 584 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 585 | m_Maskable: 1 586 | m_OnCullStateChanged: 587 | m_PersistentCalls: 588 | m_Calls: [] 589 | m_FontData: 590 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 591 | m_FontSize: 90 592 | m_FontStyle: 0 593 | m_BestFit: 0 594 | m_MinSize: 1 595 | m_MaxSize: 101 596 | m_Alignment: 4 597 | m_AlignByGeometry: 0 598 | m_RichText: 1 599 | m_HorizontalOverflow: 0 600 | m_VerticalOverflow: 0 601 | m_LineSpacing: 1 602 | m_Text: Click to add to your score ! 603 | --- !u!222 &1482583937 604 | CanvasRenderer: 605 | m_ObjectHideFlags: 0 606 | m_CorrespondingSourceObject: {fileID: 0} 607 | m_PrefabInstance: {fileID: 0} 608 | m_PrefabAsset: {fileID: 0} 609 | m_GameObject: {fileID: 1482583934} 610 | m_CullTransparentMesh: 1 611 | --- !u!1 &1564750634 612 | GameObject: 613 | m_ObjectHideFlags: 0 614 | m_CorrespondingSourceObject: {fileID: 0} 615 | m_PrefabInstance: {fileID: 0} 616 | m_PrefabAsset: {fileID: 0} 617 | serializedVersion: 6 618 | m_Component: 619 | - component: {fileID: 1564750636} 620 | - component: {fileID: 1564750635} 621 | m_Layer: 0 622 | m_Name: ScoreManager 623 | m_TagString: Untagged 624 | m_Icon: {fileID: 0} 625 | m_NavMeshLayer: 0 626 | m_StaticEditorFlags: 0 627 | m_IsActive: 1 628 | --- !u!114 &1564750635 629 | MonoBehaviour: 630 | m_ObjectHideFlags: 0 631 | m_CorrespondingSourceObject: {fileID: 0} 632 | m_PrefabInstance: {fileID: 0} 633 | m_PrefabAsset: {fileID: 0} 634 | m_GameObject: {fileID: 1564750634} 635 | m_Enabled: 1 636 | m_EditorHideFlags: 0 637 | m_Script: {fileID: 11500000, guid: 9a898fa1dd18d014e82bbfeb371b8413, type: 3} 638 | m_Name: 639 | m_EditorClassIdentifier: 640 | scoreText: {fileID: 1859725876} 641 | telegramConnexionManager: {fileID: 76199457} 642 | score: 0 643 | --- !u!4 &1564750636 644 | Transform: 645 | m_ObjectHideFlags: 0 646 | m_CorrespondingSourceObject: {fileID: 0} 647 | m_PrefabInstance: {fileID: 0} 648 | m_PrefabAsset: {fileID: 0} 649 | m_GameObject: {fileID: 1564750634} 650 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 651 | m_LocalPosition: {x: 0, y: 0, z: 0} 652 | m_LocalScale: {x: 1, y: 1, z: 1} 653 | m_Children: [] 654 | m_Father: {fileID: 0} 655 | m_RootOrder: 3 656 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 657 | --- !u!1 &1674569259 658 | GameObject: 659 | m_ObjectHideFlags: 0 660 | m_CorrespondingSourceObject: {fileID: 0} 661 | m_PrefabInstance: {fileID: 0} 662 | m_PrefabAsset: {fileID: 0} 663 | serializedVersion: 6 664 | m_Component: 665 | - component: {fileID: 1674569260} 666 | - component: {fileID: 1674569263} 667 | - component: {fileID: 1674569262} 668 | - component: {fileID: 1674569261} 669 | m_Layer: 5 670 | m_Name: ShareButton 671 | m_TagString: Untagged 672 | m_Icon: {fileID: 0} 673 | m_NavMeshLayer: 0 674 | m_StaticEditorFlags: 0 675 | m_IsActive: 1 676 | --- !u!224 &1674569260 677 | RectTransform: 678 | m_ObjectHideFlags: 0 679 | m_CorrespondingSourceObject: {fileID: 0} 680 | m_PrefabInstance: {fileID: 0} 681 | m_PrefabAsset: {fileID: 0} 682 | m_GameObject: {fileID: 1674569259} 683 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 684 | m_LocalPosition: {x: 0, y: 0, z: 0} 685 | m_LocalScale: {x: 1, y: 1, z: 1} 686 | m_Children: 687 | - {fileID: 717976019} 688 | m_Father: {fileID: 1681919129} 689 | m_RootOrder: 1 690 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 691 | m_AnchorMin: {x: 0.5, y: 0.5} 692 | m_AnchorMax: {x: 0.5, y: 0.5} 693 | m_AnchoredPosition: {x: 0, y: -300} 694 | m_SizeDelta: {x: 700, y: 300} 695 | m_Pivot: {x: 0.5, y: 0.5} 696 | --- !u!114 &1674569261 697 | MonoBehaviour: 698 | m_ObjectHideFlags: 0 699 | m_CorrespondingSourceObject: {fileID: 0} 700 | m_PrefabInstance: {fileID: 0} 701 | m_PrefabAsset: {fileID: 0} 702 | m_GameObject: {fileID: 1674569259} 703 | m_Enabled: 1 704 | m_EditorHideFlags: 0 705 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 706 | m_Name: 707 | m_EditorClassIdentifier: 708 | m_Navigation: 709 | m_Mode: 3 710 | m_WrapAround: 0 711 | m_SelectOnUp: {fileID: 0} 712 | m_SelectOnDown: {fileID: 0} 713 | m_SelectOnLeft: {fileID: 0} 714 | m_SelectOnRight: {fileID: 0} 715 | m_Transition: 1 716 | m_Colors: 717 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 718 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 719 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 720 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 721 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 722 | m_ColorMultiplier: 1 723 | m_FadeDuration: 0.1 724 | m_SpriteState: 725 | m_HighlightedSprite: {fileID: 0} 726 | m_PressedSprite: {fileID: 0} 727 | m_SelectedSprite: {fileID: 0} 728 | m_DisabledSprite: {fileID: 0} 729 | m_AnimationTriggers: 730 | m_NormalTrigger: Normal 731 | m_HighlightedTrigger: Highlighted 732 | m_PressedTrigger: Pressed 733 | m_SelectedTrigger: Selected 734 | m_DisabledTrigger: Disabled 735 | m_Interactable: 1 736 | m_TargetGraphic: {fileID: 1674569262} 737 | m_OnClick: 738 | m_PersistentCalls: 739 | m_Calls: 740 | - m_Target: {fileID: 1564750635} 741 | m_TargetAssemblyTypeName: ScoreManager, Assembly-CSharp 742 | m_MethodName: OnClickShareScore 743 | m_Mode: 1 744 | m_Arguments: 745 | m_ObjectArgument: {fileID: 0} 746 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine 747 | m_IntArgument: 0 748 | m_FloatArgument: 0 749 | m_StringArgument: 750 | m_BoolArgument: 0 751 | m_CallState: 2 752 | --- !u!114 &1674569262 753 | MonoBehaviour: 754 | m_ObjectHideFlags: 0 755 | m_CorrespondingSourceObject: {fileID: 0} 756 | m_PrefabInstance: {fileID: 0} 757 | m_PrefabAsset: {fileID: 0} 758 | m_GameObject: {fileID: 1674569259} 759 | m_Enabled: 1 760 | m_EditorHideFlags: 0 761 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 762 | m_Name: 763 | m_EditorClassIdentifier: 764 | m_Material: {fileID: 0} 765 | m_Color: {r: 1, g: 1, b: 1, a: 1} 766 | m_RaycastTarget: 1 767 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 768 | m_Maskable: 1 769 | m_OnCullStateChanged: 770 | m_PersistentCalls: 771 | m_Calls: [] 772 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 773 | m_Type: 1 774 | m_PreserveAspect: 0 775 | m_FillCenter: 1 776 | m_FillMethod: 4 777 | m_FillAmount: 1 778 | m_FillClockwise: 1 779 | m_FillOrigin: 0 780 | m_UseSpriteMesh: 0 781 | m_PixelsPerUnitMultiplier: 1 782 | --- !u!222 &1674569263 783 | CanvasRenderer: 784 | m_ObjectHideFlags: 0 785 | m_CorrespondingSourceObject: {fileID: 0} 786 | m_PrefabInstance: {fileID: 0} 787 | m_PrefabAsset: {fileID: 0} 788 | m_GameObject: {fileID: 1674569259} 789 | m_CullTransparentMesh: 1 790 | --- !u!1 &1681919128 791 | GameObject: 792 | m_ObjectHideFlags: 0 793 | m_CorrespondingSourceObject: {fileID: 0} 794 | m_PrefabInstance: {fileID: 0} 795 | m_PrefabAsset: {fileID: 0} 796 | serializedVersion: 6 797 | m_Component: 798 | - component: {fileID: 1681919129} 799 | - component: {fileID: 1681919132} 800 | - component: {fileID: 1681919131} 801 | - component: {fileID: 1681919130} 802 | m_Layer: 5 803 | m_Name: Canvas 804 | m_TagString: Untagged 805 | m_Icon: {fileID: 0} 806 | m_NavMeshLayer: 0 807 | m_StaticEditorFlags: 0 808 | m_IsActive: 1 809 | --- !u!224 &1681919129 810 | RectTransform: 811 | m_ObjectHideFlags: 0 812 | m_CorrespondingSourceObject: {fileID: 0} 813 | m_PrefabInstance: {fileID: 0} 814 | m_PrefabAsset: {fileID: 0} 815 | m_GameObject: {fileID: 1681919128} 816 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 817 | m_LocalPosition: {x: 0, y: 0, z: 0} 818 | m_LocalScale: {x: 0, y: 0, z: 0} 819 | m_Children: 820 | - {fileID: 816344636} 821 | - {fileID: 1674569260} 822 | - {fileID: 1859725875} 823 | m_Father: {fileID: 519420032} 824 | m_RootOrder: 0 825 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 826 | m_AnchorMin: {x: 0, y: 0} 827 | m_AnchorMax: {x: 0, y: 0} 828 | m_AnchoredPosition: {x: 0, y: 0} 829 | m_SizeDelta: {x: 0, y: 0} 830 | m_Pivot: {x: 0, y: 0} 831 | --- !u!114 &1681919130 832 | MonoBehaviour: 833 | m_ObjectHideFlags: 0 834 | m_CorrespondingSourceObject: {fileID: 0} 835 | m_PrefabInstance: {fileID: 0} 836 | m_PrefabAsset: {fileID: 0} 837 | m_GameObject: {fileID: 1681919128} 838 | m_Enabled: 1 839 | m_EditorHideFlags: 0 840 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} 841 | m_Name: 842 | m_EditorClassIdentifier: 843 | m_IgnoreReversedGraphics: 1 844 | m_BlockingObjects: 0 845 | m_BlockingMask: 846 | serializedVersion: 2 847 | m_Bits: 4294967295 848 | --- !u!114 &1681919131 849 | MonoBehaviour: 850 | m_ObjectHideFlags: 0 851 | m_CorrespondingSourceObject: {fileID: 0} 852 | m_PrefabInstance: {fileID: 0} 853 | m_PrefabAsset: {fileID: 0} 854 | m_GameObject: {fileID: 1681919128} 855 | m_Enabled: 1 856 | m_EditorHideFlags: 0 857 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} 858 | m_Name: 859 | m_EditorClassIdentifier: 860 | m_UiScaleMode: 1 861 | m_ReferencePixelsPerUnit: 100 862 | m_ScaleFactor: 1 863 | m_ReferenceResolution: {x: 1920, y: 1080} 864 | m_ScreenMatchMode: 0 865 | m_MatchWidthOrHeight: 0.5 866 | m_PhysicalUnit: 3 867 | m_FallbackScreenDPI: 96 868 | m_DefaultSpriteDPI: 96 869 | m_DynamicPixelsPerUnit: 1 870 | m_PresetInfoIsWorld: 0 871 | --- !u!223 &1681919132 872 | Canvas: 873 | m_ObjectHideFlags: 0 874 | m_CorrespondingSourceObject: {fileID: 0} 875 | m_PrefabInstance: {fileID: 0} 876 | m_PrefabAsset: {fileID: 0} 877 | m_GameObject: {fileID: 1681919128} 878 | m_Enabled: 1 879 | serializedVersion: 3 880 | m_RenderMode: 0 881 | m_Camera: {fileID: 0} 882 | m_PlaneDistance: 100 883 | m_PixelPerfect: 0 884 | m_ReceivesEvents: 1 885 | m_OverrideSorting: 0 886 | m_OverridePixelPerfect: 0 887 | m_SortingBucketNormalizedSize: 0 888 | m_AdditionalShaderChannelsFlag: 0 889 | m_SortingLayerID: 0 890 | m_SortingOrder: 0 891 | m_TargetDisplay: 0 892 | --- !u!1 &1859725874 893 | GameObject: 894 | m_ObjectHideFlags: 0 895 | m_CorrespondingSourceObject: {fileID: 0} 896 | m_PrefabInstance: {fileID: 0} 897 | m_PrefabAsset: {fileID: 0} 898 | serializedVersion: 6 899 | m_Component: 900 | - component: {fileID: 1859725875} 901 | - component: {fileID: 1859725877} 902 | - component: {fileID: 1859725876} 903 | m_Layer: 5 904 | m_Name: Score 905 | m_TagString: Untagged 906 | m_Icon: {fileID: 0} 907 | m_NavMeshLayer: 0 908 | m_StaticEditorFlags: 0 909 | m_IsActive: 1 910 | --- !u!224 &1859725875 911 | RectTransform: 912 | m_ObjectHideFlags: 0 913 | m_CorrespondingSourceObject: {fileID: 0} 914 | m_PrefabInstance: {fileID: 0} 915 | m_PrefabAsset: {fileID: 0} 916 | m_GameObject: {fileID: 1859725874} 917 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 918 | m_LocalPosition: {x: 0, y: 0, z: 0} 919 | m_LocalScale: {x: 1, y: 1, z: 1} 920 | m_Children: [] 921 | m_Father: {fileID: 1681919129} 922 | m_RootOrder: 2 923 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 924 | m_AnchorMin: {x: 0.5, y: 0.5} 925 | m_AnchorMax: {x: 0.5, y: 0.5} 926 | m_AnchoredPosition: {x: 0, y: 0} 927 | m_SizeDelta: {x: 500, y: 500} 928 | m_Pivot: {x: 0.5, y: 0.5} 929 | --- !u!114 &1859725876 930 | MonoBehaviour: 931 | m_ObjectHideFlags: 0 932 | m_CorrespondingSourceObject: {fileID: 0} 933 | m_PrefabInstance: {fileID: 0} 934 | m_PrefabAsset: {fileID: 0} 935 | m_GameObject: {fileID: 1859725874} 936 | m_Enabled: 1 937 | m_EditorHideFlags: 0 938 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 939 | m_Name: 940 | m_EditorClassIdentifier: 941 | m_Material: {fileID: 0} 942 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 943 | m_RaycastTarget: 1 944 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 945 | m_Maskable: 1 946 | m_OnCullStateChanged: 947 | m_PersistentCalls: 948 | m_Calls: [] 949 | m_FontData: 950 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 951 | m_FontSize: 100 952 | m_FontStyle: 0 953 | m_BestFit: 0 954 | m_MinSize: 1 955 | m_MaxSize: 253 956 | m_Alignment: 4 957 | m_AlignByGeometry: 0 958 | m_RichText: 1 959 | m_HorizontalOverflow: 0 960 | m_VerticalOverflow: 0 961 | m_LineSpacing: 1 962 | m_Text: 42 963 | --- !u!222 &1859725877 964 | CanvasRenderer: 965 | m_ObjectHideFlags: 0 966 | m_CorrespondingSourceObject: {fileID: 0} 967 | m_PrefabInstance: {fileID: 0} 968 | m_PrefabAsset: {fileID: 0} 969 | m_GameObject: {fileID: 1859725874} 970 | m_CullTransparentMesh: 1 971 | --------------------------------------------------------------------------------