├── .gitignore ├── Assets ├── Plugins.meta ├── Plugins │ ├── TextMesh Pro.meta │ └── TextMesh Pro │ │ ├── Resources.meta │ │ ├── Resources │ │ ├── Fonts & Materials.meta │ │ ├── Fonts & Materials │ │ │ ├── Cocogoose-Pro-Darkmode SDF.asset │ │ │ ├── Cocogoose-Pro-Darkmode SDF.asset.meta │ │ │ ├── Cocogoose-Pro-Darkmode SDF.mat │ │ │ └── Cocogoose-Pro-Darkmode SDF.mat.meta │ │ ├── LineBreaking Following Characters.txt │ │ ├── LineBreaking Following Characters.txt.meta │ │ ├── LineBreaking Leading Characters.txt │ │ ├── LineBreaking Leading Characters.txt.meta │ │ ├── Style Sheets.meta │ │ ├── Style Sheets │ │ │ ├── Default Style Sheet.asset │ │ │ └── Default Style Sheet.asset.meta │ │ ├── TMP Settings.asset │ │ └── TMP Settings.asset.meta │ │ ├── Shaders.meta │ │ └── Shaders │ │ ├── TMP_Bitmap-Custom-Atlas.shader │ │ ├── TMP_Bitmap-Custom-Atlas.shader.meta │ │ ├── TMP_Bitmap-Mobile.shader │ │ ├── TMP_Bitmap-Mobile.shader.meta │ │ ├── TMP_Bitmap.shader │ │ ├── TMP_Bitmap.shader.meta │ │ ├── TMP_SDF Overlay.shader │ │ ├── TMP_SDF Overlay.shader.meta │ │ ├── TMP_SDF SSD.shader │ │ ├── TMP_SDF SSD.shader.meta │ │ ├── TMP_SDF-Mobile Masking.shader │ │ ├── TMP_SDF-Mobile Masking.shader.meta │ │ ├── TMP_SDF-Mobile Overlay.shader │ │ ├── TMP_SDF-Mobile Overlay.shader.meta │ │ ├── TMP_SDF-Mobile SSD.shader │ │ ├── TMP_SDF-Mobile SSD.shader.meta │ │ ├── TMP_SDF-Mobile.shader │ │ ├── TMP_SDF-Mobile.shader.meta │ │ ├── TMP_SDF-Surface-Mobile.shader │ │ ├── TMP_SDF-Surface-Mobile.shader.meta │ │ ├── TMP_SDF-Surface.shader │ │ ├── TMP_SDF-Surface.shader.meta │ │ ├── TMP_SDF.shader │ │ ├── TMP_SDF.shader.meta │ │ ├── TMP_Sprite.shader │ │ ├── TMP_Sprite.shader.meta │ │ ├── TMPro.cginc │ │ ├── TMPro.cginc.meta │ │ ├── TMPro_Mobile.cginc │ │ ├── TMPro_Mobile.cginc.meta │ │ ├── TMPro_Properties.cginc │ │ ├── TMPro_Properties.cginc.meta │ │ ├── TMPro_Surface.cginc │ │ └── TMPro_Surface.cginc.meta ├── _Game.meta └── _Game │ ├── Prefabs.meta │ ├── Prefabs │ ├── Benchmark Button.prefab │ └── Benchmark Button.prefab.meta │ ├── Scenes.meta │ ├── Scenes │ ├── Main.unity │ └── Main.unity.meta │ ├── Sprites.meta │ ├── Sprites │ ├── Button.png │ ├── Button.png.meta │ ├── Slider Point.png │ ├── Slider Point.png.meta │ ├── Slider unfilled.png │ ├── Slider unfilled.png.meta │ ├── Slider.png │ └── Slider.png.meta │ ├── _Scripts.meta │ └── _Scripts │ ├── BenchmarkButton.cs │ ├── BenchmarkButton.cs.meta │ ├── Benchmarks.meta │ ├── Benchmarks │ ├── Benchmark Helpers.meta │ ├── Benchmark Helpers │ │ ├── FindHelper.cs │ │ ├── FindHelper.cs.meta │ │ ├── SendMessageHelper.cs │ │ └── SendMessageHelper.cs.meta │ ├── CameraBench.cs │ ├── CameraBench.cs.meta │ ├── DistanceBench.cs │ ├── DistanceBench.cs.meta │ ├── ExternCallsBench.cs │ ├── ExternCallsBench.cs.meta │ ├── FindBench.cs │ ├── FindBench.cs.meta │ ├── LinqBench.cs │ ├── LinqBench.cs.meta │ ├── NonAllocBench.cs │ ├── NonAllocBench.cs.meta │ ├── OrderOfOperation.cs │ ├── OrderOfOperation.cs.meta │ ├── SendMessageBench.cs │ ├── SendMessageBench.cs.meta │ ├── StringBench.cs │ └── StringBench.cs.meta │ ├── Classes.meta │ └── Classes │ ├── BenchmarkBase.cs │ ├── BenchmarkBase.cs.meta │ ├── Runner.cs │ └── Runner.cs.meta ├── LICENSE ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── BurstAotSettings_WebGL.json ├── ClusterInputManager.asset ├── CommonBurstAotSettings.json ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset ├── XRSettings.asset └── boot.config └── README.md /.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/master/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 | # Asset meta data should only be ignored when the corresponding asset is also ignored 18 | !/[Aa]ssets/**/*.meta 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 | Recordings 50 | Library 51 | 52 | # Unity3D generated meta files 53 | *.pidb.meta 54 | *.pdb.meta 55 | *.mdb.meta 56 | 57 | # Unity3D generated file on crash reports 58 | sysinfo.txt 59 | 60 | # Builds 61 | *.apk 62 | *.aab 63 | *.unitypackage 64 | 65 | # Crashlytics generated file 66 | crashlytics-build.properties 67 | 68 | # Packed Addressables 69 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* 70 | 71 | # Temporary auto-generated Android Assets 72 | /[Aa]ssets/[Ss]treamingAssets/aa.meta 73 | /[Aa]ssets/[Ss]treamingAssets/aa/* -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d8849b1229095b74899ad05fcdbc3cd1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f54d1bd14bd3ca042bd867b519fee8cc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 243e06394e614e5d99fab26083b707fa 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Fonts & Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 731f1baa9d144a9897cb1d341c2092b8 3 | folderAsset: yes 4 | timeCreated: 1442040525 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Fonts & Materials/Cocogoose-Pro-Darkmode SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cf11f61ee78e8844eb3fd18c6f88557f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Fonts & Materials/Cocogoose-Pro-Darkmode SDF.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Cocogoose-Pro-Darkmode SDF 11 | m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} 12 | m_ShaderKeywords: UNDERLAY_ON 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _Cube: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _FaceTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _MainTex: 35 | m_Texture: {fileID: -870796325396185290, guid: cf11f61ee78e8844eb3fd18c6f88557f, type: 2} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _OutlineTex: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | m_Ints: [] 43 | m_Floats: 44 | - _Ambient: 0.5 45 | - _Bevel: 0.5 46 | - _BevelClamp: 0 47 | - _BevelOffset: 0 48 | - _BevelRoundness: 0 49 | - _BevelWidth: 0 50 | - _BumpFace: 0 51 | - _BumpOutline: 0 52 | - _ColorMask: 15 53 | - _CullMode: 0 54 | - _Diffuse: 0.5 55 | - _FaceDilate: 0.02 56 | - _FaceUVSpeedX: 0 57 | - _FaceUVSpeedY: 0 58 | - _GlowInner: 0.05 59 | - _GlowOffset: 0 60 | - _GlowOuter: 0.05 61 | - _GlowPower: 0.75 62 | - _GradientScale: 65 63 | - _LightAngle: 3.1416 64 | - _MaskSoftnessX: 0 65 | - _MaskSoftnessY: 0 66 | - _OutlineSoftness: 0 67 | - _OutlineUVSpeedX: 0 68 | - _OutlineUVSpeedY: 0 69 | - _OutlineWidth: 0.03 70 | - _PerspectiveFilter: 0.875 71 | - _Reflectivity: 10 72 | - _ScaleRatioA: 0.9846154 73 | - _ScaleRatioB: 0.7803077 74 | - _ScaleRatioC: 0.7803077 75 | - _ScaleX: 1 76 | - _ScaleY: 1 77 | - _ShaderFlags: 0 78 | - _Sharpness: 0 79 | - _SpecularPower: 2 80 | - _Stencil: 0 81 | - _StencilComp: 8 82 | - _StencilOp: 0 83 | - _StencilReadMask: 255 84 | - _StencilWriteMask: 255 85 | - _TextureHeight: 2048 86 | - _TextureWidth: 2048 87 | - _UnderlayDilate: 0 88 | - _UnderlayOffsetX: 0 89 | - _UnderlayOffsetY: -0.13 90 | - _UnderlaySoftness: 0 91 | - _VertexOffsetX: 0 92 | - _VertexOffsetY: 0 93 | - _WeightBold: 0.75 94 | - _WeightNormal: 0 95 | m_Colors: 96 | - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} 97 | - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} 98 | - _FaceColor: {r: 1, g: 1, b: 1, a: 1} 99 | - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} 100 | - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} 101 | - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} 102 | - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} 103 | - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} 104 | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} 105 | - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} 106 | m_BuildTextureStacks: [] 107 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Fonts & Materials/Cocogoose-Pro-Darkmode SDF.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4ea37ea97e26f6428723032c3d9e24f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/LineBreaking Following Characters.txt: -------------------------------------------------------------------------------- 1 | )]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fade42e8bc714b018fac513c043d323b 3 | timeCreated: 1425440388 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/LineBreaking Leading Characters.txt: -------------------------------------------------------------------------------- 1 | ([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇$¥₩ # -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d82c1b31c7e74239bff1220585707d2b 3 | timeCreated: 1425440388 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Style Sheets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4aecb92fff08436c8303b10eab8da368 3 | folderAsset: yes 4 | timeCreated: 1441876950 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 0 11 | m_Script: {fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410, type: 3} 12 | m_Name: Default Style Sheet 13 | m_EditorClassIdentifier: 14 | m_StyleList: 15 | - m_Name: H1 16 | m_HashCode: 2425 17 | m_OpeningDefinition: <#40ff80>* 18 | m_ClosingDefinition: '*' 19 | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 20 | m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 21 | - m_Name: Quote 22 | m_HashCode: 92254330 23 | m_OpeningDefinition: 24 | m_ClosingDefinition: 25 | m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 26 | m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 27 | - m_Name: Link 28 | m_HashCode: 2687968 29 | m_OpeningDefinition: <#40a0ff> 30 | m_ClosingDefinition: 31 | m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 32 | m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 33 | - m_Name: Title 34 | m_HashCode: 98732960 35 | m_OpeningDefinition: 36 | m_ClosingDefinition: 37 | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 38 | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 39 | - m_Name: H2 40 | m_HashCode: 2426 41 | m_OpeningDefinition: <#4080FF> 42 | m_ClosingDefinition: 43 | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 44 | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 45 | - m_Name: H3 46 | m_HashCode: 2427 47 | m_OpeningDefinition: <#FF8040> 48 | m_ClosingDefinition: 49 | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 50 | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 51 | - m_Name: C1 52 | m_HashCode: 2194 53 | m_OpeningDefinition: 54 | m_ClosingDefinition: 55 | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 56 | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 57 | - m_Name: C2 58 | m_HashCode: 2193 59 | m_OpeningDefinition: 60 | m_ClosingDefinition: 61 | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 62 | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 63 | - m_Name: C3 64 | m_HashCode: 2192 65 | m_OpeningDefinition: 66 | m_ClosingDefinition: 67 | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 68 | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 69 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f952c082cb03451daed3ee968ac6c63e 3 | timeCreated: 1432805430 4 | licenseType: Store 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/TMP Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391, type: 3} 13 | m_Name: TMP Settings 14 | m_EditorClassIdentifier: 15 | m_enableWordWrapping: 1 16 | m_enableKerning: 1 17 | m_enableExtraPadding: 0 18 | m_enableTintAllSprites: 0 19 | m_enableParseEscapeCharacters: 1 20 | m_EnableRaycastTarget: 1 21 | m_GetFontFeaturesAtRuntime: 1 22 | m_missingGlyphCharacter: 0 23 | m_warningsDisabled: 0 24 | m_defaultFontAsset: {fileID: 11400000, guid: cf11f61ee78e8844eb3fd18c6f88557f, type: 2} 25 | m_defaultFontAssetPath: Fonts & Materials/ 26 | m_defaultFontSize: 36 27 | m_defaultAutoSizeMinRatio: 0.5 28 | m_defaultAutoSizeMaxRatio: 2 29 | m_defaultTextMeshProTextContainerSize: {x: 20, y: 5} 30 | m_defaultTextMeshProUITextContainerSize: {x: 200, y: 50} 31 | m_autoSizeTextContainer: 0 32 | m_IsTextObjectScaleStatic: 0 33 | m_fallbackFontAssets: [] 34 | m_matchMaterialPreset: 1 35 | m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45, type: 2} 36 | m_defaultSpriteAssetPath: Sprite Assets/ 37 | m_enableEmojiSupport: 1 38 | m_MissingCharacterSpriteUnicode: 0 39 | m_defaultColorGradientPresetsPath: Color Gradient Presets/ 40 | m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e, type: 2} 41 | m_StyleSheetsResourcePath: 42 | m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} 43 | m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, type: 3} 44 | m_UseModernHangulLineBreakingRules: 0 45 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Resources/TMP Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3f5b5dff67a942289a9defa416b206f3 3 | timeCreated: 1436653997 4 | licenseType: Pro 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9f693669af91aa45ad615fc681ed29f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Bitmap Custom Atlas" { 2 | 3 | Properties { 4 | _MainTex ("Font Atlas", 2D) = "white" {} 5 | _FaceTex ("Font Texture", 2D) = "white" {} 6 | [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1) 7 | 8 | _VertexOffsetX ("Vertex OffsetX", float) = 0 9 | _VertexOffsetY ("Vertex OffsetY", float) = 0 10 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 11 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 12 | 13 | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 14 | _Padding ("Padding", float) = 0 15 | 16 | _StencilComp("Stencil Comparison", Float) = 8 17 | _Stencil("Stencil ID", Float) = 0 18 | _StencilOp("Stencil Operation", Float) = 0 19 | _StencilWriteMask("Stencil Write Mask", Float) = 255 20 | _StencilReadMask("Stencil Read Mask", Float) = 255 21 | 22 | _CullMode("Cull Mode", Float) = 0 23 | _ColorMask("Color Mask", Float) = 15 24 | } 25 | 26 | SubShader{ 27 | 28 | Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } 29 | 30 | Stencil 31 | { 32 | Ref[_Stencil] 33 | Comp[_StencilComp] 34 | Pass[_StencilOp] 35 | ReadMask[_StencilReadMask] 36 | WriteMask[_StencilWriteMask] 37 | } 38 | 39 | 40 | Lighting Off 41 | Cull [_CullMode] 42 | ZTest [unity_GUIZTestMode] 43 | ZWrite Off 44 | Fog { Mode Off } 45 | Blend SrcAlpha OneMinusSrcAlpha 46 | ColorMask[_ColorMask] 47 | 48 | Pass { 49 | CGPROGRAM 50 | #pragma vertex vert 51 | #pragma fragment frag 52 | 53 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 54 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 55 | 56 | 57 | #include "UnityCG.cginc" 58 | 59 | struct appdata_t { 60 | float4 vertex : POSITION; 61 | fixed4 color : COLOR; 62 | float2 texcoord0 : TEXCOORD0; 63 | float2 texcoord1 : TEXCOORD1; 64 | }; 65 | 66 | struct v2f { 67 | float4 vertex : SV_POSITION; 68 | fixed4 color : COLOR; 69 | float2 texcoord0 : TEXCOORD0; 70 | float2 texcoord1 : TEXCOORD1; 71 | float4 mask : TEXCOORD2; 72 | }; 73 | 74 | uniform sampler2D _MainTex; 75 | uniform sampler2D _FaceTex; 76 | uniform float4 _FaceTex_ST; 77 | uniform fixed4 _FaceColor; 78 | 79 | uniform float _VertexOffsetX; 80 | uniform float _VertexOffsetY; 81 | uniform float4 _ClipRect; 82 | uniform float _MaskSoftnessX; 83 | uniform float _MaskSoftnessY; 84 | 85 | float2 UnpackUV(float uv) 86 | { 87 | float2 output; 88 | output.x = floor(uv / 4096); 89 | output.y = uv - 4096 * output.x; 90 | 91 | return output * 0.001953125; 92 | } 93 | 94 | v2f vert (appdata_t v) 95 | { 96 | float4 vert = v.vertex; 97 | vert.x += _VertexOffsetX; 98 | vert.y += _VertexOffsetY; 99 | 100 | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; 101 | 102 | float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); 103 | 104 | fixed4 faceColor = v.color; 105 | faceColor *= _FaceColor; 106 | 107 | v2f OUT; 108 | OUT.vertex = vPosition; 109 | OUT.color = faceColor; 110 | OUT.texcoord0 = v.texcoord0; 111 | OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); 112 | float2 pixelSize = vPosition.w; 113 | pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); 114 | 115 | // Clamp _ClipRect to 16bit. 116 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 117 | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 118 | 119 | return OUT; 120 | } 121 | 122 | fixed4 frag (v2f IN) : SV_Target 123 | { 124 | fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; 125 | 126 | // Alternative implementation to UnityGet2DClipping with support for softness. 127 | #if UNITY_UI_CLIP_RECT 128 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); 129 | color *= m.x * m.y; 130 | #endif 131 | 132 | #if UNITY_UI_ALPHACLIP 133 | clip(color.a - 0.001); 134 | #endif 135 | 136 | return color; 137 | } 138 | ENDCG 139 | } 140 | } 141 | 142 | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" 143 | } 144 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 48bb5f55d8670e349b6e614913f9d910 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Mobile/Bitmap" { 2 | 3 | Properties { 4 | _MainTex ("Font Atlas", 2D) = "white" {} 5 | [HDR]_Color ("Text Color", Color) = (1,1,1,1) 6 | _DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 7 | 8 | _VertexOffsetX("Vertex OffsetX", float) = 0 9 | _VertexOffsetY("Vertex OffsetY", float) = 0 10 | _MaskSoftnessX("Mask SoftnessX", float) = 0 11 | _MaskSoftnessY("Mask SoftnessY", float) = 0 12 | 13 | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 14 | 15 | _StencilComp("Stencil Comparison", Float) = 8 16 | _Stencil("Stencil ID", Float) = 0 17 | _StencilOp("Stencil Operation", Float) = 0 18 | _StencilWriteMask("Stencil Write Mask", Float) = 255 19 | _StencilReadMask("Stencil Read Mask", Float) = 255 20 | 21 | _CullMode("Cull Mode", Float) = 0 22 | _ColorMask("Color Mask", Float) = 15 23 | } 24 | 25 | SubShader { 26 | 27 | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } 28 | 29 | Stencil 30 | { 31 | Ref[_Stencil] 32 | Comp[_StencilComp] 33 | Pass[_StencilOp] 34 | ReadMask[_StencilReadMask] 35 | WriteMask[_StencilWriteMask] 36 | } 37 | 38 | 39 | Lighting Off 40 | Cull [_CullMode] 41 | ZTest [unity_GUIZTestMode] 42 | ZWrite Off 43 | Fog { Mode Off } 44 | Blend SrcAlpha OneMinusSrcAlpha 45 | ColorMask[_ColorMask] 46 | 47 | Pass { 48 | CGPROGRAM 49 | #pragma vertex vert 50 | #pragma fragment frag 51 | #pragma fragmentoption ARB_precision_hint_fastest 52 | 53 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 54 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 55 | 56 | 57 | #include "UnityCG.cginc" 58 | 59 | struct appdata_t { 60 | float4 vertex : POSITION; 61 | fixed4 color : COLOR; 62 | float2 texcoord0 : TEXCOORD0; 63 | float2 texcoord1 : TEXCOORD1; 64 | }; 65 | 66 | struct v2f { 67 | float4 vertex : POSITION; 68 | fixed4 color : COLOR; 69 | float2 texcoord0 : TEXCOORD0; 70 | float4 mask : TEXCOORD2; 71 | }; 72 | 73 | sampler2D _MainTex; 74 | fixed4 _Color; 75 | float _DiffusePower; 76 | 77 | uniform float _VertexOffsetX; 78 | uniform float _VertexOffsetY; 79 | uniform float4 _ClipRect; 80 | uniform float _MaskSoftnessX; 81 | uniform float _MaskSoftnessY; 82 | 83 | v2f vert (appdata_t v) 84 | { 85 | v2f OUT; 86 | float4 vert = v.vertex; 87 | vert.x += _VertexOffsetX; 88 | vert.y += _VertexOffsetY; 89 | 90 | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; 91 | 92 | OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); 93 | OUT.color = v.color; 94 | OUT.color *= _Color; 95 | OUT.color.rgb *= _DiffusePower; 96 | OUT.texcoord0 = v.texcoord0; 97 | 98 | float2 pixelSize = OUT.vertex.w; 99 | //pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); 100 | 101 | // Clamp _ClipRect to 16bit. 102 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 103 | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 104 | 105 | return OUT; 106 | } 107 | 108 | fixed4 frag (v2f IN) : COLOR 109 | { 110 | fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); 111 | 112 | // Alternative implementation to UnityGet2DClipping with support for softness. 113 | #if UNITY_UI_CLIP_RECT 114 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); 115 | color *= m.x * m.y; 116 | #endif 117 | 118 | #if UNITY_UI_ALPHACLIP 119 | clip(color.a - 0.001); 120 | #endif 121 | 122 | return color; 123 | } 124 | ENDCG 125 | } 126 | } 127 | 128 | SubShader { 129 | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } 130 | Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } 131 | Blend SrcAlpha OneMinusSrcAlpha 132 | BindChannels { 133 | Bind "Color", color 134 | Bind "Vertex", vertex 135 | Bind "TexCoord", texcoord0 136 | } 137 | Pass { 138 | SetTexture [_MainTex] { 139 | constantColor [_Color] combine constant * primary, constant * texture 140 | } 141 | } 142 | } 143 | 144 | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" 145 | } 146 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e3b057af24249748ff873be7fafee47 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Bitmap" { 2 | 3 | Properties { 4 | _MainTex ("Font Atlas", 2D) = "white" {} 5 | _FaceTex ("Font Texture", 2D) = "white" {} 6 | [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1) 7 | 8 | _VertexOffsetX ("Vertex OffsetX", float) = 0 9 | _VertexOffsetY ("Vertex OffsetY", float) = 0 10 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 11 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 12 | 13 | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 14 | 15 | _StencilComp("Stencil Comparison", Float) = 8 16 | _Stencil("Stencil ID", Float) = 0 17 | _StencilOp("Stencil Operation", Float) = 0 18 | _StencilWriteMask("Stencil Write Mask", Float) = 255 19 | _StencilReadMask("Stencil Read Mask", Float) = 255 20 | 21 | _CullMode("Cull Mode", Float) = 0 22 | _ColorMask("Color Mask", Float) = 15 23 | } 24 | 25 | SubShader{ 26 | 27 | Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } 28 | 29 | Stencil 30 | { 31 | Ref[_Stencil] 32 | Comp[_StencilComp] 33 | Pass[_StencilOp] 34 | ReadMask[_StencilReadMask] 35 | WriteMask[_StencilWriteMask] 36 | } 37 | 38 | 39 | Lighting Off 40 | Cull [_CullMode] 41 | ZTest [unity_GUIZTestMode] 42 | ZWrite Off 43 | Fog { Mode Off } 44 | Blend SrcAlpha OneMinusSrcAlpha 45 | ColorMask[_ColorMask] 46 | 47 | Pass { 48 | CGPROGRAM 49 | #pragma vertex vert 50 | #pragma fragment frag 51 | 52 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 53 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 54 | 55 | 56 | #include "UnityCG.cginc" 57 | 58 | struct appdata_t { 59 | float4 vertex : POSITION; 60 | fixed4 color : COLOR; 61 | float2 texcoord0 : TEXCOORD0; 62 | float2 texcoord1 : TEXCOORD1; 63 | }; 64 | 65 | struct v2f { 66 | float4 vertex : SV_POSITION; 67 | fixed4 color : COLOR; 68 | float2 texcoord0 : TEXCOORD0; 69 | float2 texcoord1 : TEXCOORD1; 70 | float4 mask : TEXCOORD2; 71 | }; 72 | 73 | uniform sampler2D _MainTex; 74 | uniform sampler2D _FaceTex; 75 | uniform float4 _FaceTex_ST; 76 | uniform fixed4 _FaceColor; 77 | 78 | uniform float _VertexOffsetX; 79 | uniform float _VertexOffsetY; 80 | uniform float4 _ClipRect; 81 | uniform float _MaskSoftnessX; 82 | uniform float _MaskSoftnessY; 83 | 84 | float2 UnpackUV(float uv) 85 | { 86 | float2 output; 87 | output.x = floor(uv / 4096); 88 | output.y = uv - 4096 * output.x; 89 | 90 | return output * 0.001953125; 91 | } 92 | 93 | v2f vert (appdata_t v) 94 | { 95 | float4 vert = v.vertex; 96 | vert.x += _VertexOffsetX; 97 | vert.y += _VertexOffsetY; 98 | 99 | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; 100 | 101 | float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); 102 | 103 | fixed4 faceColor = v.color; 104 | faceColor *= _FaceColor; 105 | 106 | v2f OUT; 107 | OUT.vertex = vPosition; 108 | OUT.color = faceColor; 109 | OUT.texcoord0 = v.texcoord0; 110 | OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); 111 | float2 pixelSize = vPosition.w; 112 | pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); 113 | 114 | // Clamp _ClipRect to 16bit. 115 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 116 | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 117 | 118 | return OUT; 119 | } 120 | 121 | fixed4 frag (v2f IN) : SV_Target 122 | { 123 | fixed4 color = tex2D(_MainTex, IN.texcoord0); 124 | color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); 125 | 126 | // Alternative implementation to UnityGet2DClipping with support for softness. 127 | #if UNITY_UI_CLIP_RECT 128 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); 129 | color *= m.x * m.y; 130 | #endif 131 | 132 | #if UNITY_UI_ALPHACLIP 133 | clip(color.a - 0.001); 134 | #endif 135 | 136 | return color; 137 | } 138 | ENDCG 139 | } 140 | } 141 | 142 | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" 143 | } 144 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 128e987d567d4e2c824d754223b3f3b0 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF Overlay.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Distance Field Overlay" { 2 | 3 | Properties { 4 | _FaceTex ("Face Texture", 2D) = "white" {} 5 | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 6 | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 7 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 8 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 9 | 10 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 11 | _OutlineTex ("Outline Texture", 2D) = "white" {} 12 | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 13 | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 14 | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 15 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 16 | 17 | _Bevel ("Bevel", Range(0,1)) = 0.5 18 | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 19 | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 20 | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 21 | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 22 | 23 | _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 24 | [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1) 25 | _SpecularPower ("Specular", Range(0,4)) = 2.0 26 | _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 27 | _Diffuse ("Diffuse", Range(0,1)) = 0.5 28 | _Ambient ("Ambient", Range(1,0)) = 0.5 29 | 30 | _BumpMap ("Normal map", 2D) = "bump" {} 31 | _BumpOutline ("Bump Outline", Range(0,1)) = 0 32 | _BumpFace ("Bump Face", Range(0,1)) = 0 33 | 34 | _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) 35 | _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) 36 | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } 37 | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) 38 | 39 | 40 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) 41 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 42 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 43 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 44 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 45 | 46 | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) 47 | _GlowOffset ("Offset", Range(-1,1)) = 0 48 | _GlowInner ("Inner", Range(0,1)) = 0.05 49 | _GlowOuter ("Outer", Range(0,1)) = 0.05 50 | _GlowPower ("Falloff", Range(1, 0)) = 0.75 51 | 52 | _WeightNormal ("Weight Normal", float) = 0 53 | _WeightBold ("Weight Bold", float) = 0.5 54 | 55 | _ShaderFlags ("Flags", float) = 0 56 | _ScaleRatioA ("Scale RatioA", float) = 1 57 | _ScaleRatioB ("Scale RatioB", float) = 1 58 | _ScaleRatioC ("Scale RatioC", float) = 1 59 | 60 | _MainTex ("Font Atlas", 2D) = "white" {} 61 | _TextureWidth ("Texture Width", float) = 512 62 | _TextureHeight ("Texture Height", float) = 512 63 | _GradientScale ("Gradient Scale", float) = 5.0 64 | _ScaleX ("Scale X", float) = 1.0 65 | _ScaleY ("Scale Y", float) = 1.0 66 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 67 | _Sharpness ("Sharpness", Range(-1,1)) = 0 68 | 69 | _VertexOffsetX ("Vertex OffsetX", float) = 0 70 | _VertexOffsetY ("Vertex OffsetY", float) = 0 71 | 72 | _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) 73 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 74 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 75 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 76 | 77 | _StencilComp ("Stencil Comparison", Float) = 8 78 | _Stencil ("Stencil ID", Float) = 0 79 | _StencilOp ("Stencil Operation", Float) = 0 80 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 81 | _StencilReadMask ("Stencil Read Mask", Float) = 255 82 | 83 | _CullMode ("Cull Mode", Float) = 0 84 | _ColorMask ("Color Mask", Float) = 15 85 | } 86 | 87 | SubShader { 88 | 89 | Tags 90 | { 91 | "Queue"="Overlay" 92 | "IgnoreProjector"="True" 93 | "RenderType"="Transparent" 94 | } 95 | 96 | Stencil 97 | { 98 | Ref [_Stencil] 99 | Comp [_StencilComp] 100 | Pass [_StencilOp] 101 | ReadMask [_StencilReadMask] 102 | WriteMask [_StencilWriteMask] 103 | } 104 | 105 | Cull [_CullMode] 106 | ZWrite Off 107 | Lighting Off 108 | Fog { Mode Off } 109 | ZTest Always 110 | Blend One OneMinusSrcAlpha 111 | ColorMask [_ColorMask] 112 | 113 | Pass { 114 | CGPROGRAM 115 | #pragma target 3.0 116 | #pragma vertex VertShader 117 | #pragma fragment PixShader 118 | #pragma shader_feature __ BEVEL_ON 119 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 120 | #pragma shader_feature __ GLOW_ON 121 | 122 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 123 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 124 | 125 | #include "UnityCG.cginc" 126 | #include "UnityUI.cginc" 127 | #include "TMPro_Properties.cginc" 128 | #include "TMPro.cginc" 129 | 130 | struct vertex_t { 131 | UNITY_VERTEX_INPUT_INSTANCE_ID 132 | float4 position : POSITION; 133 | float3 normal : NORMAL; 134 | fixed4 color : COLOR; 135 | float2 texcoord0 : TEXCOORD0; 136 | float2 texcoord1 : TEXCOORD1; 137 | }; 138 | 139 | 140 | struct pixel_t { 141 | UNITY_VERTEX_INPUT_INSTANCE_ID 142 | UNITY_VERTEX_OUTPUT_STEREO 143 | float4 position : SV_POSITION; 144 | fixed4 color : COLOR; 145 | float2 atlas : TEXCOORD0; // Atlas 146 | float4 param : TEXCOORD1; // alphaClip, scale, bias, weight 147 | float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) 148 | float3 viewDir : TEXCOORD3; 149 | 150 | #if (UNDERLAY_ON || UNDERLAY_INNER) 151 | float4 texcoord2 : TEXCOORD4; // u,v, scale, bias 152 | fixed4 underlayColor : COLOR1; 153 | #endif 154 | float4 textures : TEXCOORD5; 155 | }; 156 | 157 | // Used by Unity internally to handle Texture Tiling and Offset. 158 | float4 _FaceTex_ST; 159 | float4 _OutlineTex_ST; 160 | 161 | pixel_t VertShader(vertex_t input) 162 | { 163 | pixel_t output; 164 | 165 | UNITY_INITIALIZE_OUTPUT(pixel_t, output); 166 | UNITY_SETUP_INSTANCE_ID(input); 167 | UNITY_TRANSFER_INSTANCE_ID(input,output); 168 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 169 | 170 | float bold = step(input.texcoord1.y, 0); 171 | 172 | float4 vert = input.position; 173 | vert.x += _VertexOffsetX; 174 | vert.y += _VertexOffsetY; 175 | 176 | float4 vPosition = UnityObjectToClipPos(vert); 177 | 178 | float2 pixelSize = vPosition.w; 179 | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); 180 | float scale = rsqrt(dot(pixelSize, pixelSize)); 181 | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); 182 | if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 183 | 184 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 185 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 186 | 187 | float bias =(.5 - weight) + (.5 / scale); 188 | 189 | float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); 190 | 191 | #if GLOW_ON 192 | alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); 193 | #endif 194 | 195 | alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; 196 | 197 | #if (UNDERLAY_ON || UNDERLAY_INNER) 198 | float4 underlayColor = _UnderlayColor; 199 | underlayColor.rgb *= underlayColor.a; 200 | 201 | float bScale = scale; 202 | bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); 203 | float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); 204 | 205 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 206 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 207 | float2 bOffset = float2(x, y); 208 | #endif 209 | 210 | // Generate UV for the Masking Texture 211 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 212 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 213 | 214 | // Support for texture tiling and offset 215 | float2 textureUV = UnpackUV(input.texcoord1.x); 216 | float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); 217 | float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); 218 | 219 | 220 | output.position = vPosition; 221 | output.color = input.color; 222 | output.atlas = input.texcoord0; 223 | output.param = float4(alphaClip, scale, bias, weight); 224 | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 225 | output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); 226 | #if (UNDERLAY_ON || UNDERLAY_INNER) 227 | output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); 228 | output.underlayColor = underlayColor; 229 | #endif 230 | output.textures = float4(faceUV, outlineUV); 231 | 232 | return output; 233 | } 234 | 235 | 236 | fixed4 PixShader(pixel_t input) : SV_Target 237 | { 238 | UNITY_SETUP_INSTANCE_ID(input); 239 | 240 | float c = tex2D(_MainTex, input.atlas).a; 241 | 242 | #ifndef UNDERLAY_ON 243 | clip(c - input.param.x); 244 | #endif 245 | 246 | float scale = input.param.y; 247 | float bias = input.param.z; 248 | float weight = input.param.w; 249 | float sd = (bias - c) * scale; 250 | 251 | float outline = (_OutlineWidth * _ScaleRatioA) * scale; 252 | float softness = (_OutlineSoftness * _ScaleRatioA) * scale; 253 | 254 | half4 faceColor = _FaceColor; 255 | half4 outlineColor = _OutlineColor; 256 | 257 | faceColor.rgb *= input.color.rgb; 258 | 259 | faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); 260 | outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); 261 | 262 | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); 263 | 264 | #if BEVEL_ON 265 | float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); 266 | float3 n = GetSurfaceNormal(input.atlas, weight, dxy); 267 | 268 | float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; 269 | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); 270 | n = normalize(n- bump); 271 | 272 | float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); 273 | 274 | float3 col = GetSpecular(n, light); 275 | faceColor.rgb += col*faceColor.a; 276 | faceColor.rgb *= 1-(dot(n, light)*_Diffuse); 277 | faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); 278 | 279 | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); 280 | faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; 281 | #endif 282 | 283 | #if UNDERLAY_ON 284 | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; 285 | faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); 286 | #endif 287 | 288 | #if UNDERLAY_INNER 289 | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; 290 | faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); 291 | #endif 292 | 293 | #if GLOW_ON 294 | float4 glowColor = GetGlowColor(sd, scale); 295 | faceColor.rgb += glowColor.rgb * glowColor.a; 296 | #endif 297 | 298 | // Alternative implementation to UnityGet2DClipping with support for softness. 299 | #if UNITY_UI_CLIP_RECT 300 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); 301 | faceColor *= m.x * m.y; 302 | #endif 303 | 304 | #if UNITY_UI_ALPHACLIP 305 | clip(faceColor.a - 0.001); 306 | #endif 307 | 308 | return faceColor * input.color.a; 309 | } 310 | 311 | ENDCG 312 | } 313 | } 314 | 315 | Fallback "TextMeshPro/Mobile/Distance Field" 316 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 317 | } 318 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd89cf5b9246416f84610a006f916af7 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 14eb328de4b8eb245bb7cea29e4ac00b 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader: -------------------------------------------------------------------------------- 1 | // Simplified SDF shader: 2 | // - No Shading Option (bevel / bump / env map) 3 | // - No Glow Option 4 | // - Softness is applied on both side of the outline 5 | 6 | Shader "TextMeshPro/Mobile/Distance Field - Masking" { 7 | 8 | Properties { 9 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 10 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 11 | 12 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 13 | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 14 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 15 | 16 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) 17 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 18 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 19 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 20 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 21 | 22 | _WeightNormal ("Weight Normal", float) = 0 23 | _WeightBold ("Weight Bold", float) = .5 24 | 25 | _ShaderFlags ("Flags", float) = 0 26 | _ScaleRatioA ("Scale RatioA", float) = 1 27 | _ScaleRatioB ("Scale RatioB", float) = 1 28 | _ScaleRatioC ("Scale RatioC", float) = 1 29 | 30 | _MainTex ("Font Atlas", 2D) = "white" {} 31 | _TextureWidth ("Texture Width", float) = 512 32 | _TextureHeight ("Texture Height", float) = 512 33 | _GradientScale ("Gradient Scale", float) = 5 34 | _ScaleX ("Scale X", float) = 1 35 | _ScaleY ("Scale Y", float) = 1 36 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 37 | _Sharpness ("Sharpness", Range(-1,1)) = 0 38 | 39 | _VertexOffsetX ("Vertex OffsetX", float) = 0 40 | _VertexOffsetY ("Vertex OffsetY", float) = 0 41 | 42 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 43 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 44 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 45 | _MaskTex ("Mask Texture", 2D) = "white" {} 46 | _MaskInverse ("Inverse", float) = 0 47 | _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) 48 | _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 49 | _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 50 | 51 | _StencilComp ("Stencil Comparison", Float) = 8 52 | _Stencil ("Stencil ID", Float) = 0 53 | _StencilOp ("Stencil Operation", Float) = 0 54 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 55 | _StencilReadMask ("Stencil Read Mask", Float) = 255 56 | 57 | _CullMode ("Cull Mode", Float) = 0 58 | _ColorMask ("Color Mask", Float) = 15 59 | } 60 | 61 | SubShader { 62 | Tags 63 | { 64 | "Queue"="Transparent" 65 | "IgnoreProjector"="True" 66 | "RenderType"="Transparent" 67 | } 68 | 69 | 70 | Stencil 71 | { 72 | Ref [_Stencil] 73 | Comp [_StencilComp] 74 | Pass [_StencilOp] 75 | ReadMask [_StencilReadMask] 76 | WriteMask [_StencilWriteMask] 77 | } 78 | 79 | Cull [_CullMode] 80 | ZWrite Off 81 | Lighting Off 82 | Fog { Mode Off } 83 | ZTest [unity_GUIZTestMode] 84 | Blend One OneMinusSrcAlpha 85 | ColorMask [_ColorMask] 86 | 87 | Pass { 88 | CGPROGRAM 89 | #pragma vertex VertShader 90 | #pragma fragment PixShader 91 | #pragma shader_feature __ OUTLINE_ON 92 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 93 | 94 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 95 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 96 | 97 | 98 | #include "UnityCG.cginc" 99 | #include "UnityUI.cginc" 100 | #include "TMPro_Properties.cginc" 101 | 102 | struct vertex_t { 103 | float4 vertex : POSITION; 104 | float3 normal : NORMAL; 105 | fixed4 color : COLOR; 106 | float2 texcoord0 : TEXCOORD0; 107 | float2 texcoord1 : TEXCOORD1; 108 | }; 109 | 110 | struct pixel_t { 111 | float4 vertex : SV_POSITION; 112 | fixed4 faceColor : COLOR; 113 | fixed4 outlineColor : COLOR1; 114 | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV 115 | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) 116 | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) 117 | #if (UNDERLAY_ON | UNDERLAY_INNER) 118 | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved 119 | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) 120 | #endif 121 | }; 122 | 123 | float _MaskWipeControl; 124 | float _MaskEdgeSoftness; 125 | fixed4 _MaskEdgeColor; 126 | bool _MaskInverse; 127 | 128 | pixel_t VertShader(vertex_t input) 129 | { 130 | float bold = step(input.texcoord1.y, 0); 131 | 132 | float4 vert = input.vertex; 133 | vert.x += _VertexOffsetX; 134 | vert.y += _VertexOffsetY; 135 | float4 vPosition = UnityObjectToClipPos(vert); 136 | 137 | float2 pixelSize = vPosition.w; 138 | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); 139 | 140 | float scale = rsqrt(dot(pixelSize, pixelSize)); 141 | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); 142 | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 143 | 144 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 145 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 146 | 147 | float layerScale = scale; 148 | 149 | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); 150 | float bias = (0.5 - weight) * scale - 0.5; 151 | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; 152 | 153 | float opacity = input.color.a; 154 | #if (UNDERLAY_ON | UNDERLAY_INNER) 155 | opacity = 1.0; 156 | #endif 157 | 158 | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; 159 | faceColor.rgb *= faceColor.a; 160 | 161 | fixed4 outlineColor = _OutlineColor; 162 | outlineColor.a *= opacity; 163 | outlineColor.rgb *= outlineColor.a; 164 | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); 165 | 166 | #if (UNDERLAY_ON | UNDERLAY_INNER) 167 | 168 | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); 169 | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); 170 | 171 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 172 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 173 | float2 layerOffset = float2(x, y); 174 | #endif 175 | 176 | // Generate UV for the Masking Texture 177 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 178 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 179 | 180 | // Structure for pixel shader 181 | pixel_t output = { 182 | vPosition, 183 | faceColor, 184 | outlineColor, 185 | float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), 186 | half4(scale, bias - outline, bias + outline, bias), 187 | half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), 188 | #if (UNDERLAY_ON | UNDERLAY_INNER) 189 | float4(input.texcoord0 + layerOffset, input.color.a, 0), 190 | half2(layerScale, layerBias), 191 | #endif 192 | }; 193 | 194 | return output; 195 | } 196 | 197 | 198 | // PIXEL SHADER 199 | fixed4 PixShader(pixel_t input) : SV_Target 200 | { 201 | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; 202 | half4 c = input.faceColor * saturate(d - input.param.w); 203 | 204 | #ifdef OUTLINE_ON 205 | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); 206 | c *= saturate(d - input.param.y); 207 | #endif 208 | 209 | #if UNDERLAY_ON 210 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 211 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); 212 | #endif 213 | 214 | #if UNDERLAY_INNER 215 | half sd = saturate(d - input.param.z); 216 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 217 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); 218 | #endif 219 | 220 | // Alternative implementation to UnityGet2DClipping with support for softness. 221 | //#if UNITY_UI_CLIP_RECT 222 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); 223 | c *= m.x * m.y; 224 | //#endif 225 | 226 | float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); 227 | float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; 228 | a = saturate(t / _MaskEdgeSoftness); 229 | c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); 230 | c *= a; 231 | 232 | #if (UNDERLAY_ON | UNDERLAY_INNER) 233 | c *= input.texcoord1.z; 234 | #endif 235 | 236 | #if UNITY_UI_ALPHACLIP 237 | clip(c.a - 0.001); 238 | #endif 239 | 240 | return c; 241 | } 242 | ENDCG 243 | } 244 | } 245 | 246 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 247 | } 248 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc1ede39bf3643ee8e493720e4259791 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader: -------------------------------------------------------------------------------- 1 | // Simplified SDF shader: 2 | // - No Shading Option (bevel / bump / env map) 3 | // - No Glow Option 4 | // - Softness is applied on both side of the outline 5 | 6 | Shader "TextMeshPro/Mobile/Distance Field Overlay" { 7 | 8 | Properties { 9 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 10 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 11 | 12 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 13 | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 14 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 15 | 16 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) 17 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 18 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 19 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 20 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 21 | 22 | _WeightNormal ("Weight Normal", float) = 0 23 | _WeightBold ("Weight Bold", float) = .5 24 | 25 | _ShaderFlags ("Flags", float) = 0 26 | _ScaleRatioA ("Scale RatioA", float) = 1 27 | _ScaleRatioB ("Scale RatioB", float) = 1 28 | _ScaleRatioC ("Scale RatioC", float) = 1 29 | 30 | _MainTex ("Font Atlas", 2D) = "white" {} 31 | _TextureWidth ("Texture Width", float) = 512 32 | _TextureHeight ("Texture Height", float) = 512 33 | _GradientScale ("Gradient Scale", float) = 5 34 | _ScaleX ("Scale X", float) = 1 35 | _ScaleY ("Scale Y", float) = 1 36 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 37 | _Sharpness ("Sharpness", Range(-1,1)) = 0 38 | 39 | _VertexOffsetX ("Vertex OffsetX", float) = 0 40 | _VertexOffsetY ("Vertex OffsetY", float) = 0 41 | 42 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 43 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 44 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 45 | 46 | _StencilComp ("Stencil Comparison", Float) = 8 47 | _Stencil ("Stencil ID", Float) = 0 48 | _StencilOp ("Stencil Operation", Float) = 0 49 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 50 | _StencilReadMask ("Stencil Read Mask", Float) = 255 51 | 52 | _CullMode ("Cull Mode", Float) = 0 53 | _ColorMask ("Color Mask", Float) = 15 54 | } 55 | 56 | SubShader { 57 | Tags 58 | { 59 | "Queue"="Overlay" 60 | "IgnoreProjector"="True" 61 | "RenderType"="Transparent" 62 | } 63 | 64 | 65 | Stencil 66 | { 67 | Ref [_Stencil] 68 | Comp [_StencilComp] 69 | Pass [_StencilOp] 70 | ReadMask [_StencilReadMask] 71 | WriteMask [_StencilWriteMask] 72 | } 73 | 74 | Cull [_CullMode] 75 | ZWrite Off 76 | Lighting Off 77 | Fog { Mode Off } 78 | ZTest Always 79 | Blend One OneMinusSrcAlpha 80 | ColorMask [_ColorMask] 81 | 82 | Pass { 83 | CGPROGRAM 84 | #pragma vertex VertShader 85 | #pragma fragment PixShader 86 | #pragma shader_feature __ OUTLINE_ON 87 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 88 | 89 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 90 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 91 | 92 | #include "UnityCG.cginc" 93 | #include "UnityUI.cginc" 94 | #include "TMPro_Properties.cginc" 95 | 96 | struct vertex_t { 97 | UNITY_VERTEX_INPUT_INSTANCE_ID 98 | float4 vertex : POSITION; 99 | float3 normal : NORMAL; 100 | fixed4 color : COLOR; 101 | float2 texcoord0 : TEXCOORD0; 102 | float2 texcoord1 : TEXCOORD1; 103 | }; 104 | 105 | struct pixel_t { 106 | UNITY_VERTEX_INPUT_INSTANCE_ID 107 | UNITY_VERTEX_OUTPUT_STEREO 108 | float4 vertex : SV_POSITION; 109 | fixed4 faceColor : COLOR; 110 | fixed4 outlineColor : COLOR1; 111 | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV 112 | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) 113 | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) 114 | #if (UNDERLAY_ON | UNDERLAY_INNER) 115 | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved 116 | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) 117 | #endif 118 | }; 119 | 120 | 121 | pixel_t VertShader(vertex_t input) 122 | { 123 | pixel_t output; 124 | 125 | UNITY_INITIALIZE_OUTPUT(pixel_t, output); 126 | UNITY_SETUP_INSTANCE_ID(input); 127 | UNITY_TRANSFER_INSTANCE_ID(input, output); 128 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 129 | 130 | float bold = step(input.texcoord1.y, 0); 131 | 132 | float4 vert = input.vertex; 133 | vert.x += _VertexOffsetX; 134 | vert.y += _VertexOffsetY; 135 | float4 vPosition = UnityObjectToClipPos(vert); 136 | 137 | float2 pixelSize = vPosition.w; 138 | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); 139 | 140 | float scale = rsqrt(dot(pixelSize, pixelSize)); 141 | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); 142 | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 143 | 144 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 145 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 146 | 147 | float layerScale = scale; 148 | 149 | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); 150 | float bias = (0.5 - weight) * scale - 0.5; 151 | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; 152 | 153 | float opacity = input.color.a; 154 | #if (UNDERLAY_ON | UNDERLAY_INNER) 155 | opacity = 1.0; 156 | #endif 157 | 158 | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; 159 | faceColor.rgb *= faceColor.a; 160 | 161 | fixed4 outlineColor = _OutlineColor; 162 | outlineColor.a *= opacity; 163 | outlineColor.rgb *= outlineColor.a; 164 | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); 165 | 166 | #if (UNDERLAY_ON | UNDERLAY_INNER) 167 | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); 168 | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); 169 | 170 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 171 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 172 | float2 layerOffset = float2(x, y); 173 | #endif 174 | 175 | // Generate UV for the Masking Texture 176 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 177 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 178 | 179 | // Populate structure for pixel shader 180 | output.vertex = vPosition; 181 | output.faceColor = faceColor; 182 | output.outlineColor = outlineColor; 183 | output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); 184 | output.param = half4(scale, bias - outline, bias + outline, bias); 185 | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 186 | #if (UNDERLAY_ON || UNDERLAY_INNER) 187 | output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); 188 | output.underlayParam = half2(layerScale, layerBias); 189 | #endif 190 | 191 | return output; 192 | } 193 | 194 | 195 | // PIXEL SHADER 196 | fixed4 PixShader(pixel_t input) : SV_Target 197 | { 198 | UNITY_SETUP_INSTANCE_ID(input); 199 | 200 | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; 201 | half4 c = input.faceColor * saturate(d - input.param.w); 202 | 203 | #ifdef OUTLINE_ON 204 | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); 205 | c *= saturate(d - input.param.y); 206 | #endif 207 | 208 | #if UNDERLAY_ON 209 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 210 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); 211 | #endif 212 | 213 | #if UNDERLAY_INNER 214 | half sd = saturate(d - input.param.z); 215 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 216 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); 217 | #endif 218 | 219 | // Alternative implementation to UnityGet2DClipping with support for softness. 220 | #if UNITY_UI_CLIP_RECT 221 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); 222 | c *= m.x * m.y; 223 | #endif 224 | 225 | #if (UNDERLAY_ON | UNDERLAY_INNER) 226 | c *= input.texcoord1.z; 227 | #endif 228 | 229 | #if UNITY_UI_ALPHACLIP 230 | clip(c.a - 0.001); 231 | #endif 232 | 233 | return c; 234 | } 235 | ENDCG 236 | } 237 | } 238 | 239 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 240 | } 241 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a02a7d8c237544f1962732b55a9aebf1 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader: -------------------------------------------------------------------------------- 1 | // Simplified SDF shader: 2 | // - No Shading Option (bevel / bump / env map) 3 | // - No Glow Option 4 | // - Softness is applied on both side of the outline 5 | 6 | Shader "TextMeshPro/Mobile/Distance Field SSD" { 7 | 8 | Properties { 9 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 10 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 11 | 12 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 13 | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 14 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 15 | 16 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) 17 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 18 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 19 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 20 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 21 | 22 | _WeightNormal ("Weight Normal", float) = 0 23 | _WeightBold ("Weight Bold", float) = .5 24 | 25 | _ShaderFlags ("Flags", float) = 0 26 | _ScaleRatioA ("Scale RatioA", float) = 1 27 | _ScaleRatioB ("Scale RatioB", float) = 1 28 | _ScaleRatioC ("Scale RatioC", float) = 1 29 | 30 | _MainTex ("Font Atlas", 2D) = "white" {} 31 | _TextureWidth ("Texture Width", float) = 512 32 | _TextureHeight ("Texture Height", float) = 512 33 | _GradientScale ("Gradient Scale", float) = 5 34 | _ScaleX ("Scale X", float) = 1 35 | _ScaleY ("Scale Y", float) = 1 36 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 37 | _Sharpness ("Sharpness", Range(-1,1)) = 0 38 | 39 | _VertexOffsetX ("Vertex OffsetX", float) = 0 40 | _VertexOffsetY ("Vertex OffsetY", float) = 0 41 | 42 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 43 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 44 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 45 | _MaskTex ("Mask Texture", 2D) = "white" {} 46 | _MaskInverse ("Inverse", float) = 0 47 | _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) 48 | _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 49 | _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 50 | 51 | _StencilComp ("Stencil Comparison", Float) = 8 52 | _Stencil ("Stencil ID", Float) = 0 53 | _StencilOp ("Stencil Operation", Float) = 0 54 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 55 | _StencilReadMask ("Stencil Read Mask", Float) = 255 56 | 57 | _CullMode ("Cull Mode", Float) = 0 58 | _ColorMask ("Color Mask", Float) = 15 59 | } 60 | 61 | SubShader { 62 | Tags { 63 | "Queue"="Transparent" 64 | "IgnoreProjector"="True" 65 | "RenderType"="Transparent" 66 | } 67 | 68 | Stencil 69 | { 70 | Ref [_Stencil] 71 | Comp [_StencilComp] 72 | Pass [_StencilOp] 73 | ReadMask [_StencilReadMask] 74 | WriteMask [_StencilWriteMask] 75 | } 76 | 77 | Cull [_CullMode] 78 | ZWrite Off 79 | Lighting Off 80 | Fog { Mode Off } 81 | ZTest [unity_GUIZTestMode] 82 | Blend One OneMinusSrcAlpha 83 | ColorMask [_ColorMask] 84 | 85 | Pass { 86 | CGPROGRAM 87 | #pragma vertex VertShader 88 | #pragma fragment PixShader 89 | #pragma shader_feature __ OUTLINE_ON 90 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 91 | 92 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 93 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 94 | 95 | #include "UnityCG.cginc" 96 | #include "UnityUI.cginc" 97 | #include "TMPro_Properties.cginc" 98 | 99 | #include "TMPro_Mobile.cginc" 100 | 101 | ENDCG 102 | } 103 | } 104 | 105 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 106 | } 107 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c8d12adcee749c344b8117cf7c7eb912 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader: -------------------------------------------------------------------------------- 1 | // Simplified SDF shader: 2 | // - No Shading Option (bevel / bump / env map) 3 | // - No Glow Option 4 | // - Softness is applied on both side of the outline 5 | 6 | Shader "TextMeshPro/Mobile/Distance Field" { 7 | 8 | Properties { 9 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 10 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 11 | 12 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 13 | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 14 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 15 | 16 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) 17 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 18 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 19 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 20 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 21 | 22 | _WeightNormal ("Weight Normal", float) = 0 23 | _WeightBold ("Weight Bold", float) = .5 24 | 25 | _ShaderFlags ("Flags", float) = 0 26 | _ScaleRatioA ("Scale RatioA", float) = 1 27 | _ScaleRatioB ("Scale RatioB", float) = 1 28 | _ScaleRatioC ("Scale RatioC", float) = 1 29 | 30 | _MainTex ("Font Atlas", 2D) = "white" {} 31 | _TextureWidth ("Texture Width", float) = 512 32 | _TextureHeight ("Texture Height", float) = 512 33 | _GradientScale ("Gradient Scale", float) = 5 34 | _ScaleX ("Scale X", float) = 1 35 | _ScaleY ("Scale Y", float) = 1 36 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 37 | _Sharpness ("Sharpness", Range(-1,1)) = 0 38 | 39 | _VertexOffsetX ("Vertex OffsetX", float) = 0 40 | _VertexOffsetY ("Vertex OffsetY", float) = 0 41 | 42 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 43 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 44 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 45 | 46 | _StencilComp ("Stencil Comparison", Float) = 8 47 | _Stencil ("Stencil ID", Float) = 0 48 | _StencilOp ("Stencil Operation", Float) = 0 49 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 50 | _StencilReadMask ("Stencil Read Mask", Float) = 255 51 | 52 | _CullMode ("Cull Mode", Float) = 0 53 | _ColorMask ("Color Mask", Float) = 15 54 | } 55 | 56 | SubShader { 57 | Tags 58 | { 59 | "Queue"="Transparent" 60 | "IgnoreProjector"="True" 61 | "RenderType"="Transparent" 62 | } 63 | 64 | 65 | Stencil 66 | { 67 | Ref [_Stencil] 68 | Comp [_StencilComp] 69 | Pass [_StencilOp] 70 | ReadMask [_StencilReadMask] 71 | WriteMask [_StencilWriteMask] 72 | } 73 | 74 | Cull [_CullMode] 75 | ZWrite Off 76 | Lighting Off 77 | Fog { Mode Off } 78 | ZTest [unity_GUIZTestMode] 79 | Blend One OneMinusSrcAlpha 80 | ColorMask [_ColorMask] 81 | 82 | Pass { 83 | CGPROGRAM 84 | #pragma vertex VertShader 85 | #pragma fragment PixShader 86 | #pragma shader_feature __ OUTLINE_ON 87 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 88 | 89 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 90 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 91 | 92 | #include "UnityCG.cginc" 93 | #include "UnityUI.cginc" 94 | #include "TMPro_Properties.cginc" 95 | 96 | struct vertex_t { 97 | UNITY_VERTEX_INPUT_INSTANCE_ID 98 | float4 vertex : POSITION; 99 | float3 normal : NORMAL; 100 | fixed4 color : COLOR; 101 | float2 texcoord0 : TEXCOORD0; 102 | float2 texcoord1 : TEXCOORD1; 103 | }; 104 | 105 | struct pixel_t { 106 | UNITY_VERTEX_INPUT_INSTANCE_ID 107 | UNITY_VERTEX_OUTPUT_STEREO 108 | float4 vertex : SV_POSITION; 109 | fixed4 faceColor : COLOR; 110 | fixed4 outlineColor : COLOR1; 111 | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV 112 | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) 113 | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) 114 | #if (UNDERLAY_ON | UNDERLAY_INNER) 115 | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved 116 | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) 117 | #endif 118 | }; 119 | 120 | 121 | pixel_t VertShader(vertex_t input) 122 | { 123 | pixel_t output; 124 | 125 | UNITY_INITIALIZE_OUTPUT(pixel_t, output); 126 | UNITY_SETUP_INSTANCE_ID(input); 127 | UNITY_TRANSFER_INSTANCE_ID(input, output); 128 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 129 | 130 | float bold = step(input.texcoord1.y, 0); 131 | 132 | float4 vert = input.vertex; 133 | vert.x += _VertexOffsetX; 134 | vert.y += _VertexOffsetY; 135 | float4 vPosition = UnityObjectToClipPos(vert); 136 | 137 | float2 pixelSize = vPosition.w; 138 | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); 139 | 140 | float scale = rsqrt(dot(pixelSize, pixelSize)); 141 | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); 142 | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 143 | 144 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 145 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 146 | 147 | float layerScale = scale; 148 | 149 | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); 150 | float bias = (0.5 - weight) * scale - 0.5; 151 | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; 152 | 153 | float opacity = input.color.a; 154 | #if (UNDERLAY_ON | UNDERLAY_INNER) 155 | opacity = 1.0; 156 | #endif 157 | 158 | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; 159 | faceColor.rgb *= faceColor.a; 160 | 161 | fixed4 outlineColor = _OutlineColor; 162 | outlineColor.a *= opacity; 163 | outlineColor.rgb *= outlineColor.a; 164 | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); 165 | 166 | #if (UNDERLAY_ON | UNDERLAY_INNER) 167 | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); 168 | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); 169 | 170 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 171 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 172 | float2 layerOffset = float2(x, y); 173 | #endif 174 | 175 | // Generate UV for the Masking Texture 176 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 177 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 178 | 179 | // Populate structure for pixel shader 180 | output.vertex = vPosition; 181 | output.faceColor = faceColor; 182 | output.outlineColor = outlineColor; 183 | output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); 184 | output.param = half4(scale, bias - outline, bias + outline, bias); 185 | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 186 | #if (UNDERLAY_ON || UNDERLAY_INNER) 187 | output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); 188 | output.underlayParam = half2(layerScale, layerBias); 189 | #endif 190 | 191 | return output; 192 | } 193 | 194 | 195 | // PIXEL SHADER 196 | fixed4 PixShader(pixel_t input) : SV_Target 197 | { 198 | UNITY_SETUP_INSTANCE_ID(input); 199 | 200 | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; 201 | half4 c = input.faceColor * saturate(d - input.param.w); 202 | 203 | #ifdef OUTLINE_ON 204 | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); 205 | c *= saturate(d - input.param.y); 206 | #endif 207 | 208 | #if UNDERLAY_ON 209 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 210 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); 211 | #endif 212 | 213 | #if UNDERLAY_INNER 214 | half sd = saturate(d - input.param.z); 215 | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; 216 | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); 217 | #endif 218 | 219 | // Alternative implementation to UnityGet2DClipping with support for softness. 220 | #if UNITY_UI_CLIP_RECT 221 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); 222 | c *= m.x * m.y; 223 | #endif 224 | 225 | #if (UNDERLAY_ON | UNDERLAY_INNER) 226 | c *= input.texcoord1.z; 227 | #endif 228 | 229 | #if UNITY_UI_ALPHACLIP 230 | clip(c.a - 0.001); 231 | #endif 232 | 233 | return c; 234 | } 235 | ENDCG 236 | } 237 | } 238 | 239 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 240 | } 241 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fe393ace9b354375a9cb14cdbbc28be4 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader: -------------------------------------------------------------------------------- 1 | // Simplified version of the SDF Surface shader : 2 | // - No support for Bevel, Bump or envmap 3 | // - Diffuse only lighting 4 | // - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. 5 | 6 | Shader "TextMeshPro/Mobile/Distance Field (Surface)" { 7 | 8 | Properties { 9 | _FaceTex ("Fill Texture", 2D) = "white" {} 10 | [HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1) 11 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 12 | 13 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 14 | _OutlineTex ("Outline Texture", 2D) = "white" {} 15 | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 16 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 17 | 18 | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) 19 | _GlowOffset ("Offset", Range(-1,1)) = 0 20 | _GlowInner ("Inner", Range(0,1)) = 0.05 21 | _GlowOuter ("Outer", Range(0,1)) = 0.05 22 | _GlowPower ("Falloff", Range(1, 0)) = 0.75 23 | 24 | _WeightNormal ("Weight Normal", float) = 0 25 | _WeightBold ("Weight Bold", float) = 0.5 26 | 27 | // Should not be directly exposed to the user 28 | _ShaderFlags ("Flags", float) = 0 29 | _ScaleRatioA ("Scale RatioA", float) = 1 30 | _ScaleRatioB ("Scale RatioB", float) = 1 31 | _ScaleRatioC ("Scale RatioC", float) = 1 32 | 33 | _MainTex ("Font Atlas", 2D) = "white" {} 34 | _TextureWidth ("Texture Width", float) = 512 35 | _TextureHeight ("Texture Height", float) = 512 36 | _GradientScale ("Gradient Scale", float) = 5.0 37 | _ScaleX ("Scale X", float) = 1.0 38 | _ScaleY ("Scale Y", float) = 1.0 39 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 40 | _Sharpness ("Sharpness", Range(-1,1)) = 0 41 | 42 | _VertexOffsetX ("Vertex OffsetX", float) = 0 43 | _VertexOffsetY ("Vertex OffsetY", float) = 0 44 | 45 | _CullMode ("Cull Mode", Float) = 0 46 | //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) 47 | //_MaskSoftness ("Mask Softness", float) = 0 48 | } 49 | 50 | SubShader { 51 | 52 | Tags { 53 | "Queue"="Transparent" 54 | "IgnoreProjector"="True" 55 | "RenderType"="Transparent" 56 | } 57 | 58 | LOD 300 59 | Cull [_CullMode] 60 | 61 | CGPROGRAM 62 | #pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap 63 | #pragma target 3.0 64 | #pragma shader_feature __ GLOW_ON 65 | 66 | #include "TMPro_Properties.cginc" 67 | #include "TMPro.cginc" 68 | 69 | half _FaceShininess; 70 | half _OutlineShininess; 71 | 72 | struct Input 73 | { 74 | fixed4 color : COLOR; 75 | float2 uv_MainTex; 76 | float2 uv2_FaceTex; 77 | float2 uv2_OutlineTex; 78 | float2 param; // Weight, Scale 79 | float3 viewDirEnv; 80 | }; 81 | 82 | #include "TMPro_Surface.cginc" 83 | 84 | ENDCG 85 | 86 | // Pass to render object as a shadow caster 87 | Pass 88 | { 89 | Name "Caster" 90 | Tags { "LightMode" = "ShadowCaster" } 91 | Offset 1, 1 92 | 93 | Fog {Mode Off} 94 | ZWrite On ZTest LEqual Cull Off 95 | 96 | CGPROGRAM 97 | #pragma vertex vert 98 | #pragma fragment frag 99 | #pragma multi_compile_shadowcaster 100 | #include "UnityCG.cginc" 101 | 102 | struct v2f { 103 | V2F_SHADOW_CASTER; 104 | float2 uv : TEXCOORD1; 105 | float2 uv2 : TEXCOORD3; 106 | float alphaClip : TEXCOORD2; 107 | }; 108 | 109 | uniform float4 _MainTex_ST; 110 | uniform float4 _OutlineTex_ST; 111 | float _OutlineWidth; 112 | float _FaceDilate; 113 | float _ScaleRatioA; 114 | 115 | v2f vert( appdata_base v ) 116 | { 117 | v2f o; 118 | TRANSFER_SHADOW_CASTER(o) 119 | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 120 | o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); 121 | o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; 122 | return o; 123 | } 124 | 125 | uniform sampler2D _MainTex; 126 | 127 | float4 frag(v2f i) : COLOR 128 | { 129 | fixed4 texcol = tex2D(_MainTex, i.uv).a; 130 | clip(texcol.a - i.alphaClip); 131 | SHADOW_CASTER_FRAGMENT(i) 132 | } 133 | ENDCG 134 | } 135 | } 136 | 137 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 138 | } 139 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85187c2149c549c5b33f0cdb02836b17 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Surface.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Distance Field (Surface)" { 2 | 3 | Properties { 4 | _FaceTex ("Fill Texture", 2D) = "white" {} 5 | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 6 | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 7 | [HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1) 8 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 9 | 10 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 11 | _OutlineTex ("Outline Texture", 2D) = "white" {} 12 | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 13 | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 14 | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 15 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 16 | 17 | _Bevel ("Bevel", Range(0,1)) = 0.5 18 | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 19 | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 20 | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 21 | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 22 | 23 | _BumpMap ("Normalmap", 2D) = "bump" {} 24 | _BumpOutline ("Bump Outline", Range(0,1)) = 0.5 25 | _BumpFace ("Bump Face", Range(0,1)) = 0.5 26 | 27 | _ReflectFaceColor ("Face Color", Color) = (0,0,0,1) 28 | _ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) 29 | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } 30 | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) 31 | [HDR]_SpecColor ("Specular Color", Color) = (0,0,0,1) 32 | 33 | _FaceShininess ("Face Shininess", Range(0,1)) = 0 34 | _OutlineShininess ("Outline Shininess", Range(0,1)) = 0 35 | 36 | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) 37 | _GlowOffset ("Offset", Range(-1,1)) = 0 38 | _GlowInner ("Inner", Range(0,1)) = 0.05 39 | _GlowOuter ("Outer", Range(0,1)) = 0.05 40 | _GlowPower ("Falloff", Range(1, 0)) = 0.75 41 | 42 | _WeightNormal ("Weight Normal", float) = 0 43 | _WeightBold ("Weight Bold", float) = 0.5 44 | 45 | // Should not be directly exposed to the user 46 | _ShaderFlags ("Flags", float) = 0 47 | _ScaleRatioA ("Scale RatioA", float) = 1 48 | _ScaleRatioB ("Scale RatioB", float) = 1 49 | _ScaleRatioC ("Scale RatioC", float) = 1 50 | 51 | _MainTex ("Font Atlas", 2D) = "white" {} 52 | _TextureWidth ("Texture Width", float) = 512 53 | _TextureHeight ("Texture Height", float) = 512 54 | _GradientScale ("Gradient Scale", float) = 5.0 55 | _ScaleX ("Scale X", float) = 1.0 56 | _ScaleY ("Scale Y", float) = 1.0 57 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 58 | _Sharpness ("Sharpness", Range(-1,1)) = 0 59 | 60 | _VertexOffsetX ("Vertex OffsetX", float) = 0 61 | _VertexOffsetY ("Vertex OffsetY", float) = 0 62 | 63 | _CullMode ("Cull Mode", Float) = 0 64 | //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) 65 | //_MaskSoftness ("Mask Softness", float) = 0 66 | } 67 | 68 | SubShader { 69 | 70 | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } 71 | 72 | LOD 300 73 | Cull [_CullMode] 74 | 75 | CGPROGRAM 76 | #pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap 77 | #pragma target 3.0 78 | #pragma shader_feature __ GLOW_ON 79 | #pragma glsl 80 | 81 | #include "TMPro_Properties.cginc" 82 | #include "TMPro.cginc" 83 | 84 | half _FaceShininess; 85 | half _OutlineShininess; 86 | 87 | struct Input 88 | { 89 | fixed4 color : COLOR; 90 | float2 uv_MainTex; 91 | float2 uv2_FaceTex; 92 | float2 uv2_OutlineTex; 93 | float2 param; // Weight, Scale 94 | float3 viewDirEnv; 95 | }; 96 | 97 | 98 | #define BEVEL_ON 1 99 | #include "TMPro_Surface.cginc" 100 | 101 | ENDCG 102 | 103 | // Pass to render object as a shadow caster 104 | Pass 105 | { 106 | Name "Caster" 107 | Tags { "LightMode" = "ShadowCaster" } 108 | Offset 1, 1 109 | 110 | Fog {Mode Off} 111 | ZWrite On 112 | ZTest LEqual 113 | Cull Off 114 | 115 | CGPROGRAM 116 | #pragma vertex vert 117 | #pragma fragment frag 118 | #pragma multi_compile_shadowcaster 119 | #include "UnityCG.cginc" 120 | 121 | struct v2f { 122 | V2F_SHADOW_CASTER; 123 | float2 uv : TEXCOORD1; 124 | float2 uv2 : TEXCOORD3; 125 | float alphaClip : TEXCOORD2; 126 | }; 127 | 128 | uniform float4 _MainTex_ST; 129 | uniform float4 _OutlineTex_ST; 130 | float _OutlineWidth; 131 | float _FaceDilate; 132 | float _ScaleRatioA; 133 | 134 | v2f vert( appdata_base v ) 135 | { 136 | v2f o; 137 | TRANSFER_SHADOW_CASTER(o) 138 | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 139 | o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); 140 | o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; 141 | return o; 142 | } 143 | 144 | uniform sampler2D _MainTex; 145 | 146 | float4 frag(v2f i) : COLOR 147 | { 148 | fixed4 texcol = tex2D(_MainTex, i.uv).a; 149 | clip(texcol.a - i.alphaClip); 150 | SHADOW_CASTER_FRAGMENT(i) 151 | } 152 | ENDCG 153 | } 154 | } 155 | 156 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 157 | } 158 | 159 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f7ada0af4f174f0694ca6a487b8f543d 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Distance Field" { 2 | 3 | Properties { 4 | _FaceTex ("Face Texture", 2D) = "white" {} 5 | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 6 | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 7 | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) 8 | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 9 | 10 | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) 11 | _OutlineTex ("Outline Texture", 2D) = "white" {} 12 | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 13 | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 14 | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 15 | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 16 | 17 | _Bevel ("Bevel", Range(0,1)) = 0.5 18 | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 19 | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 20 | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 21 | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 22 | 23 | _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 24 | [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1) 25 | _SpecularPower ("Specular", Range(0,4)) = 2.0 26 | _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 27 | _Diffuse ("Diffuse", Range(0,1)) = 0.5 28 | _Ambient ("Ambient", Range(1,0)) = 0.5 29 | 30 | _BumpMap ("Normal map", 2D) = "bump" {} 31 | _BumpOutline ("Bump Outline", Range(0,1)) = 0 32 | _BumpFace ("Bump Face", Range(0,1)) = 0 33 | 34 | _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) 35 | _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) 36 | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } 37 | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) 38 | 39 | 40 | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) 41 | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 42 | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 43 | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 44 | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 45 | 46 | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) 47 | _GlowOffset ("Offset", Range(-1,1)) = 0 48 | _GlowInner ("Inner", Range(0,1)) = 0.05 49 | _GlowOuter ("Outer", Range(0,1)) = 0.05 50 | _GlowPower ("Falloff", Range(1, 0)) = 0.75 51 | 52 | _WeightNormal ("Weight Normal", float) = 0 53 | _WeightBold ("Weight Bold", float) = 0.5 54 | 55 | _ShaderFlags ("Flags", float) = 0 56 | _ScaleRatioA ("Scale RatioA", float) = 1 57 | _ScaleRatioB ("Scale RatioB", float) = 1 58 | _ScaleRatioC ("Scale RatioC", float) = 1 59 | 60 | _MainTex ("Font Atlas", 2D) = "white" {} 61 | _TextureWidth ("Texture Width", float) = 512 62 | _TextureHeight ("Texture Height", float) = 512 63 | _GradientScale ("Gradient Scale", float) = 5.0 64 | _ScaleX ("Scale X", float) = 1.0 65 | _ScaleY ("Scale Y", float) = 1.0 66 | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 67 | _Sharpness ("Sharpness", Range(-1,1)) = 0 68 | 69 | _VertexOffsetX ("Vertex OffsetX", float) = 0 70 | _VertexOffsetY ("Vertex OffsetY", float) = 0 71 | 72 | _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) 73 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 74 | _MaskSoftnessX ("Mask SoftnessX", float) = 0 75 | _MaskSoftnessY ("Mask SoftnessY", float) = 0 76 | 77 | _StencilComp ("Stencil Comparison", Float) = 8 78 | _Stencil ("Stencil ID", Float) = 0 79 | _StencilOp ("Stencil Operation", Float) = 0 80 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 81 | _StencilReadMask ("Stencil Read Mask", Float) = 255 82 | 83 | _CullMode ("Cull Mode", Float) = 0 84 | _ColorMask ("Color Mask", Float) = 15 85 | } 86 | 87 | SubShader { 88 | 89 | Tags 90 | { 91 | "Queue"="Transparent" 92 | "IgnoreProjector"="True" 93 | "RenderType"="Transparent" 94 | } 95 | 96 | Stencil 97 | { 98 | Ref [_Stencil] 99 | Comp [_StencilComp] 100 | Pass [_StencilOp] 101 | ReadMask [_StencilReadMask] 102 | WriteMask [_StencilWriteMask] 103 | } 104 | 105 | Cull [_CullMode] 106 | ZWrite Off 107 | Lighting Off 108 | Fog { Mode Off } 109 | ZTest [unity_GUIZTestMode] 110 | Blend One OneMinusSrcAlpha 111 | ColorMask [_ColorMask] 112 | 113 | Pass { 114 | CGPROGRAM 115 | #pragma target 3.0 116 | #pragma vertex VertShader 117 | #pragma fragment PixShader 118 | #pragma shader_feature __ BEVEL_ON 119 | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER 120 | #pragma shader_feature __ GLOW_ON 121 | 122 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 123 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 124 | 125 | #include "UnityCG.cginc" 126 | #include "UnityUI.cginc" 127 | #include "TMPro_Properties.cginc" 128 | #include "TMPro.cginc" 129 | 130 | struct vertex_t { 131 | UNITY_VERTEX_INPUT_INSTANCE_ID 132 | float4 position : POSITION; 133 | float3 normal : NORMAL; 134 | fixed4 color : COLOR; 135 | float2 texcoord0 : TEXCOORD0; 136 | float2 texcoord1 : TEXCOORD1; 137 | }; 138 | 139 | 140 | struct pixel_t { 141 | UNITY_VERTEX_INPUT_INSTANCE_ID 142 | UNITY_VERTEX_OUTPUT_STEREO 143 | float4 position : SV_POSITION; 144 | fixed4 color : COLOR; 145 | float2 atlas : TEXCOORD0; // Atlas 146 | float4 param : TEXCOORD1; // alphaClip, scale, bias, weight 147 | float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) 148 | float3 viewDir : TEXCOORD3; 149 | 150 | #if (UNDERLAY_ON || UNDERLAY_INNER) 151 | float4 texcoord2 : TEXCOORD4; // u,v, scale, bias 152 | fixed4 underlayColor : COLOR1; 153 | #endif 154 | float4 textures : TEXCOORD5; 155 | }; 156 | 157 | // Used by Unity internally to handle Texture Tiling and Offset. 158 | float4 _FaceTex_ST; 159 | float4 _OutlineTex_ST; 160 | 161 | pixel_t VertShader(vertex_t input) 162 | { 163 | pixel_t output; 164 | 165 | UNITY_INITIALIZE_OUTPUT(pixel_t, output); 166 | UNITY_SETUP_INSTANCE_ID(input); 167 | UNITY_TRANSFER_INSTANCE_ID(input,output); 168 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 169 | 170 | float bold = step(input.texcoord1.y, 0); 171 | 172 | float4 vert = input.position; 173 | vert.x += _VertexOffsetX; 174 | vert.y += _VertexOffsetY; 175 | 176 | float4 vPosition = UnityObjectToClipPos(vert); 177 | 178 | float2 pixelSize = vPosition.w; 179 | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); 180 | float scale = rsqrt(dot(pixelSize, pixelSize)); 181 | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); 182 | if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 183 | 184 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 185 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 186 | 187 | float bias =(.5 - weight) + (.5 / scale); 188 | 189 | float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA); 190 | 191 | #if GLOW_ON 192 | alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); 193 | #endif 194 | 195 | alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; 196 | 197 | #if (UNDERLAY_ON || UNDERLAY_INNER) 198 | float4 underlayColor = _UnderlayColor; 199 | underlayColor.rgb *= underlayColor.a; 200 | 201 | float bScale = scale; 202 | bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); 203 | float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); 204 | 205 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 206 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 207 | float2 bOffset = float2(x, y); 208 | #endif 209 | 210 | // Generate UV for the Masking Texture 211 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 212 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 213 | 214 | // Support for texture tiling and offset 215 | float2 textureUV = UnpackUV(input.texcoord1.x); 216 | float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); 217 | float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); 218 | 219 | 220 | output.position = vPosition; 221 | output.color = input.color; 222 | output.atlas = input.texcoord0; 223 | output.param = float4(alphaClip, scale, bias, weight); 224 | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); 225 | output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); 226 | #if (UNDERLAY_ON || UNDERLAY_INNER) 227 | output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); 228 | output.underlayColor = underlayColor; 229 | #endif 230 | output.textures = float4(faceUV, outlineUV); 231 | 232 | return output; 233 | } 234 | 235 | 236 | fixed4 PixShader(pixel_t input) : SV_Target 237 | { 238 | UNITY_SETUP_INSTANCE_ID(input); 239 | 240 | float c = tex2D(_MainTex, input.atlas).a; 241 | 242 | #ifndef UNDERLAY_ON 243 | clip(c - input.param.x); 244 | #endif 245 | 246 | float scale = input.param.y; 247 | float bias = input.param.z; 248 | float weight = input.param.w; 249 | float sd = (bias - c) * scale; 250 | 251 | float outline = (_OutlineWidth * _ScaleRatioA) * scale; 252 | float softness = (_OutlineSoftness * _ScaleRatioA) * scale; 253 | 254 | half4 faceColor = _FaceColor; 255 | half4 outlineColor = _OutlineColor; 256 | 257 | faceColor.rgb *= input.color.rgb; 258 | 259 | faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); 260 | outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); 261 | 262 | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); 263 | 264 | #if BEVEL_ON 265 | float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); 266 | float3 n = GetSurfaceNormal(input.atlas, weight, dxy); 267 | 268 | float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; 269 | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); 270 | n = normalize(n- bump); 271 | 272 | float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); 273 | 274 | float3 col = GetSpecular(n, light); 275 | faceColor.rgb += col*faceColor.a; 276 | faceColor.rgb *= 1-(dot(n, light)*_Diffuse); 277 | faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); 278 | 279 | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); 280 | faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; 281 | #endif 282 | 283 | #if UNDERLAY_ON 284 | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; 285 | faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); 286 | #endif 287 | 288 | #if UNDERLAY_INNER 289 | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; 290 | faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); 291 | #endif 292 | 293 | #if GLOW_ON 294 | float4 glowColor = GetGlowColor(sd, scale); 295 | faceColor.rgb += glowColor.rgb * glowColor.a; 296 | #endif 297 | 298 | // Alternative implementation to UnityGet2DClipping with support for softness. 299 | #if UNITY_UI_CLIP_RECT 300 | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); 301 | faceColor *= m.x * m.y; 302 | #endif 303 | 304 | #if UNITY_UI_ALPHACLIP 305 | clip(faceColor.a - 0.001); 306 | #endif 307 | 308 | return faceColor * input.color.a; 309 | } 310 | 311 | ENDCG 312 | } 313 | } 314 | 315 | Fallback "TextMeshPro/Mobile/Distance Field" 316 | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" 317 | } 318 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_SDF.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68e6db2ebdc24f95958faec2be5558d6 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Sprite.shader: -------------------------------------------------------------------------------- 1 | Shader "TextMeshPro/Sprite" 2 | { 3 | Properties 4 | { 5 | [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} 6 | _Color ("Tint", Color) = (1,1,1,1) 7 | 8 | _StencilComp ("Stencil Comparison", Float) = 8 9 | _Stencil ("Stencil ID", Float) = 0 10 | _StencilOp ("Stencil Operation", Float) = 0 11 | _StencilWriteMask ("Stencil Write Mask", Float) = 255 12 | _StencilReadMask ("Stencil Read Mask", Float) = 255 13 | 14 | _CullMode ("Cull Mode", Float) = 0 15 | _ColorMask ("Color Mask", Float) = 15 16 | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) 17 | 18 | [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 19 | } 20 | 21 | SubShader 22 | { 23 | Tags 24 | { 25 | "Queue"="Transparent" 26 | "IgnoreProjector"="True" 27 | "RenderType"="Transparent" 28 | "PreviewType"="Plane" 29 | "CanUseSpriteAtlas"="True" 30 | } 31 | 32 | Stencil 33 | { 34 | Ref [_Stencil] 35 | Comp [_StencilComp] 36 | Pass [_StencilOp] 37 | ReadMask [_StencilReadMask] 38 | WriteMask [_StencilWriteMask] 39 | } 40 | 41 | Cull [_CullMode] 42 | Lighting Off 43 | ZWrite Off 44 | ZTest [unity_GUIZTestMode] 45 | Blend SrcAlpha OneMinusSrcAlpha 46 | ColorMask [_ColorMask] 47 | 48 | Pass 49 | { 50 | Name "Default" 51 | CGPROGRAM 52 | #pragma vertex vert 53 | #pragma fragment frag 54 | #pragma target 2.0 55 | 56 | #include "UnityCG.cginc" 57 | #include "UnityUI.cginc" 58 | 59 | #pragma multi_compile __ UNITY_UI_CLIP_RECT 60 | #pragma multi_compile __ UNITY_UI_ALPHACLIP 61 | 62 | struct appdata_t 63 | { 64 | float4 vertex : POSITION; 65 | float4 color : COLOR; 66 | float2 texcoord : TEXCOORD0; 67 | UNITY_VERTEX_INPUT_INSTANCE_ID 68 | }; 69 | 70 | struct v2f 71 | { 72 | float4 vertex : SV_POSITION; 73 | fixed4 color : COLOR; 74 | float2 texcoord : TEXCOORD0; 75 | float4 worldPosition : TEXCOORD1; 76 | UNITY_VERTEX_OUTPUT_STEREO 77 | }; 78 | 79 | sampler2D _MainTex; 80 | fixed4 _Color; 81 | fixed4 _TextureSampleAdd; 82 | float4 _ClipRect; 83 | float4 _MainTex_ST; 84 | 85 | v2f vert(appdata_t v) 86 | { 87 | v2f OUT; 88 | UNITY_SETUP_INSTANCE_ID(v); 89 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); 90 | OUT.worldPosition = v.vertex; 91 | OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); 92 | 93 | OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); 94 | 95 | OUT.color = v.color * _Color; 96 | return OUT; 97 | } 98 | 99 | fixed4 frag(v2f IN) : SV_Target 100 | { 101 | half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; 102 | 103 | #ifdef UNITY_UI_CLIP_RECT 104 | color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); 105 | #endif 106 | 107 | #ifdef UNITY_UI_ALPHACLIP 108 | clip (color.a - 0.001); 109 | #endif 110 | 111 | return color; 112 | } 113 | ENDCG 114 | } 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMP_Sprite.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cf81c85f95fe47e1a27f6ae460cf182c 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro.cginc: -------------------------------------------------------------------------------- 1 | float2 UnpackUV(float uv) 2 | { 3 | float2 output; 4 | output.x = floor(uv / 4096); 5 | output.y = uv - 4096 * output.x; 6 | 7 | return output * 0.001953125; 8 | } 9 | 10 | fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) 11 | { 12 | half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); 13 | half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); 14 | 15 | faceColor.rgb *= faceColor.a; 16 | outlineColor.rgb *= outlineColor.a; 17 | 18 | faceColor = lerp(faceColor, outlineColor, outlineAlpha); 19 | 20 | faceColor *= faceAlpha; 21 | 22 | return faceColor; 23 | } 24 | 25 | float3 GetSurfaceNormal(float4 h, float bias) 26 | { 27 | bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); 28 | 29 | h += bias+_BevelOffset; 30 | 31 | float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); 32 | 33 | // Track outline 34 | h -= .5; 35 | h /= bevelWidth; 36 | h = saturate(h+.5); 37 | 38 | if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); 39 | h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); 40 | h = min(h, 1.0-_BevelClamp); 41 | h *= _Bevel * bevelWidth * _GradientScale * -2.0; 42 | 43 | float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); 44 | float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); 45 | 46 | return cross(va, vb); 47 | } 48 | 49 | float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) 50 | { 51 | // Read "height field" 52 | float4 h = {tex2D(_MainTex, uv - delta.xz).a, 53 | tex2D(_MainTex, uv + delta.xz).a, 54 | tex2D(_MainTex, uv - delta.zy).a, 55 | tex2D(_MainTex, uv + delta.zy).a}; 56 | 57 | return GetSurfaceNormal(h, bias); 58 | } 59 | 60 | float3 GetSpecular(float3 n, float3 l) 61 | { 62 | float spec = pow(max(0.0, dot(n, l)), _Reflectivity); 63 | return _SpecularColor.rgb * spec * _SpecularPower; 64 | } 65 | 66 | float4 GetGlowColor(float d, float scale) 67 | { 68 | float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; 69 | float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; 70 | glow = saturate(abs(glow/(1.0 + t))); 71 | glow = 1.0-pow(glow, _GlowPower); 72 | glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel 73 | return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); 74 | } 75 | 76 | float4 BlendARGB(float4 overlying, float4 underlying) 77 | { 78 | overlying.rgb *= overlying.a; 79 | underlying.rgb *= underlying.a; 80 | float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); 81 | float alpha = underlying.a + (1-underlying.a)*overlying.a; 82 | return float4(blended, alpha); 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 407bc68d299748449bbf7f48ee690f8d 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Mobile.cginc: -------------------------------------------------------------------------------- 1 | struct vertex_t { 2 | UNITY_VERTEX_INPUT_INSTANCE_ID 3 | float4 position : POSITION; 4 | float3 normal : NORMAL; 5 | float4 color : COLOR; 6 | float2 texcoord0 : TEXCOORD0; 7 | float2 texcoord1 : TEXCOORD1; 8 | }; 9 | 10 | struct pixel_t { 11 | UNITY_VERTEX_INPUT_INSTANCE_ID 12 | UNITY_VERTEX_OUTPUT_STEREO 13 | float4 position : SV_POSITION; 14 | float4 faceColor : COLOR; 15 | float4 outlineColor : COLOR1; 16 | float4 texcoord0 : TEXCOORD0; 17 | float4 param : TEXCOORD1; // weight, scaleRatio 18 | float2 mask : TEXCOORD2; 19 | #if (UNDERLAY_ON || UNDERLAY_INNER) 20 | float4 texcoord2 : TEXCOORD3; 21 | float4 underlayColor : COLOR2; 22 | #endif 23 | }; 24 | 25 | float4 SRGBToLinear(float4 rgba) { 26 | return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); 27 | } 28 | 29 | pixel_t VertShader(vertex_t input) 30 | { 31 | pixel_t output; 32 | 33 | UNITY_INITIALIZE_OUTPUT(pixel_t, output); 34 | UNITY_SETUP_INSTANCE_ID(input); 35 | UNITY_TRANSFER_INSTANCE_ID(input, output); 36 | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 37 | 38 | float bold = step(input.texcoord1.y, 0); 39 | 40 | float4 vert = input.position; 41 | vert.x += _VertexOffsetX; 42 | vert.y += _VertexOffsetY; 43 | 44 | float4 vPosition = UnityObjectToClipPos(vert); 45 | 46 | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; 47 | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; 48 | 49 | // Generate UV for the Masking Texture 50 | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); 51 | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); 52 | 53 | float4 color = input.color; 54 | #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) 55 | color = SRGBToLinear(input.color); 56 | #endif 57 | 58 | float opacity = color.a; 59 | #if (UNDERLAY_ON | UNDERLAY_INNER) 60 | opacity = 1.0; 61 | #endif 62 | 63 | float4 faceColor = float4(color.rgb, opacity) * _FaceColor; 64 | faceColor.rgb *= faceColor.a; 65 | 66 | float4 outlineColor = _OutlineColor; 67 | outlineColor.a *= opacity; 68 | outlineColor.rgb *= outlineColor.a; 69 | 70 | output.position = vPosition; 71 | output.faceColor = faceColor; 72 | output.outlineColor = outlineColor; 73 | output.texcoord0 = float4(input.texcoord0.xy, maskUV.xy); 74 | output.param = float4(0.5 - weight, 1.3333 * _GradientScale * (_Sharpness + 1) / _TextureWidth, _OutlineWidth * _ScaleRatioA * 0.5, 0); 75 | 76 | float2 mask = float2(0, 0); 77 | #if UNITY_UI_CLIP_RECT 78 | mask = vert.xy * 2 - clampedRect.xy - clampedRect.zw; 79 | #endif 80 | output.mask = mask; 81 | 82 | #if (UNDERLAY_ON || UNDERLAY_INNER) 83 | float4 underlayColor = _UnderlayColor; 84 | underlayColor.rgb *= underlayColor.a; 85 | 86 | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; 87 | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; 88 | 89 | output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0); 90 | output.underlayColor = underlayColor; 91 | #endif 92 | 93 | return output; 94 | } 95 | 96 | float4 PixShader(pixel_t input) : SV_Target 97 | { 98 | UNITY_SETUP_INSTANCE_ID(input); 99 | 100 | float d = tex2D(_MainTex, input.texcoord0.xy).a; 101 | 102 | float2 UV = input.texcoord0.xy; 103 | float scale = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))) * input.param.y; 104 | 105 | #if (UNDERLAY_ON | UNDERLAY_INNER) 106 | float layerScale = scale; 107 | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); 108 | float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); 109 | #endif 110 | 111 | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); 112 | 113 | float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5); 114 | 115 | #ifdef OUTLINE_ON 116 | float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2))); 117 | faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5)); 118 | faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5); 119 | #endif 120 | 121 | #if UNDERLAY_ON 122 | d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; 123 | faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a); 124 | #endif 125 | 126 | #if UNDERLAY_INNER 127 | float bias = input.param.x * scale - 0.5; 128 | float sd = saturate(d * scale - bias - input.param.z); 129 | d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; 130 | faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a); 131 | #endif 132 | 133 | #ifdef MASKING 134 | float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); 135 | float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; 136 | a = saturate(t / _MaskEdgeSoftness); 137 | faceColor.rgb = lerp(_MaskEdgeColor.rgb * faceColor.a, faceColor.rgb, a); 138 | faceColor *= a; 139 | #endif 140 | 141 | // Alternative implementation to UnityGet2DClipping with support for softness 142 | #if UNITY_UI_CLIP_RECT 143 | float2 maskZW = 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + (1 / scale)); 144 | float2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW); 145 | faceColor *= m.x * m.y; 146 | #endif 147 | 148 | #if (UNDERLAY_ON | UNDERLAY_INNER) 149 | faceColor *= input.texcoord2.z; 150 | #endif 151 | 152 | #if UNITY_UI_ALPHACLIP 153 | clip(faceColor.a - 0.001); 154 | #endif 155 | 156 | return faceColor; 157 | } 158 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c334973cef89a9840b0b0c507e0377ab 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Properties.cginc: -------------------------------------------------------------------------------- 1 | // UI Editable properties 2 | uniform sampler2D _FaceTex; // Alpha : Signed Distance 3 | uniform float _FaceUVSpeedX; 4 | uniform float _FaceUVSpeedY; 5 | uniform fixed4 _FaceColor; // RGBA : Color + Opacity 6 | uniform float _FaceDilate; // v[ 0, 1] 7 | uniform float _OutlineSoftness; // v[ 0, 1] 8 | 9 | uniform sampler2D _OutlineTex; // RGBA : Color + Opacity 10 | uniform float _OutlineUVSpeedX; 11 | uniform float _OutlineUVSpeedY; 12 | uniform fixed4 _OutlineColor; // RGBA : Color + Opacity 13 | uniform float _OutlineWidth; // v[ 0, 1] 14 | 15 | uniform float _Bevel; // v[ 0, 1] 16 | uniform float _BevelOffset; // v[-1, 1] 17 | uniform float _BevelWidth; // v[-1, 1] 18 | uniform float _BevelClamp; // v[ 0, 1] 19 | uniform float _BevelRoundness; // v[ 0, 1] 20 | 21 | uniform sampler2D _BumpMap; // Normal map 22 | uniform float _BumpOutline; // v[ 0, 1] 23 | uniform float _BumpFace; // v[ 0, 1] 24 | 25 | uniform samplerCUBE _Cube; // Cube / sphere map 26 | uniform fixed4 _ReflectFaceColor; // RGB intensity 27 | uniform fixed4 _ReflectOutlineColor; 28 | //uniform float _EnvTiltX; // v[-1, 1] 29 | //uniform float _EnvTiltY; // v[-1, 1] 30 | uniform float3 _EnvMatrixRotation; 31 | uniform float4x4 _EnvMatrix; 32 | 33 | uniform fixed4 _SpecularColor; // RGB intensity 34 | uniform float _LightAngle; // v[ 0,Tau] 35 | uniform float _SpecularPower; // v[ 0, 1] 36 | uniform float _Reflectivity; // v[ 5, 15] 37 | uniform float _Diffuse; // v[ 0, 1] 38 | uniform float _Ambient; // v[ 0, 1] 39 | 40 | uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity 41 | uniform float _UnderlayOffsetX; // v[-1, 1] 42 | uniform float _UnderlayOffsetY; // v[-1, 1] 43 | uniform float _UnderlayDilate; // v[-1, 1] 44 | uniform float _UnderlaySoftness; // v[ 0, 1] 45 | 46 | uniform fixed4 _GlowColor; // RGBA : Color + Intesity 47 | uniform float _GlowOffset; // v[-1, 1] 48 | uniform float _GlowOuter; // v[ 0, 1] 49 | uniform float _GlowInner; // v[ 0, 1] 50 | uniform float _GlowPower; // v[ 1, 1/(1+4*4)] 51 | 52 | // API Editable properties 53 | uniform float _ShaderFlags; 54 | uniform float _WeightNormal; 55 | uniform float _WeightBold; 56 | 57 | uniform float _ScaleRatioA; 58 | uniform float _ScaleRatioB; 59 | uniform float _ScaleRatioC; 60 | 61 | uniform float _VertexOffsetX; 62 | uniform float _VertexOffsetY; 63 | 64 | //uniform float _UseClipRect; 65 | uniform float _MaskID; 66 | uniform sampler2D _MaskTex; 67 | uniform float4 _MaskCoord; 68 | uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) 69 | //uniform float _MaskWipeControl; 70 | //uniform float _MaskEdgeSoftness; 71 | //uniform fixed4 _MaskEdgeColor; 72 | //uniform bool _MaskInverse; 73 | 74 | uniform float _MaskSoftnessX; 75 | uniform float _MaskSoftnessY; 76 | 77 | // Font Atlas properties 78 | uniform sampler2D _MainTex; 79 | uniform float _TextureWidth; 80 | uniform float _TextureHeight; 81 | uniform float _GradientScale; 82 | uniform float _ScaleX; 83 | uniform float _ScaleY; 84 | uniform float _PerspectiveFilter; 85 | uniform float _Sharpness; 86 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3997e2241185407d80309a82f9148466 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Surface.cginc: -------------------------------------------------------------------------------- 1 | void VertShader(inout appdata_full v, out Input data) 2 | { 3 | v.vertex.x += _VertexOffsetX; 4 | v.vertex.y += _VertexOffsetY; 5 | 6 | UNITY_INITIALIZE_OUTPUT(Input, data); 7 | 8 | float bold = step(v.texcoord1.y, 0); 9 | 10 | // Generate normal for backface 11 | float3 view = ObjSpaceViewDir(v.vertex); 12 | v.normal *= sign(dot(v.normal, view)); 13 | 14 | #if USE_DERIVATIVE 15 | data.param.y = 1; 16 | #else 17 | float4 vert = v.vertex; 18 | float4 vPosition = UnityObjectToClipPos(vert); 19 | float2 pixelSize = vPosition.w; 20 | 21 | pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); 22 | float scale = rsqrt(dot(pixelSize, pixelSize)); 23 | scale *= abs(v.texcoord1.y) * _GradientScale * (_Sharpness + 1); 24 | scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); 25 | data.param.y = scale; 26 | #endif 27 | 28 | data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // 29 | 30 | v.texcoord1.xy = UnpackUV(v.texcoord1.x); 31 | data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); 32 | } 33 | 34 | void PixShader(Input input, inout SurfaceOutput o) 35 | { 36 | 37 | #if USE_DERIVATIVE 38 | float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y)); 39 | pixelSize *= _TextureWidth * .75; 40 | float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1); 41 | #else 42 | float scale = input.param.y; 43 | #endif 44 | 45 | // Signed distance 46 | float c = tex2D(_MainTex, input.uv_MainTex).a; 47 | float sd = (.5 - c - input.param.x) * scale + .5; 48 | float outline = _OutlineWidth*_ScaleRatioA * scale; 49 | float softness = _OutlineSoftness*_ScaleRatioA * scale; 50 | 51 | // Color & Alpha 52 | float4 faceColor = _FaceColor; 53 | float4 outlineColor = _OutlineColor; 54 | faceColor *= input.color; 55 | outlineColor.a *= input.color.a; 56 | faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); 57 | outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); 58 | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); 59 | faceColor.rgb /= max(faceColor.a, 0.0001); 60 | 61 | #if BEVEL_ON 62 | float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); 63 | 64 | float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a, 65 | tex2D(_MainTex, input.uv_MainTex + delta.xz).a, 66 | tex2D(_MainTex, input.uv_MainTex - delta.zy).a, 67 | tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; 68 | 69 | // Face Normal 70 | float3 n = GetSurfaceNormal(smp4x, input.param.x); 71 | 72 | // Bumpmap 73 | float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; 74 | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); 75 | bump = lerp(float3(0, 0, 1), bump, faceColor.a); 76 | n = normalize(n - bump); 77 | 78 | // Cubemap reflection 79 | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); 80 | float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; 81 | #else 82 | float3 n = float3(0, 0, -1); 83 | float3 emission = float3(0, 0, 0); 84 | #endif 85 | 86 | #if GLOW_ON 87 | float4 glowColor = GetGlowColor(sd, scale); 88 | glowColor.a *= input.color.a; 89 | emission += glowColor.rgb*glowColor.a; 90 | faceColor = BlendARGB(glowColor, faceColor); 91 | faceColor.rgb /= max(faceColor.a, 0.0001); 92 | #endif 93 | 94 | // Set Standard output structure 95 | o.Albedo = faceColor.rgb; 96 | o.Normal = -n; 97 | o.Emission = emission; 98 | o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); 99 | o.Gloss = 1; 100 | o.Alpha = faceColor.a; 101 | } 102 | -------------------------------------------------------------------------------- /Assets/Plugins/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d930090c0cd643c7b55f19a38538c162 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/_Game.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d625d55fbde0dbf44999d3451bb3192e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: abcd5136063637c469311773f831ec9c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/Prefabs/Benchmark Button.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &4584800182068124739 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 5346628881940934282} 12 | - component: {fileID: 5307836295848433295} 13 | - component: {fileID: 8740615245247339612} 14 | - component: {fileID: 8915558375402098701} 15 | - component: {fileID: 788494012047347742} 16 | m_Layer: 5 17 | m_Name: Benchmark Button 18 | m_TagString: Untagged 19 | m_Icon: {fileID: 0} 20 | m_NavMeshLayer: 0 21 | m_StaticEditorFlags: 0 22 | m_IsActive: 1 23 | --- !u!224 &5346628881940934282 24 | RectTransform: 25 | m_ObjectHideFlags: 0 26 | m_CorrespondingSourceObject: {fileID: 0} 27 | m_PrefabInstance: {fileID: 0} 28 | m_PrefabAsset: {fileID: 0} 29 | m_GameObject: {fileID: 4584800182068124739} 30 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 31 | m_LocalPosition: {x: 0, y: 0, z: 0} 32 | m_LocalScale: {x: 1, y: 1, z: 1} 33 | m_ConstrainProportionsScale: 0 34 | m_Children: 35 | - {fileID: 2705366867761973850} 36 | m_Father: {fileID: 0} 37 | m_RootOrder: 0 38 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 39 | m_AnchorMin: {x: 0.5, y: 0.5} 40 | m_AnchorMax: {x: 0.5, y: 0.5} 41 | m_AnchoredPosition: {x: 0, y: 0} 42 | m_SizeDelta: {x: 253.125, y: 142.1875} 43 | m_Pivot: {x: 0.5, y: 0.5} 44 | --- !u!222 &5307836295848433295 45 | CanvasRenderer: 46 | m_ObjectHideFlags: 0 47 | m_CorrespondingSourceObject: {fileID: 0} 48 | m_PrefabInstance: {fileID: 0} 49 | m_PrefabAsset: {fileID: 0} 50 | m_GameObject: {fileID: 4584800182068124739} 51 | m_CullTransparentMesh: 1 52 | --- !u!114 &8740615245247339612 53 | MonoBehaviour: 54 | m_ObjectHideFlags: 0 55 | m_CorrespondingSourceObject: {fileID: 0} 56 | m_PrefabInstance: {fileID: 0} 57 | m_PrefabAsset: {fileID: 0} 58 | m_GameObject: {fileID: 4584800182068124739} 59 | m_Enabled: 1 60 | m_EditorHideFlags: 0 61 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 62 | m_Name: 63 | m_EditorClassIdentifier: 64 | m_Material: {fileID: 0} 65 | m_Color: {r: 1, g: 0.8365737, b: 0, a: 1} 66 | m_RaycastTarget: 1 67 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 68 | m_Maskable: 1 69 | m_OnCullStateChanged: 70 | m_PersistentCalls: 71 | m_Calls: [] 72 | m_Sprite: {fileID: 21300000, guid: d49637e2ace916f4e8369222abd5623b, type: 3} 73 | m_Type: 0 74 | m_PreserveAspect: 0 75 | m_FillCenter: 1 76 | m_FillMethod: 4 77 | m_FillAmount: 1 78 | m_FillClockwise: 1 79 | m_FillOrigin: 0 80 | m_UseSpriteMesh: 0 81 | m_PixelsPerUnitMultiplier: 1 82 | --- !u!114 &8915558375402098701 83 | MonoBehaviour: 84 | m_ObjectHideFlags: 0 85 | m_CorrespondingSourceObject: {fileID: 0} 86 | m_PrefabInstance: {fileID: 0} 87 | m_PrefabAsset: {fileID: 0} 88 | m_GameObject: {fileID: 4584800182068124739} 89 | m_Enabled: 1 90 | m_EditorHideFlags: 0 91 | m_Script: {fileID: 11500000, guid: 386595b0e2e3c39498b39a440fad4c30, type: 3} 92 | m_Name: 93 | m_EditorClassIdentifier: 94 | _buttonText: {fileID: 1851524112041981096} 95 | --- !u!114 &788494012047347742 96 | MonoBehaviour: 97 | m_ObjectHideFlags: 0 98 | m_CorrespondingSourceObject: {fileID: 0} 99 | m_PrefabInstance: {fileID: 0} 100 | m_PrefabAsset: {fileID: 0} 101 | m_GameObject: {fileID: 4584800182068124739} 102 | m_Enabled: 1 103 | m_EditorHideFlags: 0 104 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 105 | m_Name: 106 | m_EditorClassIdentifier: 107 | m_Navigation: 108 | m_Mode: 3 109 | m_WrapAround: 0 110 | m_SelectOnUp: {fileID: 0} 111 | m_SelectOnDown: {fileID: 0} 112 | m_SelectOnLeft: {fileID: 0} 113 | m_SelectOnRight: {fileID: 0} 114 | m_Transition: 1 115 | m_Colors: 116 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 117 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 118 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 119 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 120 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 121 | m_ColorMultiplier: 1 122 | m_FadeDuration: 0.1 123 | m_SpriteState: 124 | m_HighlightedSprite: {fileID: 0} 125 | m_PressedSprite: {fileID: 0} 126 | m_SelectedSprite: {fileID: 0} 127 | m_DisabledSprite: {fileID: 0} 128 | m_AnimationTriggers: 129 | m_NormalTrigger: Normal 130 | m_HighlightedTrigger: Highlighted 131 | m_PressedTrigger: Pressed 132 | m_SelectedTrigger: Selected 133 | m_DisabledTrigger: Disabled 134 | m_Interactable: 1 135 | m_TargetGraphic: {fileID: 8740615245247339612} 136 | m_OnClick: 137 | m_PersistentCalls: 138 | m_Calls: [] 139 | --- !u!1 &9178544138812101402 140 | GameObject: 141 | m_ObjectHideFlags: 0 142 | m_CorrespondingSourceObject: {fileID: 0} 143 | m_PrefabInstance: {fileID: 0} 144 | m_PrefabAsset: {fileID: 0} 145 | serializedVersion: 6 146 | m_Component: 147 | - component: {fileID: 2705366867761973850} 148 | - component: {fileID: 6836571157154665147} 149 | - component: {fileID: 1851524112041981096} 150 | m_Layer: 5 151 | m_Name: Text (TMP) 152 | m_TagString: Untagged 153 | m_Icon: {fileID: 0} 154 | m_NavMeshLayer: 0 155 | m_StaticEditorFlags: 0 156 | m_IsActive: 1 157 | --- !u!224 &2705366867761973850 158 | RectTransform: 159 | m_ObjectHideFlags: 0 160 | m_CorrespondingSourceObject: {fileID: 0} 161 | m_PrefabInstance: {fileID: 0} 162 | m_PrefabAsset: {fileID: 0} 163 | m_GameObject: {fileID: 9178544138812101402} 164 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 165 | m_LocalPosition: {x: 0, y: 0, z: 0} 166 | m_LocalScale: {x: 1, y: 1, z: 1} 167 | m_ConstrainProportionsScale: 0 168 | m_Children: [] 169 | m_Father: {fileID: 5346628881940934282} 170 | m_RootOrder: 0 171 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 172 | m_AnchorMin: {x: 0, y: 0} 173 | m_AnchorMax: {x: 1, y: 1} 174 | m_AnchoredPosition: {x: 0, y: 0} 175 | m_SizeDelta: {x: -49.2847, y: -58.9921} 176 | m_Pivot: {x: 0.5, y: 0.5} 177 | --- !u!222 &6836571157154665147 178 | CanvasRenderer: 179 | m_ObjectHideFlags: 0 180 | m_CorrespondingSourceObject: {fileID: 0} 181 | m_PrefabInstance: {fileID: 0} 182 | m_PrefabAsset: {fileID: 0} 183 | m_GameObject: {fileID: 9178544138812101402} 184 | m_CullTransparentMesh: 1 185 | --- !u!114 &1851524112041981096 186 | MonoBehaviour: 187 | m_ObjectHideFlags: 0 188 | m_CorrespondingSourceObject: {fileID: 0} 189 | m_PrefabInstance: {fileID: 0} 190 | m_PrefabAsset: {fileID: 0} 191 | m_GameObject: {fileID: 9178544138812101402} 192 | m_Enabled: 1 193 | m_EditorHideFlags: 0 194 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} 195 | m_Name: 196 | m_EditorClassIdentifier: 197 | m_Material: {fileID: 0} 198 | m_Color: {r: 1, g: 1, b: 1, a: 1} 199 | m_RaycastTarget: 0 200 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 201 | m_Maskable: 1 202 | m_OnCullStateChanged: 203 | m_PersistentCalls: 204 | m_Calls: [] 205 | m_text: Extern Call Caching 206 | m_isRightToLeft: 0 207 | m_fontAsset: {fileID: 11400000, guid: cf11f61ee78e8844eb3fd18c6f88557f, type: 2} 208 | m_sharedMaterial: {fileID: 2100000, guid: d4ea37ea97e26f6428723032c3d9e24f, type: 2} 209 | m_fontSharedMaterials: [] 210 | m_fontMaterial: {fileID: 0} 211 | m_fontMaterials: [] 212 | m_fontColor32: 213 | serializedVersion: 2 214 | rgba: 4294967295 215 | m_fontColor: {r: 1, g: 1, b: 1, a: 1} 216 | m_enableVertexGradient: 0 217 | m_colorMode: 3 218 | m_fontColorGradient: 219 | topLeft: {r: 1, g: 1, b: 1, a: 1} 220 | topRight: {r: 1, g: 1, b: 1, a: 1} 221 | bottomLeft: {r: 1, g: 1, b: 1, a: 1} 222 | bottomRight: {r: 1, g: 1, b: 1, a: 1} 223 | m_fontColorGradientPreset: {fileID: 0} 224 | m_spriteAsset: {fileID: 0} 225 | m_tintAllSprites: 0 226 | m_StyleSheet: {fileID: 0} 227 | m_TextStyleHashCode: -1183493901 228 | m_overrideHtmlColors: 0 229 | m_faceColor: 230 | serializedVersion: 2 231 | rgba: 4294967295 232 | m_fontSize: 18 233 | m_fontSizeBase: 18 234 | m_fontWeight: 400 235 | m_enableAutoSizing: 0 236 | m_fontSizeMin: 18 237 | m_fontSizeMax: 72 238 | m_fontStyle: 0 239 | m_HorizontalAlignment: 2 240 | m_VerticalAlignment: 512 241 | m_textAlignment: 65535 242 | m_characterSpacing: 0 243 | m_wordSpacing: 0 244 | m_lineSpacing: 0 245 | m_lineSpacingMax: 0 246 | m_paragraphSpacing: 0 247 | m_charWidthMaxAdj: 0 248 | m_enableWordWrapping: 1 249 | m_wordWrappingRatios: 0.4 250 | m_overflowMode: 0 251 | m_linkedTextComponent: {fileID: 0} 252 | parentLinkedComponent: {fileID: 0} 253 | m_enableKerning: 1 254 | m_enableExtraPadding: 0 255 | checkPaddingRequired: 0 256 | m_isRichText: 1 257 | m_parseCtrlCharacters: 1 258 | m_isOrthographic: 1 259 | m_isCullingEnabled: 0 260 | m_horizontalMapping: 0 261 | m_verticalMapping: 0 262 | m_uvLineOffset: 0 263 | m_geometrySortingOrder: 0 264 | m_IsTextObjectScaleStatic: 0 265 | m_VertexBufferAutoSizeReduction: 0 266 | m_useMaxVisibleDescender: 1 267 | m_pageToDisplay: 1 268 | m_margin: {x: 0, y: 0, z: 0, w: 0} 269 | m_isUsingLegacyAnimationComponent: 0 270 | m_isVolumetricText: 0 271 | m_hasFontAssetChanged: 0 272 | m_baseMaterial: {fileID: 0} 273 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} 274 | -------------------------------------------------------------------------------- /Assets/_Game/Prefabs/Benchmark Button.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: edcdc6fd804f2fd44be5bba6b98f2292 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/_Game/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 131a6b21c8605f84396be9f6751fb6e3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/Scenes/Main.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2cda990e2423bbf4892e6590ba056729 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/_Game/Sprites.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d249913c1bb4f94282f5c6c4d8aff9f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Matthew-J-Spencer/Unity-Benchmarks/524f42866d4ea5639a2926d2ba47c267f63a273e/Assets/_Game/Sprites/Button.png -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Button.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d49637e2ace916f4e8369222abd5623b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 256 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | - serializedVersion: 3 80 | buildTarget: Standalone 81 | maxTextureSize: 2048 82 | resizeAlgorithm: 0 83 | textureFormat: -1 84 | textureCompression: 1 85 | compressionQuality: 50 86 | crunchedCompression: 0 87 | allowsAlphaSplitting: 0 88 | overridden: 0 89 | androidETC2FallbackOverride: 0 90 | forceMaximumCompressionQuality_BC6H_BC7: 0 91 | - serializedVersion: 3 92 | buildTarget: Server 93 | maxTextureSize: 2048 94 | resizeAlgorithm: 0 95 | textureFormat: -1 96 | textureCompression: 1 97 | compressionQuality: 50 98 | crunchedCompression: 0 99 | allowsAlphaSplitting: 0 100 | overridden: 0 101 | androidETC2FallbackOverride: 0 102 | forceMaximumCompressionQuality_BC6H_BC7: 0 103 | spriteSheet: 104 | serializedVersion: 2 105 | sprites: [] 106 | outline: [] 107 | physicsShape: [] 108 | bones: [] 109 | spriteID: 5e97eb03825dee720800000000000000 110 | internalID: 0 111 | vertices: [] 112 | indices: 113 | edges: [] 114 | weights: [] 115 | secondaryTextures: [] 116 | nameFileIdTable: {} 117 | spritePackingTag: 118 | pSDRemoveMatte: 0 119 | pSDShowRemoveMatteOption: 0 120 | userData: 121 | assetBundleName: 122 | assetBundleVariant: 123 | -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider Point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Matthew-J-Spencer/Unity-Benchmarks/524f42866d4ea5639a2926d2ba47c267f63a273e/Assets/_Game/Sprites/Slider Point.png -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider Point.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8477c3e178a60774ea4b2f10cb260f8d 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | spriteSheet: 80 | serializedVersion: 2 81 | sprites: [] 82 | outline: [] 83 | physicsShape: [] 84 | bones: [] 85 | spriteID: 5e97eb03825dee720800000000000000 86 | internalID: 0 87 | vertices: [] 88 | indices: 89 | edges: [] 90 | weights: [] 91 | secondaryTextures: [] 92 | nameFileIdTable: {} 93 | spritePackingTag: 94 | pSDRemoveMatte: 0 95 | pSDShowRemoveMatteOption: 0 96 | userData: 97 | assetBundleName: 98 | assetBundleVariant: 99 | -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider unfilled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Matthew-J-Spencer/Unity-Benchmarks/524f42866d4ea5639a2926d2ba47c267f63a273e/Assets/_Game/Sprites/Slider unfilled.png -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider unfilled.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1150b2371af6c647bb4181c1f45d919 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 50, y: 0, z: 50, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | - serializedVersion: 3 80 | buildTarget: Standalone 81 | maxTextureSize: 2048 82 | resizeAlgorithm: 0 83 | textureFormat: -1 84 | textureCompression: 1 85 | compressionQuality: 50 86 | crunchedCompression: 0 87 | allowsAlphaSplitting: 0 88 | overridden: 0 89 | androidETC2FallbackOverride: 0 90 | forceMaximumCompressionQuality_BC6H_BC7: 0 91 | - serializedVersion: 3 92 | buildTarget: Server 93 | maxTextureSize: 2048 94 | resizeAlgorithm: 0 95 | textureFormat: -1 96 | textureCompression: 1 97 | compressionQuality: 50 98 | crunchedCompression: 0 99 | allowsAlphaSplitting: 0 100 | overridden: 0 101 | androidETC2FallbackOverride: 0 102 | forceMaximumCompressionQuality_BC6H_BC7: 0 103 | spriteSheet: 104 | serializedVersion: 2 105 | sprites: [] 106 | outline: [] 107 | physicsShape: [] 108 | bones: [] 109 | spriteID: 5e97eb03825dee720800000000000000 110 | internalID: 1537655665 111 | vertices: [] 112 | indices: 113 | edges: [] 114 | weights: [] 115 | secondaryTextures: [] 116 | nameFileIdTable: {} 117 | spritePackingTag: 118 | pSDRemoveMatte: 0 119 | pSDShowRemoveMatteOption: 0 120 | userData: 121 | assetBundleName: 122 | assetBundleVariant: 123 | -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Matthew-J-Spencer/Unity-Benchmarks/524f42866d4ea5639a2926d2ba47c267f63a273e/Assets/_Game/Sprites/Slider.png -------------------------------------------------------------------------------- /Assets/_Game/Sprites/Slider.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc3b8d2da21a98d4188fd7b174ba22e2 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 50, y: 0, z: 50, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | - serializedVersion: 3 80 | buildTarget: Standalone 81 | maxTextureSize: 2048 82 | resizeAlgorithm: 0 83 | textureFormat: -1 84 | textureCompression: 1 85 | compressionQuality: 50 86 | crunchedCompression: 0 87 | allowsAlphaSplitting: 0 88 | overridden: 0 89 | androidETC2FallbackOverride: 0 90 | forceMaximumCompressionQuality_BC6H_BC7: 0 91 | - serializedVersion: 3 92 | buildTarget: Server 93 | maxTextureSize: 2048 94 | resizeAlgorithm: 0 95 | textureFormat: -1 96 | textureCompression: 1 97 | compressionQuality: 50 98 | crunchedCompression: 0 99 | allowsAlphaSplitting: 0 100 | overridden: 0 101 | androidETC2FallbackOverride: 0 102 | forceMaximumCompressionQuality_BC6H_BC7: 0 103 | spriteSheet: 104 | serializedVersion: 2 105 | sprites: [] 106 | outline: [] 107 | physicsShape: [] 108 | bones: [] 109 | spriteID: 5e97eb03825dee720800000000000000 110 | internalID: 1537655665 111 | vertices: [] 112 | indices: 113 | edges: [] 114 | weights: [] 115 | secondaryTextures: [] 116 | nameFileIdTable: {} 117 | spritePackingTag: 118 | pSDRemoveMatte: 0 119 | pSDShowRemoveMatteOption: 0 120 | userData: 121 | assetBundleName: 122 | assetBundleVariant: 123 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f8e7904ce6565f54db2855df7fa7a4fb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/BenchmarkButton.cs: -------------------------------------------------------------------------------- 1 | using TMPro; 2 | using UnityEngine; 3 | 4 | public class BenchmarkButton : MonoBehaviour { 5 | [SerializeField] private TMP_Text _buttonText; 6 | public void Init(string btnText) { 7 | _buttonText.text = btnText; 8 | } 9 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/BenchmarkButton.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 386595b0e2e3c39498b39a440fad4c30 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc964b792e4fb2946a1d9f6e27506b1e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/Benchmark Helpers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d308d0b391e0414d8daa3b2517f283f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/Benchmark Helpers/FindHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class FindHelper : MonoBehaviour 6 | { 7 | // Start is called before the first frame update 8 | void Start() 9 | { 10 | 11 | } 12 | 13 | // Update is called once per frame 14 | void Update() 15 | { 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/Benchmark Helpers/FindHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b37d23a7184ed394da743a9482579107 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/Benchmark Helpers/SendMessageHelper.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class SendMessageHelper : MonoBehaviour 4 | { 5 | public void CallThisFunction(int b) { 6 | var value = 1 + b; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/Benchmark Helpers/SendMessageHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d5f2c4424d013148992dca6d1b1f497 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/CameraBench.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class CameraBench : BenchmarkBase { 4 | 5 | private Camera _cam; 6 | protected override void Init() { 7 | BenchmarkName = "Camera Access"; 8 | 9 | _cam = Camera.main; 10 | 11 | Benchmarks.Add(new BenchmarkData("Camera.main", () => { 12 | var cam = Camera.main; 13 | var aspect = cam.aspect; 14 | })); 15 | 16 | Benchmarks.Add(new BenchmarkData("FindWithTag", () => { 17 | var cam = GameObject.FindWithTag("MainCamera").GetComponent(); 18 | var aspect = cam.aspect; 19 | })); 20 | 21 | Benchmarks.Add(new BenchmarkData("FindObjectOfType", () => { 22 | var cam = FindObjectOfType(); 23 | var aspect = cam.aspect; 24 | })); 25 | 26 | Benchmarks.Add(new BenchmarkData("Cached Camera", () => { 27 | var aspect = _cam.aspect; 28 | })); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/CameraBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3cb91f0dd8f6d98439385a73f0222544 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/DistanceBench.cs: -------------------------------------------------------------------------------- 1 | using Vector3 = UnityEngine.Vector3; 2 | 3 | public class DistanceBench : BenchmarkBase { 4 | private readonly Vector3 _a = new(1038, 2819.43f, 103); 5 | private readonly Vector3 _b = new(632.34f, 12.1f, 9238.98f); 6 | 7 | protected override void Init() { 8 | BenchmarkName = "Distance"; 9 | 10 | Benchmarks.Add(new BenchmarkData("Vector3.Distance", () => { 11 | var value = Vector3.Distance(_a, _b); 12 | })); 13 | Benchmarks.Add(new BenchmarkData("Square Magnitude", () => { 14 | var value = (_a - _b).sqrMagnitude; 15 | })); 16 | } 17 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/DistanceBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b995e2c9ccf348348872c23b3cdbe787 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/ExternCallsBench.cs: -------------------------------------------------------------------------------- 1 | 2 | using UnityEngine; 3 | 4 | public class ExternCallsBench : BenchmarkBase { 5 | 6 | private Transform _transform; 7 | 8 | protected override void Init() { 9 | 10 | _transform = transform; 11 | 12 | BenchmarkName = "Extern Call Caching"; 13 | 14 | Benchmarks.Add(new BenchmarkData("Not caching", () => { 15 | var pos = transform.position; 16 | var rot = transform.rotation; 17 | var scale = transform.localScale; 18 | })); 19 | 20 | Benchmarks.Add(new BenchmarkData("Cached per test", () => { 21 | var t = transform; 22 | var pos = t.position; 23 | var rot = t.rotation; 24 | var scale = t.localScale; 25 | })); 26 | 27 | Benchmarks.Add(new BenchmarkData("Fully cached", () => { 28 | var pos = _transform.position; 29 | var rot = _transform.rotation; 30 | var scale = _transform.localScale; 31 | })); 32 | } 33 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/ExternCallsBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ddbe882c34db3954ab8e48aff680989c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/FindBench.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class FindBench : BenchmarkBase { 4 | private const int TREE_COUNT = 50; 5 | private const int LAYER_COUNT = 50; 6 | private const int OBJECTS_PER_LAYER = 5; 7 | 8 | protected override void Init() { 9 | MaxRecommendedIterations = 1000; 10 | 11 | var last = transform; 12 | for (int i = 0; i < TREE_COUNT; i++) { 13 | var treeObj = new GameObject($"Tree {i}"); 14 | treeObj.transform.SetParent(last); 15 | for (int j = 0; j < LAYER_COUNT; j++) { 16 | var layerObj = new GameObject($"Layer {j}"); 17 | layerObj.transform.SetParent(treeObj.transform); 18 | for (int k = 0; k < OBJECTS_PER_LAYER; k++) { 19 | var obj = new GameObject($"Obj {k}") { 20 | tag = "Find" 21 | }; 22 | obj.AddComponent(); 23 | obj.transform.SetParent(layerObj.transform); 24 | } 25 | } 26 | } 27 | 28 | BenchmarkName = "Find Objects"; 29 | 30 | Benchmarks.Add(new BenchmarkData("FindGameObjectsWithTag", () => { 31 | var values = GameObject.FindGameObjectsWithTag("Find"); 32 | })); 33 | 34 | 35 | Benchmarks.Add(new BenchmarkData("FindObjectsOfType", () => { 36 | var values = FindObjectsOfType(); 37 | })); 38 | } 39 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/FindBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26031426e15a13244a7959aee182299b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/LinqBench.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using UnityEngine; 4 | 5 | public class LinqBench : BenchmarkBase { 6 | private const int COUNT = 10000; 7 | private const int THRESHOLD = 5000; 8 | private readonly List _data = new(); 9 | 10 | protected override void Init() { 11 | BenchmarkName = "Linq vs Loop"; 12 | MaxRecommendedIterations = 1000; 13 | 14 | for (int i = 0; i < COUNT; i++) { 15 | _data.Add(new LinqData() { 16 | Value = Random.Range(0, 1000000), 17 | ValueTwo = Random.Range(0f, 1000000f) 18 | }); 19 | } 20 | 21 | Benchmarks.Add(new BenchmarkData("Linq", () => { 22 | var values = _data.Where(d => d.Value > THRESHOLD).Select(v => v.ValueTwo).ToList(); 23 | })); 24 | 25 | Benchmarks.Add(new BenchmarkData("For", () => { 26 | var values = new List(); 27 | for (int i = 0; i < _data.Count; i++) { 28 | if(_data[i].Value > THRESHOLD) values.Add(_data[i].ValueTwo); 29 | } 30 | })); 31 | 32 | Benchmarks.Add(new BenchmarkData("Cached for", () => { 33 | var values = new List(); 34 | var count = _data.Count; 35 | for (int i = 0; i < count; i++) { 36 | if(_data[i].Value > THRESHOLD) values.Add(_data[i].ValueTwo); 37 | } 38 | })); 39 | 40 | Benchmarks.Add(new BenchmarkData("Foreach", () => { 41 | var values = new List(); 42 | foreach (var data in _data) { 43 | if(data.Value > THRESHOLD) values.Add(data.ValueTwo); 44 | } 45 | })); 46 | } 47 | 48 | private struct LinqData { 49 | public int Value; 50 | public float ValueTwo; 51 | } 52 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/LinqBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6dbdb601bc19d5b4ca7b8e2905ded7f1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/NonAllocBench.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class NonAllocBench : BenchmarkBase { 4 | private const float RADIUS = 10; 5 | private readonly Collider[] _collisions = new Collider[100]; 6 | 7 | protected override void Init() { 8 | MaxRecommendedIterations = 250000; 9 | BenchmarkName = "NonAlloc"; 10 | 11 | Benchmarks.Add(new BenchmarkData("OverlapSphere", () => { 12 | var result = Physics.OverlapSphere(transform.position, RADIUS); 13 | })); 14 | 15 | Benchmarks.Add(new BenchmarkData("OverlapSphereNonAlloc", () => { 16 | var result = Physics.OverlapSphereNonAlloc(transform.position, RADIUS, _collisions); 17 | })); 18 | } 19 | 20 | private void OnDrawGizmosSelected() { 21 | Gizmos.DrawWireSphere(transform.position,RADIUS); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/NonAllocBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6093ca45d6306db4cbc9b3fb8a57e0e5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/OrderOfOperation.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | /// 6 | /// Integer math is faster than floating point, which is faster than vector 7 | /// https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity7.html 8 | /// 9 | public class OrderOfOperation : BenchmarkBase { 10 | private readonly Vector3 _vector3 = new(789, 123, 456); 11 | 12 | private const float MULTIPLIER = 2035.72f; 13 | 14 | protected override void Init() { 15 | BenchmarkName = "Order of Operation"; 16 | 17 | Benchmarks.Add(new BenchmarkData("FxFxV", () => { 18 | var result = MULTIPLIER * MULTIPLIER * _vector3; 19 | })); 20 | 21 | Benchmarks.Add(new BenchmarkData("FxVxF", () => { 22 | var result = MULTIPLIER * _vector3 * MULTIPLIER; 23 | })); 24 | 25 | Benchmarks.Add(new BenchmarkData("VxFxF", () => { 26 | var result = _vector3 * MULTIPLIER * MULTIPLIER; 27 | })); 28 | 29 | } 30 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/OrderOfOperation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b274a05f89ff5654688ae433828508bb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/SendMessageBench.cs: -------------------------------------------------------------------------------- 1 | public class SendMessageBench : BenchmarkBase { 2 | 3 | protected override void Init() { 4 | BenchmarkName = "Send Message"; 5 | 6 | Benchmarks.Add(new BenchmarkData("Send Message", () => { SendMessage(nameof(SendMessageHelper.CallThisFunction), 69); })); 7 | Benchmarks.Add(new BenchmarkData("Get Component", () => { 8 | var caller = GetComponent(); 9 | caller.CallThisFunction(69); 10 | })); 11 | } 12 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/SendMessageBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0331b3f0a4bf78b46a56670fa6458571 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/StringBench.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UnityEngine; 5 | 6 | public class StringBench : BenchmarkBase { 7 | private const int COUNT = 100; 8 | private const string PHRASE = "Subscribe :) "; 9 | protected override void Init() { 10 | BenchmarkName = "String Builder"; 11 | MaxRecommendedIterations = 3000; 12 | 13 | Benchmarks.Add(new BenchmarkData("Concatenation", () => { 14 | var value = ""; 15 | for (int i = 0; i < COUNT; i++) { 16 | value += PHRASE; 17 | } 18 | })); 19 | 20 | Benchmarks.Add(new BenchmarkData("Builder", () => { 21 | var builder = new StringBuilder(); 22 | for (int i = 0; i < COUNT; i++) { 23 | builder.Append(PHRASE); 24 | } 25 | 26 | var value = builder.ToString(); 27 | })); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Benchmarks/StringBench.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7cb7ead9a0b91f34e82a10d9c93a3c85 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Classes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f7a44eb92654f4c4baeb513eaf1a4570 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Classes/BenchmarkBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using UnityEngine; 5 | 6 | /// 7 | /// I made this mono in case future tests required it 8 | /// 9 | public abstract class BenchmarkBase : MonoBehaviour { 10 | public string BenchmarkName { get; protected set; } 11 | public int MaxRecommendedIterations { get; protected set; } = int.MaxValue; 12 | protected readonly List Benchmarks = new(); 13 | 14 | public IEnumerable RunBenchmark(int iterations) { 15 | foreach (var benchmark in Benchmarks) { 16 | yield return Run(benchmark); 17 | } 18 | 19 | BenchmarkData Run(BenchmarkData data) { 20 | var watch = Stopwatch.StartNew(); 21 | for (var i = 0; i < iterations; i++) { 22 | data.Action(); 23 | } 24 | 25 | watch.Stop(); 26 | data.Result = watch.ElapsedMilliseconds; 27 | return data; 28 | } 29 | } 30 | 31 | private void Awake() => Init(); 32 | 33 | protected abstract void Init(); 34 | } 35 | 36 | public struct BenchmarkData { 37 | public readonly string Name; 38 | public readonly Action Action; 39 | public long Result; 40 | 41 | public BenchmarkData(string name, Action action) { 42 | Name = name; 43 | Action = action; 44 | Result = 0; 45 | } 46 | } -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Classes/BenchmarkBase.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 12723efaa0064d8389bd5309b59f1d92 3 | timeCreated: 1646913840 -------------------------------------------------------------------------------- /Assets/_Game/_Scripts/Classes/Runner.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | using TMPro; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | public class Runner : MonoBehaviour { 7 | [SerializeField] private TMP_Text _resultText; 8 | 9 | [SerializeField] private Slider _iterationSlider; 10 | [SerializeField] private TMP_Text _iterationText; 11 | [SerializeField] private Transform _buttonParent; 12 | [SerializeField] private BenchmarkButton _btnPrefab; 13 | 14 | private BenchmarkBase _confirmBenchmark; 15 | 16 | private int Iterations => (int)_iterationSlider.value; 17 | 18 | private void Start() { 19 | _iterationSlider.onValueChanged.AddListener(f => _iterationText.text = f.ToString("N0")); 20 | _iterationSlider.value = 500000; 21 | 22 | foreach (var benchmark in GetComponentsInChildren()) { 23 | var btn = Instantiate(_btnPrefab, _buttonParent); 24 | btn.Init(benchmark.BenchmarkName); 25 | 26 | btn.GetComponent