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