├── .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 | 
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 |
--------------------------------------------------------------------------------