@ -0,0 +1,695 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<PropertyGroup> | |||||
<LangVersion>latest</LangVersion> | |||||
</PropertyGroup> | |||||
<PropertyGroup> | |||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
<ProductVersion>10.0.20506</ProductVersion> | |||||
<SchemaVersion>2.0</SchemaVersion> | |||||
<RootNamespace></RootNamespace> | |||||
<ProjectGuid>{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}</ProjectGuid> | |||||
<OutputType>Library</OutputType> | |||||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||||
<AssemblyName>Assembly-CSharp-Editor</AssemblyName> | |||||
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | |||||
<BaseDirectory>.</BaseDirectory> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
<DebugType>full</DebugType> | |||||
<Optimize>false</Optimize> | |||||
<OutputPath>Temp\bin\Debug\</OutputPath> | |||||
<DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_3_14;UNITY_2018_3;UNITY_2018;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_TEXTURE_STREAMING;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_VIDEO;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_EVENT_QUEUE;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_VSTU;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
<NoWarn>0169;CS0649;IDE0051</NoWarn> | |||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||||
<DebugType>pdbonly</DebugType> | |||||
<Optimize>true</Optimize> | |||||
<OutputPath>Temp\bin\Release\</OutputPath> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
<NoWarn>0169;CS0649;IDE0051</NoWarn> | |||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> | |||||
</PropertyGroup> | |||||
<PropertyGroup> | |||||
<NoConfig>true</NoConfig> | |||||
<NoStdLib>true</NoStdLib> | |||||
<AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> | |||||
<ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades> | |||||
<ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades> | |||||
</PropertyGroup> | |||||
<PropertyGroup> | |||||
<ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||||
<UnityProjectGenerator>Unity/VSTU</UnityProjectGenerator> | |||||
<UnityProjectType>Editor:5</UnityProjectType> | |||||
<UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget> | |||||
<UnityVersion>2018.3.14f1</UnityVersion> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Reference Include="UnityEngine"> | |||||
<HintPath>C:\Program Files\Unity\Hub\Editor\2018.3.14f1\Editor\Data\Managed/UnityEngine/UnityEngine.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor"> | |||||
<HintPath>C:\Program Files\Unity\Hub\Editor\2018.3.14f1\Editor\Data\Managed/UnityEditor.dll</HintPath> | |||||
</Reference> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Compile Include="Assets\Editor\AssetBundle.cs" /> | |||||
<Reference Include="Unity.TextMeshPro.Editor"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.PackageManagerUI.Editor"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.CollabProxy.Editor"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.TextMeshPro"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/ScriptAssemblies/Unity.TextMeshPro.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.Analytics.DataPrivacy"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.AIModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ARModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.AccessibilityModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.AnimationModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.AssetBundleModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.AudioModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.BaselibModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.BaselibModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ClothModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ClusterInputModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ClusterRendererModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.CoreModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.CrashReportingModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.DirectorModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.FileSystemHttpModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.FileSystemHttpModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.GameCenterModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.GridModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.HotReloadModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.IMGUIModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ImageConversionModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.InputModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.JSONSerializeModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.LocalizationModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ParticleSystemModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.PerformanceReportingModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.PhysicsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.Physics2DModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ProfilerModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.ScreenCaptureModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SharedInternalsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SpatialTrackingModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpatialTrackingModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SpriteMaskModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SpriteShapeModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.StreamingModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.StyleSheetsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SubstanceModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TLSModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TerrainModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TerrainPhysicsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TextCoreModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TextRenderingModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TilemapModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TimelineModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TimelineModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UIModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UIElementsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UNETModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UmbraModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityAnalyticsModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityConnectModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityTestProtocolModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityTestProtocolModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityWebRequestModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityWebRequestAudioModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityWebRequestTextureModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UnityWebRequestWWWModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.VFXModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VFXModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.VRModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.VehiclesModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.VideoModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.WindModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.XRModule"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.Locator"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/Unity.Locator.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.UI"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.UI"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.TestRunner"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.TestRunner"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="nunit.framework"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.Timeline"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.Timeline"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.Networking"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.Networking"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.GoogleAudioSpatializer"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.GoogleAudioSpatializer"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.SpatialTracking"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEngine.SpatialTracking"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.VR"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.Graphs"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/Managed/UnityEditor.Graphs.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.LinuxStandalone.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/UnityEditor.LinuxStandalone.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.WindowsStandalone.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/PlaybackEngines/windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="SyntaxTree.VisualStudio.Unity.Bridge"> | |||||
<HintPath>C:/Program Files (x86)/Microsoft Visual Studio Tools for Unity/16.0/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.Advertisements"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/PackageCache/[email protected]/Editor/UnityEditor.Advertisements.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.Analytics.Editor"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/PackageCache/[email protected]/Unity.Analytics.Editor.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.Analytics.StandardEvents"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/PackageCache/[email protected]/Unity.Analytics.StandardEvents.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Unity.Analytics.Tracker"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/PackageCache/[email protected]/Unity.Analytics.Tracker.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityEditor.Purchasing"> | |||||
<HintPath>Z:/Users/aaron/Documents/BS TMP Exporter/Library/PackageCache/[email protected]/Editor/UnityEditor.Purchasing.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="mscorlib"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/mscorlib.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Core"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Core.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Serialization"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Runtime.Serialization.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.Linq"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Xml.Linq.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Numerics"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Numerics.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Numerics.Vectors"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Numerics.Vectors.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Http"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Net.Http.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Microsoft.CSharp"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Microsoft.CSharp.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Data"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/System.Data.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Microsoft.Win32.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/Microsoft.Win32.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="netstandard"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/netstandard.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.AppContext"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.AppContext.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Collections.Concurrent"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Concurrent.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Collections"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Collections.NonGeneric"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.NonGeneric.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Collections.Specialized"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Collections.Specialized.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ComponentModel.Annotations"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Annotations.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ComponentModel"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ComponentModel.EventBasedAsync"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.EventBasedAsync.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ComponentModel.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ComponentModel.TypeConverter"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ComponentModel.TypeConverter.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Console"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Console.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Data.Common"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Data.Common.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.Contracts"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Contracts.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.Debug"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Debug.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.FileVersionInfo"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.FileVersionInfo.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.Process"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Process.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.StackTrace"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.StackTrace.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.TextWriterTraceListener"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TextWriterTraceListener.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.Tools"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.Tools.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Diagnostics.TraceSource"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Diagnostics.TraceSource.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Drawing.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Drawing.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Dynamic.Runtime"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Dynamic.Runtime.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Globalization.Calendars"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Calendars.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Globalization"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Globalization.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Globalization.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.Compression.ZipFile"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Compression.ZipFile.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.FileSystem"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.FileSystem.DriveInfo"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.DriveInfo.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.FileSystem.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.FileSystem.Watcher"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.FileSystem.Watcher.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.IsolatedStorage"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.IsolatedStorage.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.MemoryMappedFiles"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.MemoryMappedFiles.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.Pipes"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.Pipes.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.IO.UnmanagedMemoryStream"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.IO.UnmanagedMemoryStream.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Linq"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Linq.Expressions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Expressions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Linq.Parallel"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Parallel.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Linq.Queryable"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Linq.Queryable.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Http.Rtc"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Http.Rtc.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.NameResolution"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NameResolution.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.NetworkInformation"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.NetworkInformation.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Ping"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Ping.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Requests"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Requests.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Security"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Security.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.Sockets"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.Sockets.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.WebHeaderCollection"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebHeaderCollection.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.WebSockets.Client"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.Client.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Net.WebSockets"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Net.WebSockets.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ObjectModel"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ObjectModel.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection.Emit"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection.Emit.ILGeneration"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.ILGeneration.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection.Emit.Lightweight"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Emit.Lightweight.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Reflection.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Reflection.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Resources.Reader"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Reader.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Resources.ResourceManager"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.ResourceManager.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Resources.Writer"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Resources.Writer.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.CompilerServices.VisualC"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.CompilerServices.VisualC.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Handles"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Handles.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.InteropServices"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.InteropServices.WindowsRuntime"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Numerics"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Numerics.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Serialization.Formatters"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Formatters.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Serialization.Json"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Json.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Serialization.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Runtime.Serialization.Xml"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Runtime.Serialization.Xml.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Claims"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Claims.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Cryptography.Algorithms"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Algorithms.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Cryptography.Csp"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Csp.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Cryptography.Encoding"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Encoding.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Cryptography.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Cryptography.X509Certificates"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Cryptography.X509Certificates.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.Principal"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.Principal.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Security.SecureString"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Security.SecureString.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.Duplex"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Duplex.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.Http"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Http.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.NetTcp"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.NetTcp.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.Primitives"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Primitives.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.Security"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ServiceModel.Security.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Text.Encoding"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Text.Encoding.Extensions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.Encoding.Extensions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Text.RegularExpressions"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Text.RegularExpressions.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.Overlapped"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Overlapped.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.Tasks"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.Tasks.Parallel"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Tasks.Parallel.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.Thread"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Thread.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.ThreadPool"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.ThreadPool.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Threading.Timer"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Threading.Timer.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.ValueTuple"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.ValueTuple.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.ReaderWriter"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.ReaderWriter.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.XDocument"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XDocument.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.XmlDocument"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlDocument.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.XmlSerializer"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XmlSerializer.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.XPath"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Xml.XPath.XDocument"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/4.7.1-api/Facades/System.Xml.XPath.XDocument.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityScript"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="UnityScript.Lang"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/UnityScript.Lang.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Boo.Lang"> | |||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2018.3.14f1/Editor/Data/MonoBleedingEdge/lib/mono/unityscript/Boo.Lang.dll</HintPath> | |||||
</Reference> | |||||
</ItemGroup> | |||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
<Target Name="GenerateTargetFrameworkMonikerAttribute" /> | |||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||||
Other similar extension points exist, see Microsoft.Common.targets. | |||||
<Target Name="BeforeBuild"> | |||||
</Target> | |||||
<Target Name="AfterBuild"> | |||||
</Target> | |||||
--> | |||||
</Project> |
@ -0,0 +1,7 @@ | |||||
ManifestFileVersion: 0 | |||||
CRC: 4236335096 | |||||
AssetBundleManifest: | |||||
AssetBundleInfos: | |||||
Info_0: | |||||
Name: fonts/consolas.font | |||||
Dependencies: {} |
@ -0,0 +1,27 @@ | |||||
ManifestFileVersion: 0 | |||||
CRC: 4006092545 | |||||
Hashes: | |||||
AssetFileHash: | |||||
serializedVersion: 2 | |||||
Hash: 90ebc1ca322c1192331bed9b05c26d79 | |||||
TypeTreeHash: | |||||
serializedVersion: 2 | |||||
Hash: d0b2f0e67a49883fd83625973d09fe14 | |||||
HashAppended: 0 | |||||
ClassTypes: | |||||
- Class: 21 | |||||
Script: {instanceID: 0} | |||||
- Class: 28 | |||||
Script: {instanceID: 0} | |||||
- Class: 48 | |||||
Script: {instanceID: 0} | |||||
- Class: 114 | |||||
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} | |||||
- Class: 115 | |||||
Script: {instanceID: 0} | |||||
Assets: | |||||
- Assets/Consolas/CONSOLAS_BOLD.asset | |||||
- Assets/Consolas/CONSOLAS.asset | |||||
- Assets/Consolas/CONSOLAS_ITALIC.asset | |||||
- Assets/Consolas/CONSOLAS_BOLD_ITALIC.asset | |||||
Dependencies: [] |
@ -0,0 +1,16 @@ | |||||
using UnityEditor; | |||||
using System.IO; | |||||
public class CreateAssetBundles | |||||
{ | |||||
[MenuItem("Assets/Build AssetBundles")] | |||||
static void BuildAllAssetBundles() | |||||
{ | |||||
string assetBundleDirectory = "Assets/AssetBundles"; | |||||
if (!Directory.Exists(assetBundleDirectory)) | |||||
{ | |||||
Directory.CreateDirectory(assetBundleDirectory); | |||||
} | |||||
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); | |||||
} | |||||
} |
@ -0,0 +1,259 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!29 &1 | |||||
OcclusionCullingSettings: | |||||
m_ObjectHideFlags: 0 | |||||
serializedVersion: 2 | |||||
m_OcclusionBakeSettings: | |||||
smallestOccluder: 5 | |||||
smallestHole: 0.25 | |||||
backfaceThreshold: 100 | |||||
m_SceneGUID: 00000000000000000000000000000000 | |||||
m_OcclusionCullingData: {fileID: 0} | |||||
--- !u!104 &2 | |||||
RenderSettings: | |||||
m_ObjectHideFlags: 0 | |||||
serializedVersion: 9 | |||||
m_Fog: 0 | |||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} | |||||
m_FogMode: 3 | |||||
m_FogDensity: 0.01 | |||||
m_LinearFogStart: 0 | |||||
m_LinearFogEnd: 300 | |||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} | |||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} | |||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} | |||||
m_AmbientIntensity: 1 | |||||
m_AmbientMode: 0 | |||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} | |||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} | |||||
m_HaloStrength: 0.5 | |||||
m_FlareStrength: 1 | |||||
m_FlareFadeSpeed: 3 | |||||
m_HaloTexture: {fileID: 0} | |||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_DefaultReflectionMode: 0 | |||||
m_DefaultReflectionResolution: 128 | |||||
m_ReflectionBounces: 1 | |||||
m_ReflectionIntensity: 1 | |||||
m_CustomReflection: {fileID: 0} | |||||
m_Sun: {fileID: 170076734} | |||||
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} | |||||
m_UseRadianceAmbientProbe: 0 | |||||
--- !u!157 &3 | |||||
LightmapSettings: | |||||
m_ObjectHideFlags: 0 | |||||
serializedVersion: 11 | |||||
m_GIWorkflowMode: 0 | |||||
m_GISettings: | |||||
serializedVersion: 2 | |||||
m_BounceScale: 1 | |||||
m_IndirectOutputScale: 1 | |||||
m_AlbedoBoost: 1 | |||||
m_TemporalCoherenceThreshold: 1 | |||||
m_EnvironmentLightingMode: 0 | |||||
m_EnableBakedLightmaps: 1 | |||||
m_EnableRealtimeLightmaps: 0 | |||||
m_LightmapEditorSettings: | |||||
serializedVersion: 10 | |||||
m_Resolution: 2 | |||||
m_BakeResolution: 10 | |||||
m_AtlasSize: 512 | |||||
m_AO: 0 | |||||
m_AOMaxDistance: 1 | |||||
m_CompAOExponent: 1 | |||||
m_CompAOExponentDirect: 0 | |||||
m_Padding: 2 | |||||
m_LightmapParameters: {fileID: 0} | |||||
m_LightmapsBakeMode: 1 | |||||
m_TextureCompression: 1 | |||||
m_FinalGather: 0 | |||||
m_FinalGatherFiltering: 1 | |||||
m_FinalGatherRayCount: 256 | |||||
m_ReflectionCompression: 2 | |||||
m_MixedBakeMode: 2 | |||||
m_BakeBackend: 1 | |||||
m_PVRSampling: 1 | |||||
m_PVRDirectSampleCount: 32 | |||||
m_PVRSampleCount: 256 | |||||
m_PVRBounces: 2 | |||||
m_PVRFilterTypeDirect: 0 | |||||
m_PVRFilterTypeIndirect: 0 | |||||
m_PVRFilterTypeAO: 0 | |||||
m_PVRFilteringMode: 1 | |||||
m_PVRCulling: 1 | |||||
m_PVRFilteringGaussRadiusDirect: 1 | |||||
m_PVRFilteringGaussRadiusIndirect: 5 | |||||
m_PVRFilteringGaussRadiusAO: 2 | |||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5 | |||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2 | |||||
m_PVRFilteringAtrousPositionSigmaAO: 1 | |||||
m_ShowResolutionOverlay: 1 | |||||
m_LightingDataAsset: {fileID: 0} | |||||
m_UseShadowmask: 1 | |||||
--- !u!196 &4 | |||||
NavMeshSettings: | |||||
serializedVersion: 2 | |||||
m_ObjectHideFlags: 0 | |||||
m_BuildSettings: | |||||
serializedVersion: 2 | |||||
agentTypeID: 0 | |||||
agentRadius: 0.5 | |||||
agentHeight: 2 | |||||
agentSlope: 45 | |||||
agentClimb: 0.4 | |||||
ledgeDropHeight: 0 | |||||
maxJumpAcrossDistance: 0 | |||||
minRegionArea: 2 | |||||
manualCellSize: 0 | |||||
cellSize: 0.16666667 | |||||
manualTileSize: 0 | |||||
tileSize: 256 | |||||
accuratePlacement: 0 | |||||
debug: | |||||
m_Flags: 0 | |||||
m_NavMeshData: {fileID: 0} | |||||
--- !u!1 &170076733 | |||||
GameObject: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
serializedVersion: 6 | |||||
m_Component: | |||||
- component: {fileID: 170076735} | |||||
- component: {fileID: 170076734} | |||||
m_Layer: 0 | |||||
m_Name: Directional Light | |||||
m_TagString: Untagged | |||||
m_Icon: {fileID: 0} | |||||
m_NavMeshLayer: 0 | |||||
m_StaticEditorFlags: 0 | |||||
m_IsActive: 1 | |||||
--- !u!108 &170076734 | |||||
Light: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 170076733} | |||||
m_Enabled: 1 | |||||
serializedVersion: 8 | |||||
m_Type: 1 | |||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} | |||||
m_Intensity: 1 | |||||
m_Range: 10 | |||||
m_SpotAngle: 30 | |||||
m_CookieSize: 10 | |||||
m_Shadows: | |||||
m_Type: 2 | |||||
m_Resolution: -1 | |||||
m_CustomResolution: -1 | |||||
m_Strength: 1 | |||||
m_Bias: 0.05 | |||||
m_NormalBias: 0.4 | |||||
m_NearPlane: 0.2 | |||||
m_Cookie: {fileID: 0} | |||||
m_DrawHalo: 0 | |||||
m_Flare: {fileID: 0} | |||||
m_RenderMode: 0 | |||||
m_CullingMask: | |||||
serializedVersion: 2 | |||||
m_Bits: 4294967295 | |||||
m_Lightmapping: 1 | |||||
m_LightShadowCasterMode: 0 | |||||
m_AreaSize: {x: 1, y: 1} | |||||
m_BounceIntensity: 1 | |||||
m_ColorTemperature: 6570 | |||||
m_UseColorTemperature: 0 | |||||
m_ShadowRadius: 0 | |||||
m_ShadowAngle: 0 | |||||
--- !u!4 &170076735 | |||||
Transform: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 170076733} | |||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} | |||||
m_LocalPosition: {x: 0, y: 3, z: 0} | |||||
m_LocalScale: {x: 1, y: 1, z: 1} | |||||
m_Children: [] | |||||
m_Father: {fileID: 0} | |||||
m_RootOrder: 1 | |||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} | |||||
--- !u!1 &534669902 | |||||
GameObject: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
serializedVersion: 6 | |||||
m_Component: | |||||
- component: {fileID: 534669905} | |||||
- component: {fileID: 534669904} | |||||
- component: {fileID: 534669903} | |||||
m_Layer: 0 | |||||
m_Name: Main Camera | |||||
m_TagString: MainCamera | |||||
m_Icon: {fileID: 0} | |||||
m_NavMeshLayer: 0 | |||||
m_StaticEditorFlags: 0 | |||||
m_IsActive: 1 | |||||
--- !u!81 &534669903 | |||||
AudioListener: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 534669902} | |||||
m_Enabled: 1 | |||||
--- !u!20 &534669904 | |||||
Camera: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 534669902} | |||||
m_Enabled: 1 | |||||
serializedVersion: 2 | |||||
m_ClearFlags: 1 | |||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} | |||||
m_projectionMatrixMode: 1 | |||||
m_SensorSize: {x: 36, y: 24} | |||||
m_LensShift: {x: 0, y: 0} | |||||
m_GateFitMode: 2 | |||||
m_FocalLength: 50 | |||||
m_NormalizedViewPortRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 1 | |||||
height: 1 | |||||
near clip plane: 0.3 | |||||
far clip plane: 1000 | |||||
field of view: 60 | |||||
orthographic: 0 | |||||
orthographic size: 5 | |||||
m_Depth: -1 | |||||
m_CullingMask: | |||||
serializedVersion: 2 | |||||
m_Bits: 4294967295 | |||||
m_RenderingPath: -1 | |||||
m_TargetTexture: {fileID: 0} | |||||
m_TargetDisplay: 0 | |||||
m_TargetEye: 3 | |||||
m_HDR: 1 | |||||
m_AllowMSAA: 1 | |||||
m_AllowDynamicResolution: 0 | |||||
m_ForceIntoRT: 0 | |||||
m_OcclusionCulling: 1 | |||||
m_StereoConvergence: 10 | |||||
m_StereoSeparation: 0.022 | |||||
--- !u!4 &534669905 | |||||
Transform: | |||||
m_ObjectHideFlags: 0 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 534669902} | |||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |||||
m_LocalPosition: {x: 0, y: 1, z: -10} | |||||
m_LocalScale: {x: 1, y: 1, z: 1} | |||||
m_Children: [] | |||||
m_Father: {fileID: 0} | |||||
m_RootOrder: 0 | |||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
@ -0,0 +1,103 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!21 &2100000 | |||||
Material: | |||||
serializedVersion: 6 | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_Name: LiberationSans SDF - Drop Shadow | |||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} | |||||
m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON | |||||
m_LightmapFlags: 5 | |||||
m_EnableInstancingVariants: 0 | |||||
m_DoubleSidedGI: 0 | |||||
m_CustomRenderQueue: -1 | |||||
stringTagMap: {} | |||||
disabledShaderPasses: [] | |||||
m_SavedProperties: | |||||
serializedVersion: 3 | |||||
m_TexEnvs: | |||||
- _BumpMap: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _Cube: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _FaceTex: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _MainTex: | |||||
m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _OutlineTex: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
m_Floats: | |||||
- _Ambient: 0.5 | |||||
- _Bevel: 0.5 | |||||
- _BevelClamp: 0 | |||||
- _BevelOffset: 0 | |||||
- _BevelRoundness: 0 | |||||
- _BevelWidth: 0 | |||||
- _BumpFace: 0 | |||||
- _BumpOutline: 0 | |||||
- _ColorMask: 15 | |||||
- _Diffuse: 0.5 | |||||
- _DiffusePower: 1 | |||||
- _FaceDilate: 0.1 | |||||
- _FaceUVSpeedX: 0 | |||||
- _FaceUVSpeedY: 0 | |||||
- _GlowInner: 0.05 | |||||
- _GlowOffset: 0 | |||||
- _GlowOuter: 0.05 | |||||
- _GlowPower: 0.75 | |||||
- _GradientScale: 10 | |||||
- _LightAngle: 3.1416 | |||||
- _MaskSoftnessX: 0 | |||||
- _MaskSoftnessY: 0 | |||||
- _OutlineSoftness: 0 | |||||
- _OutlineUVSpeedX: 0 | |||||
- _OutlineUVSpeedY: 0 | |||||
- _OutlineWidth: 0.1 | |||||
- _PerspectiveFilter: 0.875 | |||||
- _Reflectivity: 10 | |||||
- _ScaleRatioA: 0.9 | |||||
- _ScaleRatioB: 0.73125 | |||||
- _ScaleRatioC: 0.64125 | |||||
- _ScaleX: 1 | |||||
- _ScaleY: 1 | |||||
- _ShaderFlags: 0 | |||||
- _SpecularPower: 2 | |||||
- _Stencil: 0 | |||||
- _StencilComp: 8 | |||||
- _StencilOp: 0 | |||||
- _StencilReadMask: 255 | |||||
- _StencilWriteMask: 255 | |||||
- _TextureHeight: 1024 | |||||
- _TextureWidth: 1024 | |||||
- _UnderlayDilate: 0 | |||||
- _UnderlayOffsetX: 0.5 | |||||
- _UnderlayOffsetY: -0.5 | |||||
- _UnderlaySoftness: 0.05 | |||||
- _VertexOffsetX: 0 | |||||
- _VertexOffsetY: 0 | |||||
- _WeightBold: 0.75 | |||||
- _WeightNormal: 0 | |||||
m_Colors: | |||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} | |||||
- _Color: {r: 1, g: 1, b: 1, a: 1} | |||||
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} | |||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1} | |||||
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} | |||||
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} | |||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1} | |||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
@ -0,0 +1,101 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!21 &2100000 | |||||
Material: | |||||
serializedVersion: 6 | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_Name: LiberationSans SDF - Outline | |||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} | |||||
m_ShaderKeywords: OUTLINE_ON | |||||
m_LightmapFlags: 5 | |||||
m_EnableInstancingVariants: 0 | |||||
m_DoubleSidedGI: 0 | |||||
m_CustomRenderQueue: 3000 | |||||
stringTagMap: {} | |||||
disabledShaderPasses: [] | |||||
m_SavedProperties: | |||||
serializedVersion: 3 | |||||
m_TexEnvs: | |||||
- _BumpMap: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _Cube: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _FaceTex: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _MainTex: | |||||
m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
- _OutlineTex: | |||||
m_Texture: {fileID: 0} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
m_Floats: | |||||
- _Ambient: 0.5 | |||||
- _Bevel: 0.5 | |||||
- _BevelClamp: 0 | |||||
- _BevelOffset: 0 | |||||
- _BevelRoundness: 0 | |||||
- _BevelWidth: 0 | |||||
- _BumpFace: 0 | |||||
- _BumpOutline: 0 | |||||
- _ColorMask: 15 | |||||
- _Diffuse: 0.5 | |||||
- _FaceDilate: 0.1 | |||||
- _FaceUVSpeedX: 0 | |||||
- _FaceUVSpeedY: 0 | |||||
- _GlowInner: 0.05 | |||||
- _GlowOffset: 0 | |||||
- _GlowOuter: 0.05 | |||||
- _GlowPower: 0.75 | |||||
- _GradientScale: 10 | |||||
- _LightAngle: 3.1416 | |||||
- _MaskSoftnessX: 0 | |||||
- _MaskSoftnessY: 0 | |||||
- _OutlineSoftness: 0 | |||||
- _OutlineUVSpeedX: 0 | |||||
- _OutlineUVSpeedY: 0 | |||||
- _OutlineWidth: 0.1 | |||||
- _PerspectiveFilter: 0.875 | |||||
- _Reflectivity: 10 | |||||
- _ScaleRatioA: 0.9 | |||||
- _ScaleRatioB: 0.73125 | |||||
- _ScaleRatioC: 0.64125 | |||||
- _ScaleX: 1 | |||||
- _ScaleY: 1 | |||||
- _ShaderFlags: 0 | |||||
- _SpecularPower: 2 | |||||
- _Stencil: 0 | |||||
- _StencilComp: 8 | |||||
- _StencilOp: 0 | |||||
- _StencilReadMask: 255 | |||||
- _StencilWriteMask: 255 | |||||
- _TextureHeight: 1024 | |||||
- _TextureWidth: 1024 | |||||
- _UnderlayDilate: 0 | |||||
- _UnderlayOffsetX: 0 | |||||
- _UnderlayOffsetY: 0 | |||||
- _UnderlaySoftness: 0 | |||||
- _VertexOffsetX: 0 | |||||
- _VertexOffsetY: 0 | |||||
- _WeightBold: 0.75 | |||||
- _WeightNormal: 0 | |||||
m_Colors: | |||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} | |||||
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} | |||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1} | |||||
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} | |||||
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} | |||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} | |||||
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1} | |||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
@ -0,0 +1 @@ | |||||
)]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. |
@ -0,0 +1 @@ | |||||
([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇〉》」$⦆¥₩ # |
@ -0,0 +1,142 @@ | |||||
Shader "TextMeshPro/Bitmap Custom Atlas" { | |||||
Properties { | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_FaceTex ("Font Texture", 2D) = "white" {} | |||||
_FaceColor ("Text Color", Color) = (1,1,1,1) | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_Padding ("Padding", float) = 0 | |||||
_StencilComp("Stencil Comparison", Float) = 8 | |||||
_Stencil("Stencil ID", Float) = 0 | |||||
_StencilOp("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask("Stencil Read Mask", Float) = 255 | |||||
_ColorMask("Color Mask", Float) = 15 | |||||
} | |||||
SubShader{ | |||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } | |||||
Stencil | |||||
{ | |||||
Ref[_Stencil] | |||||
Comp[_StencilComp] | |||||
Pass[_StencilOp] | |||||
ReadMask[_StencilReadMask] | |||||
WriteMask[_StencilWriteMask] | |||||
} | |||||
Lighting Off | |||||
Cull [_CullMode] | |||||
ZTest [unity_GUIZTestMode] | |||||
ZWrite Off | |||||
Fog { Mode Off } | |||||
Blend SrcAlpha OneMinusSrcAlpha | |||||
ColorMask[_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
struct appdata_t { | |||||
float4 vertex : POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct v2f { | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
float4 mask : TEXCOORD2; | |||||
}; | |||||
uniform sampler2D _MainTex; | |||||
uniform sampler2D _FaceTex; | |||||
uniform float4 _FaceTex_ST; | |||||
uniform fixed4 _FaceColor; | |||||
uniform float _VertexOffsetX; | |||||
uniform float _VertexOffsetY; | |||||
uniform float4 _ClipRect; | |||||
uniform float _MaskSoftnessX; | |||||
uniform float _MaskSoftnessY; | |||||
float2 UnpackUV(float uv) | |||||
{ | |||||
float2 output; | |||||
output.x = floor(uv / 4096); | |||||
output.y = uv - 4096 * output.x; | |||||
return output * 0.001953125; | |||||
} | |||||
v2f vert (appdata_t v) | |||||
{ | |||||
float4 vert = v.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; | |||||
float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); | |||||
fixed4 faceColor = v.color; | |||||
faceColor *= _FaceColor; | |||||
v2f OUT; | |||||
OUT.vertex = vPosition; | |||||
OUT.color = faceColor; | |||||
OUT.texcoord0 = v.texcoord0; | |||||
OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); | |||||
// Clamp _ClipRect to 16bit. | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); | |||||
return OUT; | |||||
} | |||||
fixed4 frag (v2f IN) : SV_Target | |||||
{ | |||||
fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); | |||||
color *= m.x * m.y; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(color.a - 0.001); | |||||
#endif | |||||
return color; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" | |||||
} |
@ -0,0 +1,144 @@ | |||||
Shader "TextMeshPro/Mobile/Bitmap" { | |||||
Properties { | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_Color ("Text Color", Color) = (1,1,1,1) | |||||
_DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 | |||||
_VertexOffsetX("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY("Vertex OffsetY", float) = 0 | |||||
_MaskSoftnessX("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY("Mask SoftnessY", float) = 0 | |||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_StencilComp("Stencil Comparison", Float) = 8 | |||||
_Stencil("Stencil ID", Float) = 0 | |||||
_StencilOp("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask("Stencil Read Mask", Float) = 255 | |||||
_ColorMask("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } | |||||
Stencil | |||||
{ | |||||
Ref[_Stencil] | |||||
Comp[_StencilComp] | |||||
Pass[_StencilOp] | |||||
ReadMask[_StencilReadMask] | |||||
WriteMask[_StencilWriteMask] | |||||
} | |||||
Lighting Off | |||||
Cull Off | |||||
ZTest [unity_GUIZTestMode] | |||||
ZWrite Off | |||||
Fog { Mode Off } | |||||
Blend SrcAlpha OneMinusSrcAlpha | |||||
ColorMask[_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#pragma fragmentoption ARB_precision_hint_fastest | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
struct appdata_t { | |||||
float4 vertex : POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct v2f { | |||||
float4 vertex : POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float4 mask : TEXCOORD2; | |||||
}; | |||||
sampler2D _MainTex; | |||||
fixed4 _Color; | |||||
float _DiffusePower; | |||||
uniform float _VertexOffsetX; | |||||
uniform float _VertexOffsetY; | |||||
uniform float4 _ClipRect; | |||||
uniform float _MaskSoftnessX; | |||||
uniform float _MaskSoftnessY; | |||||
v2f vert (appdata_t v) | |||||
{ | |||||
v2f OUT; | |||||
float4 vert = v.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; | |||||
OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); | |||||
OUT.color = v.color; | |||||
OUT.color *= _Color; | |||||
OUT.color.rgb *= _DiffusePower; | |||||
OUT.texcoord0 = v.texcoord0; | |||||
float2 pixelSize = OUT.vertex.w; | |||||
//pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); | |||||
// Clamp _ClipRect to 16bit. | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); | |||||
return OUT; | |||||
} | |||||
fixed4 frag (v2f IN) : COLOR | |||||
{ | |||||
fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); | |||||
color *= m.x * m.y; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(color.a - 0.001); | |||||
#endif | |||||
return color; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
SubShader { | |||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } | |||||
Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } | |||||
Blend SrcAlpha OneMinusSrcAlpha | |||||
BindChannels { | |||||
Bind "Color", color | |||||
Bind "Vertex", vertex | |||||
Bind "TexCoord", texcoord0 | |||||
} | |||||
Pass { | |||||
SetTexture [_MainTex] { | |||||
constantColor [_Color] combine constant * primary, constant * texture | |||||
} | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" | |||||
} |
@ -0,0 +1,142 @@ | |||||
Shader "TextMeshPro/Bitmap" { | |||||
Properties { | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_FaceTex ("Font Texture", 2D) = "white" {} | |||||
_FaceColor ("Text Color", Color) = (1,1,1,1) | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_StencilComp("Stencil Comparison", Float) = 8 | |||||
_Stencil("Stencil ID", Float) = 0 | |||||
_StencilOp("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask("Stencil Read Mask", Float) = 255 | |||||
_ColorMask("Color Mask", Float) = 15 | |||||
} | |||||
SubShader{ | |||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } | |||||
Stencil | |||||
{ | |||||
Ref[_Stencil] | |||||
Comp[_StencilComp] | |||||
Pass[_StencilOp] | |||||
ReadMask[_StencilReadMask] | |||||
WriteMask[_StencilWriteMask] | |||||
} | |||||
Lighting Off | |||||
Cull [_CullMode] | |||||
ZTest [unity_GUIZTestMode] | |||||
ZWrite Off | |||||
Fog { Mode Off } | |||||
Blend SrcAlpha OneMinusSrcAlpha | |||||
ColorMask[_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
struct appdata_t { | |||||
float4 vertex : POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct v2f { | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
float4 mask : TEXCOORD2; | |||||
}; | |||||
uniform sampler2D _MainTex; | |||||
uniform sampler2D _FaceTex; | |||||
uniform float4 _FaceTex_ST; | |||||
uniform fixed4 _FaceColor; | |||||
uniform float _VertexOffsetX; | |||||
uniform float _VertexOffsetY; | |||||
uniform float4 _ClipRect; | |||||
uniform float _MaskSoftnessX; | |||||
uniform float _MaskSoftnessY; | |||||
float2 UnpackUV(float uv) | |||||
{ | |||||
float2 output; | |||||
output.x = floor(uv / 4096); | |||||
output.y = uv - 4096 * output.x; | |||||
return output * 0.001953125; | |||||
} | |||||
v2f vert (appdata_t v) | |||||
{ | |||||
float4 vert = v.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; | |||||
float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); | |||||
fixed4 faceColor = v.color; | |||||
faceColor *= _FaceColor; | |||||
v2f OUT; | |||||
OUT.vertex = vPosition; | |||||
OUT.color = faceColor; | |||||
OUT.texcoord0 = v.texcoord0; | |||||
OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); | |||||
// Clamp _ClipRect to 16bit. | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); | |||||
return OUT; | |||||
} | |||||
fixed4 frag (v2f IN) : SV_Target | |||||
{ | |||||
fixed4 color = tex2D(_MainTex, IN.texcoord0); | |||||
color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); | |||||
color *= m.x * m.y; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(color.a - 0.001); | |||||
#endif | |||||
return color; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" | |||||
} |
@ -0,0 +1,304 @@ | |||||
Shader "TextMeshPro/Distance Field Overlay" { | |||||
Properties { | |||||
_FaceTex ("Face Texture", 2D) = "white" {} | |||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 | |||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_FaceColor ("Face Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineTex ("Outline Texture", 2D) = "white" {} | |||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 | |||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_Bevel ("Bevel", Range(0,1)) = 0.5 | |||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 | |||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 | |||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 | |||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 | |||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 | |||||
_SpecularColor ("Specular", Color) = (1,1,1,1) | |||||
_SpecularPower ("Specular", Range(0,4)) = 2.0 | |||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 | |||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5 | |||||
_Ambient ("Ambient", Range(1,0)) = 0.5 | |||||
_BumpMap ("Normal map", 2D) = "bump" {} | |||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0 | |||||
_BumpFace ("Bump Face", Range(0,1)) = 0 | |||||
_ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) | |||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) | |||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } | |||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) | |||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) | |||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 | |||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 | |||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 | |||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 | |||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) | |||||
_GlowOffset ("Offset", Range(-1,1)) = 0 | |||||
_GlowInner ("Inner", Range(0,1)) = 0.05 | |||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 | |||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = 0.5 | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5.0 | |||||
_ScaleX ("Scale X", float) = 1.0 | |||||
_ScaleY ("Scale Y", float) = 1.0 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags | |||||
{ | |||||
"Queue"="Overlay" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull [_CullMode] | |||||
ZWrite Off | |||||
Lighting Off | |||||
Fog { Mode Off } | |||||
ZTest Always | |||||
Blend One OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma target 3.0 | |||||
#pragma vertex VertShader | |||||
#pragma fragment PixShader | |||||
#pragma shader_feature __ BEVEL_ON | |||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER | |||||
#pragma shader_feature __ GLOW_ON | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#include "TMPro_Properties.cginc" | |||||
#include "TMPro.cginc" | |||||
struct vertex_t { | |||||
float4 position : POSITION; | |||||
float3 normal : NORMAL; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct pixel_t { | |||||
float4 position : SV_POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 atlas : TEXCOORD0; // Atlas | |||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight | |||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) | |||||
float3 viewDir : TEXCOORD3; | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias | |||||
fixed4 underlayColor : COLOR1; | |||||
#endif | |||||
float4 textures : TEXCOORD5; | |||||
}; | |||||
// Used by Unity internally to handle Texture Tiling and Offset. | |||||
float4 _FaceTex_ST; | |||||
float4 _OutlineTex_ST; | |||||
pixel_t VertShader(vertex_t input) | |||||
{ | |||||
float bold = step(input.texcoord1.y, 0); | |||||
float4 vert = input.position; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; | |||||
if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; | |||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; | |||||
float bias =(.5 - weight) + (.5 / scale); | |||||
float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); | |||||
#if GLOW_ON | |||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); | |||||
#endif | |||||
alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4 underlayColor = _UnderlayColor; | |||||
underlayColor.rgb *= underlayColor.a; | |||||
float bScale = scale; | |||||
bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); | |||||
float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); | |||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; | |||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; | |||||
float2 bOffset = float2(x, y); | |||||
#endif | |||||
// Generate UV for the Masking Texture | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); | |||||
// Support for texture tiling and offset | |||||
float2 textureUV = UnpackUV(input.texcoord1.x); | |||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); | |||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); | |||||
pixel_t output = { | |||||
vPosition, | |||||
input.color, | |||||
input.texcoord0, | |||||
float4(alphaClip, scale, bias, weight), | |||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), | |||||
mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4(input.texcoord0 + bOffset, bScale, bBias), | |||||
underlayColor, | |||||
#endif | |||||
float4(faceUV, outlineUV), | |||||
}; | |||||
return output; | |||||
} | |||||
fixed4 PixShader(pixel_t input) : SV_Target | |||||
{ | |||||
float c = tex2D(_MainTex, input.atlas).a; | |||||
#ifndef UNDERLAY_ON | |||||
clip(c - input.param.x); | |||||
#endif | |||||
float scale = input.param.y; | |||||
float bias = input.param.z; | |||||
float weight = input.param.w; | |||||
float sd = (bias - c) * scale; | |||||
float outline = (_OutlineWidth * _ScaleRatioA) * scale; | |||||
float softness = (_OutlineSoftness * _ScaleRatioA) * scale; | |||||
half4 faceColor = _FaceColor; | |||||
half4 outlineColor = _OutlineColor; | |||||
faceColor.rgb *= input.color.rgb; | |||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); | |||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); | |||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); | |||||
#if BEVEL_ON | |||||
float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); | |||||
float3 n = GetSurfaceNormal(input.atlas, weight, dxy); | |||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; | |||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); | |||||
n = normalize(n- bump); | |||||
float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); | |||||
float3 col = GetSpecular(n, light); | |||||
faceColor.rgb += col*faceColor.a; | |||||
faceColor.rgb *= 1-(dot(n, light)*_Diffuse); | |||||
faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); | |||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); | |||||
faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; | |||||
#endif | |||||
#if UNDERLAY_ON | |||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; | |||||
faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); | |||||
#endif | |||||
#if UNDERLAY_INNER | |||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; | |||||
faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); | |||||
#endif | |||||
#if GLOW_ON | |||||
float4 glowColor = GetGlowColor(sd, scale); | |||||
faceColor.rgb += glowColor.rgb * glowColor.a; | |||||
#endif | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); | |||||
faceColor *= m.x * m.y; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(faceColor.a - 0.001); | |||||
#endif | |||||
return faceColor * input.color.a; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
Fallback "TextMeshPro/Mobile/Distance Field" | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,245 @@ | |||||
// Simplified SDF shader: | |||||
// - No Shading Option (bevel / bump / env map) | |||||
// - No Glow Option | |||||
// - Softness is applied on both side of the outline | |||||
Shader "TextMeshPro/Mobile/Distance Field - Masking" { | |||||
Properties { | |||||
_FaceColor ("Face Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) | |||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 | |||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 | |||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 | |||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = .5 | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5 | |||||
_ScaleX ("Scale X", float) = 1 | |||||
_ScaleY ("Scale Y", float) = 1 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_MaskTex ("Mask Texture", 2D) = "white" {} | |||||
_MaskInverse ("Inverse", float) = 0 | |||||
_MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) | |||||
_MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 | |||||
_MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags | |||||
{ | |||||
"Queue"="Transparent" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull [_CullMode] | |||||
ZWrite Off | |||||
Lighting Off | |||||
Fog { Mode Off } | |||||
ZTest [unity_GUIZTestMode] | |||||
Blend One OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex VertShader | |||||
#pragma fragment PixShader | |||||
#pragma shader_feature __ OUTLINE_ON | |||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#include "TMPro_Properties.cginc" | |||||
struct vertex_t { | |||||
float4 vertex : POSITION; | |||||
float3 normal : NORMAL; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct pixel_t { | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 faceColor : COLOR; | |||||
fixed4 outlineColor : COLOR1; | |||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV | |||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) | |||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved | |||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) | |||||
#endif | |||||
}; | |||||
float _MaskWipeControl; | |||||
float _MaskEdgeSoftness; | |||||
fixed4 _MaskEdgeColor; | |||||
bool _MaskInverse; | |||||
pixel_t VertShader(vertex_t input) | |||||
{ | |||||
float bold = step(input.texcoord1.y, 0); | |||||
float4 vert = input.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; | |||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; | |||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; | |||||
float layerScale = scale; | |||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); | |||||
float bias = (0.5 - weight) * scale - 0.5; | |||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; | |||||
float opacity = input.color.a; | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
opacity = 1.0; | |||||
#endif | |||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; | |||||
faceColor.rgb *= faceColor.a; | |||||
fixed4 outlineColor = _OutlineColor; | |||||
outlineColor.a *= opacity; | |||||
outlineColor.rgb *= outlineColor.a; | |||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); | |||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); | |||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; | |||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; | |||||
float2 layerOffset = float2(x, y); | |||||
#endif | |||||
// Generate UV for the Masking Texture | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); | |||||
// Structure for pixel shader | |||||
pixel_t output = { | |||||
vPosition, | |||||
faceColor, | |||||
outlineColor, | |||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), | |||||
half4(scale, bias - outline, bias + outline, bias), | |||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), | |||||
half2(layerScale, layerBias), | |||||
#endif | |||||
}; | |||||
return output; | |||||
} | |||||
// PIXEL SHADER | |||||
fixed4 PixShader(pixel_t input) : SV_Target | |||||
{ | |||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; | |||||
half4 c = input.faceColor * saturate(d - input.param.w); | |||||
#ifdef OUTLINE_ON | |||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); | |||||
c *= saturate(d - input.param.y); | |||||
#endif | |||||
#if UNDERLAY_ON | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); | |||||
#endif | |||||
#if UNDERLAY_INNER | |||||
half sd = saturate(d - input.param.z); | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); | |||||
#endif | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); | |||||
c *= m.x * m.y; | |||||
#endif | |||||
float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); | |||||
float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; | |||||
a = saturate(t / _MaskEdgeSoftness); | |||||
c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); | |||||
c *= a; | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
c *= input.texcoord1.z; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(c.a - 0.001); | |||||
#endif | |||||
return c; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,229 @@ | |||||
// Simplified SDF shader: | |||||
// - No Shading Option (bevel / bump / env map) | |||||
// - No Glow Option | |||||
// - Softness is applied on both side of the outline | |||||
Shader "TextMeshPro/Mobile/Distance Field Overlay" { | |||||
Properties { | |||||
_FaceColor ("Face Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) | |||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 | |||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 | |||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 | |||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = .5 | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5 | |||||
_ScaleX ("Scale X", float) = 1 | |||||
_ScaleY ("Scale Y", float) = 1 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags | |||||
{ | |||||
"Queue"="Overlay" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull [_CullMode] | |||||
ZWrite Off | |||||
Lighting Off | |||||
Fog { Mode Off } | |||||
ZTest Always | |||||
Blend One OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex VertShader | |||||
#pragma fragment PixShader | |||||
#pragma shader_feature __ OUTLINE_ON | |||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#include "TMPro_Properties.cginc" | |||||
struct vertex_t { | |||||
float4 vertex : POSITION; | |||||
float3 normal : NORMAL; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct pixel_t { | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 faceColor : COLOR; | |||||
fixed4 outlineColor : COLOR1; | |||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV | |||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) | |||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved | |||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) | |||||
#endif | |||||
}; | |||||
pixel_t VertShader(vertex_t input) | |||||
{ | |||||
float bold = step(input.texcoord1.y, 0); | |||||
float4 vert = input.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; | |||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; | |||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; | |||||
float layerScale = scale; | |||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); | |||||
float bias = (0.5 - weight) * scale - 0.5; | |||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; | |||||
float opacity = input.color.a; | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
opacity = 1.0; | |||||
#endif | |||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; | |||||
faceColor.rgb *= faceColor.a; | |||||
fixed4 outlineColor = _OutlineColor; | |||||
outlineColor.a *= opacity; | |||||
outlineColor.rgb *= outlineColor.a; | |||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); | |||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); | |||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; | |||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; | |||||
float2 layerOffset = float2(x, y); | |||||
#endif | |||||
// Generate UV for the Masking Texture | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); | |||||
// Structure for pixel shader | |||||
pixel_t output = { | |||||
vPosition, | |||||
faceColor, | |||||
outlineColor, | |||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), | |||||
half4(scale, bias - outline, bias + outline, bias), | |||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), | |||||
half2(layerScale, layerBias), | |||||
#endif | |||||
}; | |||||
return output; | |||||
} | |||||
// PIXEL SHADER | |||||
fixed4 PixShader(pixel_t input) : SV_Target | |||||
{ | |||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; | |||||
half4 c = input.faceColor * saturate(d - input.param.w); | |||||
#ifdef OUTLINE_ON | |||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); | |||||
c *= saturate(d - input.param.y); | |||||
#endif | |||||
#if UNDERLAY_ON | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); | |||||
#endif | |||||
#if UNDERLAY_INNER | |||||
half sd = saturate(d - input.param.z); | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); | |||||
#endif | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); | |||||
c *= m.x * m.y; | |||||
#endif | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
c *= input.texcoord1.z; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(c.a - 0.001); | |||||
#endif | |||||
return c; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,229 @@ | |||||
// Simplified SDF shader: | |||||
// - No Shading Option (bevel / bump / env map) | |||||
// - No Glow Option | |||||
// - Softness is applied on both side of the outline | |||||
Shader "TextMeshPro/Mobile/Distance Field" { | |||||
Properties { | |||||
_FaceColor ("Face Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) | |||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 | |||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 | |||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 | |||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = .5 | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5 | |||||
_ScaleX ("Scale X", float) = 1 | |||||
_ScaleY ("Scale Y", float) = 1 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags | |||||
{ | |||||
"Queue"="Transparent" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull [_CullMode] | |||||
ZWrite Off | |||||
Lighting Off | |||||
Fog { Mode Off } | |||||
ZTest [unity_GUIZTestMode] | |||||
Blend One OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma vertex VertShader | |||||
#pragma fragment PixShader | |||||
#pragma shader_feature __ OUTLINE_ON | |||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#include "TMPro_Properties.cginc" | |||||
struct vertex_t { | |||||
float4 vertex : POSITION; | |||||
float3 normal : NORMAL; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct pixel_t { | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 faceColor : COLOR; | |||||
fixed4 outlineColor : COLOR1; | |||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV | |||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) | |||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved | |||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) | |||||
#endif | |||||
}; | |||||
pixel_t VertShader(vertex_t input) | |||||
{ | |||||
float bold = step(input.texcoord1.y, 0); | |||||
float4 vert = input.vertex; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; | |||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; | |||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; | |||||
float layerScale = scale; | |||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); | |||||
float bias = (0.5 - weight) * scale - 0.5; | |||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; | |||||
float opacity = input.color.a; | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
opacity = 1.0; | |||||
#endif | |||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; | |||||
faceColor.rgb *= faceColor.a; | |||||
fixed4 outlineColor = _OutlineColor; | |||||
outlineColor.a *= opacity; | |||||
outlineColor.rgb *= outlineColor.a; | |||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); | |||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); | |||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; | |||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; | |||||
float2 layerOffset = float2(x, y); | |||||
#endif | |||||
// Generate UV for the Masking Texture | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); | |||||
// Structure for pixel shader | |||||
pixel_t output = { | |||||
vPosition, | |||||
faceColor, | |||||
outlineColor, | |||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), | |||||
half4(scale, bias - outline, bias + outline, bias), | |||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), | |||||
half2(layerScale, layerBias), | |||||
#endif | |||||
}; | |||||
return output; | |||||
} | |||||
// PIXEL SHADER | |||||
fixed4 PixShader(pixel_t input) : SV_Target | |||||
{ | |||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; | |||||
half4 c = input.faceColor * saturate(d - input.param.w); | |||||
#ifdef OUTLINE_ON | |||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); | |||||
c *= saturate(d - input.param.y); | |||||
#endif | |||||
#if UNDERLAY_ON | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); | |||||
#endif | |||||
#if UNDERLAY_INNER | |||||
half sd = saturate(d - input.param.z); | |||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; | |||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); | |||||
#endif | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); | |||||
c *= m.x * m.y; | |||||
#endif | |||||
#if (UNDERLAY_ON | UNDERLAY_INNER) | |||||
c *= input.texcoord1.z; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(c.a - 0.001); | |||||
#endif | |||||
return c; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,136 @@ | |||||
// Simplified version of the SDF Surface shader : | |||||
// - No support for Bevel, Bump or envmap | |||||
// - Diffuse only lighting | |||||
// - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. | |||||
Shader "TextMeshPro/Mobile/Distance Field (Surface)" { | |||||
Properties { | |||||
_FaceTex ("Fill Texture", 2D) = "white" {} | |||||
_FaceColor ("Fill Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineTex ("Outline Texture", 2D) = "white" {} | |||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) | |||||
_GlowOffset ("Offset", Range(-1,1)) = 0 | |||||
_GlowInner ("Inner", Range(0,1)) = 0.05 | |||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 | |||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = 0.5 | |||||
// Should not be directly exposed to the user | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5.0 | |||||
_ScaleX ("Scale X", float) = 1.0 | |||||
_ScaleY ("Scale Y", float) = 1.0 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0) | |||||
//_MaskSoftness ("Mask Softness", float) = 0 | |||||
} | |||||
SubShader { | |||||
Tags { | |||||
"Queue"="Transparent" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
LOD 300 | |||||
Cull [_CullMode] | |||||
CGPROGRAM | |||||
#pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap | |||||
#pragma target 3.0 | |||||
#pragma shader_feature __ GLOW_ON | |||||
#include "TMPro_Properties.cginc" | |||||
#include "TMPro.cginc" | |||||
half _FaceShininess; | |||||
half _OutlineShininess; | |||||
struct Input | |||||
{ | |||||
fixed4 color : COLOR; | |||||
float2 uv_MainTex; | |||||
float2 uv2_FaceTex; | |||||
float2 uv2_OutlineTex; | |||||
float2 param; // Weight, Scale | |||||
float3 viewDirEnv; | |||||
}; | |||||
#include "TMPro_Surface.cginc" | |||||
ENDCG | |||||
// Pass to render object as a shadow caster | |||||
Pass | |||||
{ | |||||
Name "Caster" | |||||
Tags { "LightMode" = "ShadowCaster" } | |||||
Offset 1, 1 | |||||
Fog {Mode Off} | |||||
ZWrite On ZTest LEqual Cull Off | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#pragma multi_compile_shadowcaster | |||||
#include "UnityCG.cginc" | |||||
struct v2f { | |||||
V2F_SHADOW_CASTER; | |||||
float2 uv : TEXCOORD1; | |||||
float2 uv2 : TEXCOORD3; | |||||
float alphaClip : TEXCOORD2; | |||||
}; | |||||
uniform float4 _MainTex_ST; | |||||
uniform float4 _OutlineTex_ST; | |||||
float _OutlineWidth; | |||||
float _FaceDilate; | |||||
float _ScaleRatioA; | |||||
v2f vert( appdata_base v ) | |||||
{ | |||||
v2f o; | |||||
TRANSFER_SHADOW_CASTER(o) | |||||
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); | |||||
o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); | |||||
o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; | |||||
return o; | |||||
} | |||||
uniform sampler2D _MainTex; | |||||
float4 frag(v2f i) : COLOR | |||||
{ | |||||
fixed4 texcol = tex2D(_MainTex, i.uv).a; | |||||
clip(texcol.a - i.alphaClip); | |||||
SHADOW_CASTER_FRAGMENT(i) | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,155 @@ | |||||
Shader "TextMeshPro/Distance Field (Surface)" { | |||||
Properties { | |||||
_FaceTex ("Fill Texture", 2D) = "white" {} | |||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 | |||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_FaceColor ("Fill Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineTex ("Outline Texture", 2D) = "white" {} | |||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 | |||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 | |||||
_Bevel ("Bevel", Range(0,1)) = 0.5 | |||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 | |||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 | |||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 | |||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 | |||||
_BumpMap ("Normalmap", 2D) = "bump" {} | |||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0.5 | |||||
_BumpFace ("Bump Face", Range(0,1)) = 0.5 | |||||
_ReflectFaceColor ("Face Color", Color) = (0,0,0,1) | |||||
_ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } | |||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) | |||||
_SpecColor ("Specular Color", Color) = (0,0,0,1) | |||||
_FaceShininess ("Face Shininess", Range(0,1)) = 0 | |||||
_OutlineShininess ("Outline Shininess", Range(0,1)) = 0 | |||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) | |||||
_GlowOffset ("Offset", Range(-1,1)) = 0 | |||||
_GlowInner ("Inner", Range(0,1)) = 0.05 | |||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 | |||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = 0.5 | |||||
// Should not be directly exposed to the user | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5.0 | |||||
_ScaleX ("Scale X", float) = 1.0 | |||||
_ScaleY ("Scale Y", float) = 1.0 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0) | |||||
//_MaskSoftness ("Mask Softness", float) = 0 | |||||
} | |||||
SubShader { | |||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } | |||||
LOD 300 | |||||
Cull [_CullMode] | |||||
CGPROGRAM | |||||
#pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap | |||||
#pragma target 3.0 | |||||
#pragma shader_feature __ GLOW_ON | |||||
#pragma glsl | |||||
#include "TMPro_Properties.cginc" | |||||
#include "TMPro.cginc" | |||||
half _FaceShininess; | |||||
half _OutlineShininess; | |||||
struct Input | |||||
{ | |||||
fixed4 color : COLOR; | |||||
float2 uv_MainTex; | |||||
float2 uv2_FaceTex; | |||||
float2 uv2_OutlineTex; | |||||
float2 param; // Weight, Scale | |||||
float3 viewDirEnv; | |||||
}; | |||||
#define BEVEL_ON 1 | |||||
#include "TMPro_Surface.cginc" | |||||
ENDCG | |||||
// Pass to render object as a shadow caster | |||||
Pass | |||||
{ | |||||
Name "Caster" | |||||
Tags { "LightMode" = "ShadowCaster" } | |||||
Offset 1, 1 | |||||
Fog {Mode Off} | |||||
ZWrite On | |||||
ZTest LEqual | |||||
Cull Off | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#pragma multi_compile_shadowcaster | |||||
#include "UnityCG.cginc" | |||||
struct v2f { | |||||
V2F_SHADOW_CASTER; | |||||
float2 uv : TEXCOORD1; | |||||
float2 uv2 : TEXCOORD3; | |||||
float alphaClip : TEXCOORD2; | |||||
}; | |||||
uniform float4 _MainTex_ST; | |||||
uniform float4 _OutlineTex_ST; | |||||
float _OutlineWidth; | |||||
float _FaceDilate; | |||||
float _ScaleRatioA; | |||||
v2f vert( appdata_base v ) | |||||
{ | |||||
v2f o; | |||||
TRANSFER_SHADOW_CASTER(o) | |||||
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); | |||||
o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); | |||||
o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; | |||||
return o; | |||||
} | |||||
uniform sampler2D _MainTex; | |||||
float4 frag(v2f i) : COLOR | |||||
{ | |||||
fixed4 texcol = tex2D(_MainTex, i.uv).a; | |||||
clip(texcol.a - i.alphaClip); | |||||
SHADOW_CASTER_FRAGMENT(i) | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} | |||||
@ -0,0 +1,305 @@ | |||||
Shader "TextMeshPro/Distance Field" { | |||||
Properties { | |||||
_FaceTex ("Face Texture", 2D) = "white" {} | |||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 | |||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_FaceColor ("Face Color", Color) = (1,1,1,1) | |||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 | |||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |||||
_OutlineTex ("Outline Texture", 2D) = "white" {} | |||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 | |||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 | |||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 | |||||
_OutlineSoftness ("Outline Softness", Range(-1,1)) = 0 | |||||
_Bevel ("Bevel", Range(0,1)) = 0.5 | |||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 | |||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 | |||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 | |||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 | |||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 | |||||
_SpecularColor ("Specular", Color) = (1,1,1,1) | |||||
_SpecularPower ("Specular", Range(0,4)) = 2.0 | |||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 | |||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5 | |||||
_Ambient ("Ambient", Range(1,0)) = 0.5 | |||||
_BumpMap ("Normal map", 2D) = "bump" {} | |||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0 | |||||
_BumpFace ("Bump Face", Range(0,1)) = 0 | |||||
_ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) | |||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) | |||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } | |||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) | |||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) | |||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 | |||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 | |||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 | |||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 | |||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) | |||||
_GlowOffset ("Offset", Range(-1,1)) = 0 | |||||
_GlowInner ("Inner", Range(0,1)) = 0.05 | |||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 | |||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 | |||||
_WeightNormal ("Weight Normal", float) = 0 | |||||
_WeightBold ("Weight Bold", float) = 0.5 | |||||
_ShaderFlags ("Flags", float) = 0 | |||||
_ScaleRatioA ("Scale RatioA", float) = 1 | |||||
_ScaleRatioB ("Scale RatioB", float) = 1 | |||||
_ScaleRatioC ("Scale RatioC", float) = 1 | |||||
_MainTex ("Font Atlas", 2D) = "white" {} | |||||
_TextureWidth ("Texture Width", float) = 512 | |||||
_TextureHeight ("Texture Height", float) = 512 | |||||
_GradientScale ("Gradient Scale", float) = 5.0 | |||||
_ScaleX ("Scale X", float) = 1.0 | |||||
_ScaleY ("Scale Y", float) = 1.0 | |||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 | |||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 | |||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 | |||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 | |||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
} | |||||
SubShader { | |||||
Tags | |||||
{ | |||||
"Queue"="Transparent" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull [_CullMode] | |||||
ZWrite Off | |||||
Lighting Off | |||||
Fog { Mode Off } | |||||
ZTest [unity_GUIZTestMode] | |||||
Blend One OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass { | |||||
CGPROGRAM | |||||
#pragma target 3.0 | |||||
#pragma vertex VertShader | |||||
#pragma fragment PixShader | |||||
#pragma shader_feature __ BEVEL_ON | |||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER | |||||
#pragma shader_feature __ GLOW_ON | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#include "TMPro_Properties.cginc" | |||||
#include "TMPro.cginc" | |||||
struct vertex_t { | |||||
float4 position : POSITION; | |||||
float3 normal : NORMAL; | |||||
fixed4 color : COLOR; | |||||
float2 texcoord0 : TEXCOORD0; | |||||
float2 texcoord1 : TEXCOORD1; | |||||
}; | |||||
struct pixel_t { | |||||
float4 position : SV_POSITION; | |||||
fixed4 color : COLOR; | |||||
float2 atlas : TEXCOORD0; // Atlas | |||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight | |||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) | |||||
float3 viewDir : TEXCOORD3; | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias | |||||
fixed4 underlayColor : COLOR1; | |||||
#endif | |||||
float4 textures : TEXCOORD5; | |||||
}; | |||||
// Used by Unity internally to handle Texture Tiling and Offset. | |||||
float4 _FaceTex_ST; | |||||
float4 _OutlineTex_ST; | |||||
pixel_t VertShader(vertex_t input) | |||||
{ | |||||
float bold = step(input.texcoord1.y, 0); | |||||
float4 vert = input.position; | |||||
vert.x += _VertexOffsetX; | |||||
vert.y += _VertexOffsetY; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; | |||||
if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; | |||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; | |||||
float bias =(.5 - weight) + (.5 / scale); | |||||
float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); | |||||
#if GLOW_ON | |||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); | |||||
#endif | |||||
alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4 underlayColor = _UnderlayColor; | |||||
underlayColor.rgb *= underlayColor.a; | |||||
float bScale = scale; | |||||
bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); | |||||
float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); | |||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; | |||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; | |||||
float2 bOffset = float2(x, y); | |||||
#endif | |||||
// Generate UV for the Masking Texture | |||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); | |||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); | |||||
// Support for texture tiling and offset | |||||
float2 textureUV = UnpackUV(input.texcoord1.x); | |||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); | |||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); | |||||
pixel_t output = { | |||||
vPosition, | |||||
input.color, | |||||
input.texcoord0, | |||||
float4(alphaClip, scale, bias, weight), | |||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), | |||||
mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), | |||||
#if (UNDERLAY_ON || UNDERLAY_INNER) | |||||
float4(input.texcoord0 + bOffset, bScale, bBias), | |||||
underlayColor, | |||||
#endif | |||||
float4(faceUV, outlineUV), | |||||
}; | |||||
return output; | |||||
} | |||||
fixed4 PixShader(pixel_t input) : SV_Target | |||||
{ | |||||
float c = tex2D(_MainTex, input.atlas).a; | |||||
#ifndef UNDERLAY_ON | |||||
clip(c - input.param.x); | |||||
#endif | |||||
float scale = input.param.y; | |||||
float bias = input.param.z; | |||||
float weight = input.param.w; | |||||
float sd = (bias - c) * scale; | |||||
float outline = (_OutlineWidth * _ScaleRatioA) * scale; | |||||
float softness = (_OutlineSoftness * _ScaleRatioA) * scale; | |||||
half4 faceColor = _FaceColor; | |||||
half4 outlineColor = _OutlineColor; | |||||
faceColor.rgb *= input.color.rgb; | |||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); | |||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); | |||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); | |||||
#if BEVEL_ON | |||||
float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); | |||||
float3 n = GetSurfaceNormal(input.atlas, weight, dxy); | |||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; | |||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); | |||||
n = normalize(n- bump); | |||||
float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); | |||||
float3 col = GetSpecular(n, light); | |||||
faceColor.rgb += col*faceColor.a; | |||||
faceColor.rgb *= 1-(dot(n, light)*_Diffuse); | |||||
faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); | |||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); | |||||
faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; | |||||
#endif | |||||
#if UNDERLAY_ON | |||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; | |||||
faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); | |||||
#endif | |||||
#if UNDERLAY_INNER | |||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; | |||||
faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); | |||||
#endif | |||||
#if GLOW_ON | |||||
float4 glowColor = GetGlowColor(sd, scale); | |||||
faceColor.rgb += glowColor.rgb * glowColor.a; | |||||
#endif | |||||
// Alternative implementation to UnityGet2DClipping with support for softness. | |||||
#if UNITY_UI_CLIP_RECT | |||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); | |||||
faceColor *= m.x * m.y; | |||||
#endif | |||||
#if UNITY_UI_ALPHACLIP | |||||
clip(faceColor.a - 0.001); | |||||
#endif | |||||
return faceColor * input.color.a; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
Fallback "TextMeshPro/Mobile/Distance Field" | |||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" | |||||
} |
@ -0,0 +1,113 @@ | |||||
Shader "TextMeshPro/Sprite" | |||||
{ | |||||
Properties | |||||
{ | |||||
_MainTex ("Sprite Texture", 2D) = "white" {} | |||||
_Color ("Tint", Color) = (1,1,1,1) | |||||
_StencilComp ("Stencil Comparison", Float) = 8 | |||||
_Stencil ("Stencil ID", Float) = 0 | |||||
_StencilOp ("Stencil Operation", Float) = 0 | |||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 | |||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 | |||||
_ColorMask ("Color Mask", Float) = 15 | |||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) | |||||
[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 | |||||
} | |||||
SubShader | |||||
{ | |||||
Tags | |||||
{ | |||||
"Queue"="Transparent" | |||||
"IgnoreProjector"="True" | |||||
"RenderType"="Transparent" | |||||
"PreviewType"="Plane" | |||||
"CanUseSpriteAtlas"="True" | |||||
} | |||||
Stencil | |||||
{ | |||||
Ref [_Stencil] | |||||
Comp [_StencilComp] | |||||
Pass [_StencilOp] | |||||
ReadMask [_StencilReadMask] | |||||
WriteMask [_StencilWriteMask] | |||||
} | |||||
Cull Off | |||||
Lighting Off | |||||
ZWrite Off | |||||
ZTest [unity_GUIZTestMode] | |||||
Blend SrcAlpha OneMinusSrcAlpha | |||||
ColorMask [_ColorMask] | |||||
Pass | |||||
{ | |||||
CGPROGRAM | |||||
#pragma vertex vert | |||||
#pragma fragment frag | |||||
#include "UnityCG.cginc" | |||||
#include "UnityUI.cginc" | |||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT | |||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP | |||||
struct appdata_t | |||||
{ | |||||
float4 vertex : POSITION; | |||||
float4 color : COLOR; | |||||
float2 texcoord : TEXCOORD0; | |||||
}; | |||||
struct v2f | |||||
{ | |||||
float4 vertex : SV_POSITION; | |||||
fixed4 color : COLOR; | |||||
half2 texcoord : TEXCOORD0; | |||||
float4 worldPosition : TEXCOORD1; | |||||
}; | |||||
fixed4 _Color; | |||||
fixed4 _TextureSampleAdd; | |||||
float4 _ClipRect; | |||||
v2f vert(appdata_t IN) | |||||
{ | |||||
v2f OUT; | |||||
OUT.worldPosition = IN.vertex; | |||||
OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); | |||||
OUT.texcoord = IN.texcoord; | |||||
#ifdef UNITY_HALF_TEXEL_OFFSET | |||||
OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); | |||||
#endif | |||||
OUT.color = IN.color * _Color; | |||||
return OUT; | |||||
} | |||||
sampler2D _MainTex; | |||||
fixed4 frag(v2f IN) : SV_Target | |||||
{ | |||||
half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; | |||||
#if UNITY_UI_CLIP_RECT | |||||
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); | |||||
#endif | |||||
#ifdef UNITY_UI_ALPHACLIP | |||||
clip (color.a - 0.001); | |||||
#endif | |||||
return color; | |||||
} | |||||
ENDCG | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,84 @@ | |||||
float2 UnpackUV(float uv) | |||||
{ | |||||
float2 output; | |||||
output.x = floor(uv / 4096); | |||||
output.y = uv - 4096 * output.x; | |||||
return output * 0.001953125; | |||||
} | |||||
fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) | |||||
{ | |||||
half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); | |||||
half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); | |||||
faceColor.rgb *= faceColor.a; | |||||
outlineColor.rgb *= outlineColor.a; | |||||
faceColor = lerp(faceColor, outlineColor, outlineAlpha); | |||||
faceColor *= faceAlpha; | |||||
return faceColor; | |||||
} | |||||
float3 GetSurfaceNormal(float4 h, float bias) | |||||
{ | |||||
bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); | |||||
h += bias+_BevelOffset; | |||||
float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); | |||||
// Track outline | |||||
h -= .5; | |||||
h /= bevelWidth; | |||||
h = saturate(h+.5); | |||||
if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); | |||||
h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); | |||||
h = min(h, 1.0-_BevelClamp); | |||||
h *= _Bevel * bevelWidth * _GradientScale * -2.0; | |||||
float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); | |||||
float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); | |||||
return cross(va, vb); | |||||
} | |||||
float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) | |||||
{ | |||||
// Read "height field" | |||||
float4 h = {tex2D(_MainTex, uv - delta.xz).a, | |||||
tex2D(_MainTex, uv + delta.xz).a, | |||||
tex2D(_MainTex, uv - delta.zy).a, | |||||
tex2D(_MainTex, uv + delta.zy).a}; | |||||
return GetSurfaceNormal(h, bias); | |||||
} | |||||
float3 GetSpecular(float3 n, float3 l) | |||||
{ | |||||
float spec = pow(max(0.0, dot(n, l)), _Reflectivity); | |||||
return _SpecularColor.rgb * spec * _SpecularPower; | |||||
} | |||||
float4 GetGlowColor(float d, float scale) | |||||
{ | |||||
float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; | |||||
float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; | |||||
glow = saturate(abs(glow/(1.0 + t))); | |||||
glow = 1.0-pow(glow, _GlowPower); | |||||
glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel | |||||
return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); | |||||
} | |||||
float4 BlendARGB(float4 overlying, float4 underlying) | |||||
{ | |||||
overlying.rgb *= overlying.a; | |||||
underlying.rgb *= underlying.a; | |||||
float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); | |||||
float alpha = underlying.a + (1-underlying.a)*overlying.a; | |||||
return float4(blended, alpha); | |||||
} | |||||
@ -0,0 +1,84 @@ | |||||
// UI Editable properties | |||||
uniform sampler2D _FaceTex; // Alpha : Signed Distance | |||||
uniform float _FaceUVSpeedX; | |||||
uniform float _FaceUVSpeedY; | |||||
uniform fixed4 _FaceColor; // RGBA : Color + Opacity | |||||
uniform float _FaceDilate; // v[ 0, 1] | |||||
uniform float _OutlineSoftness; // v[ 0, 1] | |||||
uniform sampler2D _OutlineTex; // RGBA : Color + Opacity | |||||
uniform float _OutlineUVSpeedX; | |||||
uniform float _OutlineUVSpeedY; | |||||
uniform fixed4 _OutlineColor; // RGBA : Color + Opacity | |||||
uniform float _OutlineWidth; // v[ 0, 1] | |||||
uniform float _Bevel; // v[ 0, 1] | |||||
uniform float _BevelOffset; // v[-1, 1] | |||||
uniform float _BevelWidth; // v[-1, 1] | |||||
uniform float _BevelClamp; // v[ 0, 1] | |||||
uniform float _BevelRoundness; // v[ 0, 1] | |||||
uniform sampler2D _BumpMap; // Normal map | |||||
uniform float _BumpOutline; // v[ 0, 1] | |||||
uniform float _BumpFace; // v[ 0, 1] | |||||
uniform samplerCUBE _Cube; // Cube / sphere map | |||||
uniform fixed4 _ReflectFaceColor; // RGB intensity | |||||
uniform fixed4 _ReflectOutlineColor; | |||||
//uniform float _EnvTiltX; // v[-1, 1] | |||||
//uniform float _EnvTiltY; // v[-1, 1] | |||||
uniform float3 _EnvMatrixRotation; | |||||
uniform float4x4 _EnvMatrix; | |||||
uniform fixed4 _SpecularColor; // RGB intensity | |||||
uniform float _LightAngle; // v[ 0,Tau] | |||||
uniform float _SpecularPower; // v[ 0, 1] | |||||
uniform float _Reflectivity; // v[ 5, 15] | |||||
uniform float _Diffuse; // v[ 0, 1] | |||||
uniform float _Ambient; // v[ 0, 1] | |||||
uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity | |||||
uniform float _UnderlayOffsetX; // v[-1, 1] | |||||
uniform float _UnderlayOffsetY; // v[-1, 1] | |||||
uniform float _UnderlayDilate; // v[-1, 1] | |||||
uniform float _UnderlaySoftness; // v[ 0, 1] | |||||
uniform fixed4 _GlowColor; // RGBA : Color + Intesity | |||||
uniform float _GlowOffset; // v[-1, 1] | |||||
uniform float _GlowOuter; // v[ 0, 1] | |||||
uniform float _GlowInner; // v[ 0, 1] | |||||
uniform float _GlowPower; // v[ 1, 1/(1+4*4)] | |||||
// API Editable properties | |||||
uniform float _ShaderFlags; | |||||
uniform float _WeightNormal; | |||||
uniform float _WeightBold; | |||||
uniform float _ScaleRatioA; | |||||
uniform float _ScaleRatioB; | |||||
uniform float _ScaleRatioC; | |||||
uniform float _VertexOffsetX; | |||||
uniform float _VertexOffsetY; | |||||
//uniform float _UseClipRect; | |||||
uniform float _MaskID; | |||||
uniform sampler2D _MaskTex; | |||||
uniform float4 _MaskCoord; | |||||
uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) | |||||
//uniform float _MaskWipeControl; | |||||
//uniform float _MaskEdgeSoftness; | |||||
//uniform fixed4 _MaskEdgeColor; | |||||
//uniform bool _MaskInverse; | |||||
uniform float _MaskSoftnessX; | |||||
uniform float _MaskSoftnessY; | |||||
// Font Atlas properties | |||||
uniform sampler2D _MainTex; | |||||
uniform float _TextureWidth; | |||||
uniform float _TextureHeight; | |||||
uniform float _GradientScale; | |||||
uniform float _ScaleX; | |||||
uniform float _ScaleY; | |||||
uniform float _PerspectiveFilter; |
@ -0,0 +1,115 @@ | |||||
void VertShader(inout appdata_full v, out Input data) | |||||
{ | |||||
v.vertex.x += _VertexOffsetX; | |||||
v.vertex.y += _VertexOffsetY; | |||||
UNITY_INITIALIZE_OUTPUT(Input, data); | |||||
float bold = step(v.texcoord1.y, 0); | |||||
// Generate normal for backface | |||||
float3 view = ObjSpaceViewDir(v.vertex); | |||||
v.normal *= sign(dot(v.normal, view)); | |||||
#if USE_DERIVATIVE | |||||
data.param.y = 1; | |||||
#else | |||||
float4 vert = v.vertex; | |||||
float4 vPosition = UnityObjectToClipPos(vert); | |||||
float2 pixelSize = vPosition.w; | |||||
pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); | |||||
float scale = rsqrt(dot(pixelSize, pixelSize)); | |||||
scale *= abs(v.texcoord1.y) * _GradientScale * 1.5; | |||||
scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); | |||||
data.param.y = scale; | |||||
#endif | |||||
//float opacity = v.color.a; | |||||
data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // | |||||
v.texcoord1.xy = UnpackUV(v.texcoord1.x); | |||||
data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); | |||||
} | |||||
void PixShader(Input input, inout SurfaceOutput o) | |||||
{ | |||||
#if USE_DERIVATIVE | BEVEL_ON | |||||
float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); | |||||
float4 smp4x = { tex2D(_MainTex, input.uv_MainTex - delta.xz).a, | |||||
tex2D(_MainTex, input.uv_MainTex + delta.xz).a, | |||||
tex2D(_MainTex, input.uv_MainTex - delta.zy).a, | |||||
tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; | |||||
#endif | |||||
#if USE_DERIVATIVE | |||||
// Screen space scaling reciprocal with anisotropic correction | |||||
float2 edgeNormal = Normalize(float2(smp4x.x - smp4x.y, smp4x.z - smp4x.w)); | |||||
float2 res = float2(_TextureWidth * input.param.y, _TextureHeight); | |||||
float2 tdx = ddx(input.uv_MainTex)*res; | |||||
float2 tdy = ddy(input.uv_MainTex)*res; | |||||
float lx = length(tdx); | |||||
float ly = length(tdy); | |||||
float s = sqrt(min(lx, ly) / max(lx, ly)); | |||||
s = lerp(1, s, abs(dot(normalize(tdx + tdy), edgeNormal))); | |||||
float scale = rsqrt(abs(tdx.x * tdy.y - tdx.y * tdy.x)) * (_GradientScale * 2) * s; | |||||
#else | |||||
float scale = input.param.y; | |||||
#endif | |||||
// Signed distance | |||||
float c = tex2D(_MainTex, input.uv_MainTex).a; | |||||
float sd = (.5 - c - input.param.x) * scale + .5; | |||||
float outline = _OutlineWidth*_ScaleRatioA * scale; | |||||
float softness = _OutlineSoftness*_ScaleRatioA * scale; | |||||
// Color & Alpha | |||||
float4 faceColor = _FaceColor; | |||||
float4 outlineColor = _OutlineColor; | |||||
faceColor *= input.color; | |||||
outlineColor.a *= input.color.a; | |||||
faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); | |||||
outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); | |||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); | |||||
faceColor.rgb /= max(faceColor.a, 0.0001); | |||||
#if BEVEL_ON | |||||
// Face Normal | |||||
float3 n = GetSurfaceNormal(smp4x, input.param.x); | |||||
// Bumpmap | |||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; | |||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); | |||||
bump = lerp(float3(0, 0, 1), bump, faceColor.a); | |||||
n = normalize(n - bump); | |||||
// Cubemap reflection | |||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); | |||||
float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; | |||||
#else | |||||
float3 n = float3(0, 0, -1); | |||||
float3 emission = float3(0, 0, 0); | |||||
#endif | |||||
#if GLOW_ON | |||||
float4 glowColor = GetGlowColor(sd, scale); | |||||
glowColor.a *= input.color.a; | |||||
emission += glowColor.rgb*glowColor.a; | |||||
faceColor = BlendARGB(glowColor, faceColor); | |||||
faceColor.rgb /= max(faceColor.a, 0.0001); | |||||
#endif | |||||
// Set Standard output structure | |||||
o.Albedo = faceColor.rgb; | |||||
o.Normal = -n; | |||||
o.Emission = emission; | |||||
o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); | |||||
o.Gloss = 1; | |||||
o.Alpha = faceColor.a; | |||||
} |
@ -0,0 +1,296 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!21 &2103686 | |||||
Material: | |||||
serializedVersion: 6 | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_Name: TextMeshPro/Sprite | |||||
m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} | |||||
m_ShaderKeywords: UNITY_UI_CLIP_RECT | |||||
m_LightmapFlags: 5 | |||||
m_EnableInstancingVariants: 0 | |||||
m_DoubleSidedGI: 0 | |||||
m_CustomRenderQueue: -1 | |||||
stringTagMap: {} | |||||
disabledShaderPasses: [] | |||||
m_SavedProperties: | |||||
serializedVersion: 3 | |||||
m_TexEnvs: | |||||
- _MainTex: | |||||
m_Texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} | |||||
m_Scale: {x: 1, y: 1} | |||||
m_Offset: {x: 0, y: 0} | |||||
m_Floats: | |||||
- _ColorMask: 15 | |||||
- _Stencil: 0 | |||||
- _StencilComp: 8 | |||||
- _StencilOp: 0 | |||||
- _StencilReadMask: 255 | |||||
- _StencilWriteMask: 255 | |||||
- _UseUIAlphaClip: 0 | |||||
m_Colors: | |||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} | |||||
- _Color: {r: 1, g: 1, b: 1, a: 1} | |||||
--- !u!114 &11400000 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281, type: 3} | |||||
m_Name: EmojiOne | |||||
m_EditorClassIdentifier: | |||||
hashCode: -1836805472 | |||||
material: {fileID: 2103686} | |||||
materialHashCode: 0 | |||||
spriteSheet: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} | |||||
spriteInfoList: | |||||
- id: 0 | |||||
x: 0 | |||||
y: 384 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: Smiling face with smiling eyes | |||||
hashCode: -1318250903 | |||||
unicode: 128522 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 1 | |||||
x: 128 | |||||
y: 384 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f60b | |||||
hashCode: 57188339 | |||||
unicode: 128523 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 2 | |||||
x: 256 | |||||
y: 384 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f60d | |||||
hashCode: 57188341 | |||||
unicode: 128525 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 3 | |||||
x: 384 | |||||
y: 384 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f60e | |||||
hashCode: 57188340 | |||||
unicode: 128526 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 4 | |||||
x: 0 | |||||
y: 256 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: Grinning face | |||||
hashCode: -95541379 | |||||
unicode: 128512 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 5 | |||||
x: 128 | |||||
y: 256 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f601 | |||||
hashCode: 57188256 | |||||
unicode: 128513 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 6 | |||||
x: 256 | |||||
y: 256 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: Face with tears of joy | |||||
hashCode: 239522663 | |||||
unicode: 128514 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 7 | |||||
x: 384 | |||||
y: 256 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f603 | |||||
hashCode: 57188258 | |||||
unicode: 128515 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 8 | |||||
x: 0 | |||||
y: 128 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f604 | |||||
hashCode: 57188261 | |||||
unicode: 128516 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 9 | |||||
x: 128 | |||||
y: 128 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f605 | |||||
hashCode: 57188260 | |||||
unicode: 128517 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 10 | |||||
x: 256 | |||||
y: 128 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f606 | |||||
hashCode: 57188263 | |||||
unicode: 128518 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 11 | |||||
x: 384 | |||||
y: 128 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f609 | |||||
hashCode: 57188264 | |||||
unicode: 128521 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 12 | |||||
x: 0 | |||||
y: 0 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f618 | |||||
hashCode: 57188168 | |||||
unicode: 128536 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 13 | |||||
x: 128 | |||||
y: 0 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 1f923 | |||||
hashCode: 57200239 | |||||
unicode: 129315 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 14 | |||||
x: 256 | |||||
y: 0 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 263a | |||||
hashCode: 1748406 | |||||
unicode: 9786 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
- id: 15 | |||||
x: 384 | |||||
y: 0 | |||||
width: 128 | |||||
height: 128 | |||||
xOffset: 0 | |||||
yOffset: 115.6 | |||||
xAdvance: 128 | |||||
scale: 1 | |||||
name: 2639 | |||||
hashCode: 1748462 | |||||
unicode: 9785 | |||||
pivot: {x: 0.5, y: 0.5} | |||||
sprite: {fileID: 0} | |||||
fallbackSpriteAssets: [] | |||||
--- !u!21 &1369835458 | |||||
Material: | |||||
serializedVersion: 6 | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_Name: TextMeshPro/Sprite | |||||
m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} | |||||
m_ShaderKeywords: | |||||
m_LightmapFlags: 5 | |||||
m_EnableInstancingVariants: 0 | |||||
m_DoubleSidedGI: 0 | |||||
m_CustomRenderQueue: -1 | |||||
stringTagMap: {} | |||||
disabledShaderPasses: [] | |||||
m_SavedProperties: | |||||
serializedVersion: 3 | |||||
m_TexEnvs: [] | |||||
m_Floats: [] | |||||
m_Colors: [] |
@ -0,0 +1,68 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!114 &11400000 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410, type: 3} | |||||
m_Name: Default Style Sheet | |||||
m_EditorClassIdentifier: | |||||
m_StyleList: | |||||
- m_Name: H1 | |||||
m_HashCode: 2425 | |||||
m_OpeningDefinition: <size=2em><b><#40ff80>* | |||||
m_ClosingDefinition: '*</size></b></color>' | |||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 | |||||
m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 | |||||
- m_Name: Quote | |||||
m_HashCode: 92254330 | |||||
m_OpeningDefinition: <i><size=75%><margin=10%> | |||||
m_ClosingDefinition: </i></size></width></margin> | |||||
m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 | |||||
m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 | |||||
- m_Name: Link | |||||
m_HashCode: 2687968 | |||||
m_OpeningDefinition: <u><#40a0ff><link="ID_01"> | |||||
m_ClosingDefinition: </u></color></link> | |||||
m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 | |||||
m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 | |||||
- m_Name: Title | |||||
m_HashCode: 98732960 | |||||
m_OpeningDefinition: <size=125%><b><align=center> | |||||
m_ClosingDefinition: </size></b></align> | |||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 | |||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 | |||||
- m_Name: H2 | |||||
m_HashCode: 2426 | |||||
m_OpeningDefinition: <size=1.5em><b><#4080FF> | |||||
m_ClosingDefinition: </size></b></color> | |||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 | |||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 | |||||
- m_Name: H3 | |||||
m_HashCode: 2427 | |||||
m_OpeningDefinition: <size=1.17em><b><#FF8040> | |||||
m_ClosingDefinition: </size></b></color> | |||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 | |||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 | |||||
- m_Name: C1 | |||||
m_HashCode: 2194 | |||||
m_OpeningDefinition: <color=#ffff40> | |||||
m_ClosingDefinition: </color> | |||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 | |||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 | |||||
- m_Name: C2 | |||||
m_HashCode: 2193 | |||||
m_OpeningDefinition: <color=#ff40FF><size=125%> | |||||
m_ClosingDefinition: </color></size> | |||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 | |||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 | |||||
- m_Name: C3 | |||||
m_HashCode: 2192 | |||||
m_OpeningDefinition: <color=#80A0FF><b> | |||||
m_ClosingDefinition: </color></b> | |||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 | |||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 |
@ -0,0 +1,103 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!114 &11400000 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391, type: 3} | |||||
m_Name: TMP Settings | |||||
m_EditorClassIdentifier: | |||||
m_enableWordWrapping: 1 | |||||
m_enableKerning: 1 | |||||
m_enableExtraPadding: 0 | |||||
m_enableTintAllSprites: 0 | |||||
m_enableParseEscapeCharacters: 1 | |||||
m_missingGlyphCharacter: 0 | |||||
m_warningsDisabled: 0 | |||||
m_defaultFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} | |||||
m_defaultFontAssetPath: Fonts & Materials/ | |||||
m_defaultFontSize: 36 | |||||
m_defaultAutoSizeMinRatio: 0.5 | |||||
m_defaultAutoSizeMaxRatio: 2 | |||||
m_defaultTextMeshProTextContainerSize: {x: 20, y: 5} | |||||
m_defaultTextMeshProUITextContainerSize: {x: 200, y: 50} | |||||
m_autoSizeTextContainer: 0 | |||||
m_fallbackFontAssets: [] | |||||
m_matchMaterialPreset: 1 | |||||
m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45, | |||||
type: 2} | |||||
m_defaultSpriteAssetPath: Sprite Assets/ | |||||
m_defaultColorGradientPresetsPath: Color Gradient Presets/ | |||||
m_enableEmojiSupport: 1 | |||||
m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e, | |||||
type: 2} | |||||
m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} | |||||
m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, | |||||
type: 3} | |||||
m_FontCreatorRecentSettings: | |||||
- sourceFontFileName: | |||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 | |||||
pointSizeSamplingMode: 1 | |||||
pointSize: 109 | |||||
padding: 12 | |||||
packingMode: 0 | |||||
atlasWidth: 128 | |||||
atlasHeight: 128 | |||||
characterSetSelectionMode: 5 | |||||
characterSequence: 64 | |||||
fontStyle: 0 | |||||
fontStyleModifier: 2 | |||||
renderMode: 281 | |||||
includeFontFeatures: 0 | |||||
referenceFontAssetGUID: 903613a9fe4b65946aa20dfcce07abec | |||||
- sourceFontFileName: | |||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 | |||||
pointSizeSamplingMode: 0 | |||||
pointSize: 108 | |||||
padding: 12 | |||||
packingMode: 0 | |||||
atlasWidth: 128 | |||||
atlasHeight: 128 | |||||
characterSetSelectionMode: 5 | |||||
characterSequence: 64 | |||||
fontStyle: 0 | |||||
fontStyleModifier: 2 | |||||
renderMode: 2090 | |||||
includeFontFeatures: 0 | |||||
referenceFontAssetGUID: 70cf10c1d306ada42aa6cd7268db990d | |||||
- sourceFontFileName: | |||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 | |||||
pointSizeSamplingMode: 1 | |||||
pointSize: 109 | |||||
padding: 12 | |||||
packingMode: 0 | |||||
atlasWidth: 128 | |||||
atlasHeight: 128 | |||||
characterSetSelectionMode: 5 | |||||
characterSequence: 64 | |||||
fontStyle: 0 | |||||
fontStyleModifier: 2 | |||||
renderMode: 329 | |||||
includeFontFeatures: 0 | |||||
referenceFontAssetGUID: 396d465a5821ead47b589b228da7e980 | |||||
- sourceFontFileName: | |||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 | |||||
pointSizeSamplingMode: 1 | |||||
pointSize: 338 | |||||
padding: 36 | |||||
packingMode: 0 | |||||
atlasWidth: 4096 | |||||
atlasHeight: 4096 | |||||
characterSetSelectionMode: 1 | |||||
characterSequence: 32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633 | |||||
fontStyle: 0 | |||||
fontStyleModifier: 2 | |||||
renderMode: 329 | |||||
includeFontFeatures: 0 | |||||
referenceFontAssetGUID: 3a4171c252e1112499af739474d9f48e | |||||
m_CreationSettingsSelectionIndex: 0 | |||||
m_CreationSettingsIndex: 0 |
@ -0,0 +1,3 @@ | |||||
This sample of beautiful emojis are provided by EmojiOne https://www.emojione.com/ | |||||
Please visit their website to view the complete set of their emojis and review their licensing terms. |
@ -0,0 +1,156 @@ | |||||
{"frames": [ | |||||
{ | |||||
"filename": "1f60a.png", | |||||
"frame": {"x":0,"y":0,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f60b.png", | |||||
"frame": {"x":128,"y":0,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f60d.png", | |||||
"frame": {"x":256,"y":0,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f60e.png", | |||||
"frame": {"x":384,"y":0,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f600.png", | |||||
"frame": {"x":0,"y":128,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f601.png", | |||||
"frame": {"x":128,"y":128,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f602.png", | |||||
"frame": {"x":256,"y":128,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f603.png", | |||||
"frame": {"x":384,"y":128,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f604.png", | |||||
"frame": {"x":0,"y":256,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f605.png", | |||||
"frame": {"x":128,"y":256,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f606.png", | |||||
"frame": {"x":256,"y":256,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f609.png", | |||||
"frame": {"x":384,"y":256,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f618.png", | |||||
"frame": {"x":0,"y":384,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "1f923.png", | |||||
"frame": {"x":128,"y":384,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "263a.png", | |||||
"frame": {"x":256,"y":384,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}, | |||||
{ | |||||
"filename": "2639.png", | |||||
"frame": {"x":384,"y":384,"w":128,"h":128}, | |||||
"rotated": false, | |||||
"trimmed": false, | |||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, | |||||
"sourceSize": {"w":128,"h":128}, | |||||
"pivot": {"x":0.5,"y":0.5} | |||||
}], | |||||
"meta": { | |||||
"app": "http://www.codeandweb.com/texturepacker", | |||||
"version": "1.0", | |||||
"image": "EmojiOne.png", | |||||
"format": "RGBA8888", | |||||
"size": {"w":512,"h":512}, | |||||
"scale": "1", | |||||
"smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" | |||||
} | |||||
} |
@ -0,0 +1,20 @@ | |||||
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio 16 | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Any CPU = Debug|Any CPU | |||||
Release|Any CPU = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{7DDD3563-F4A1-02A1-0E20-80A847EE0B66}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | |||||
HideSolutionNode = FALSE | |||||
EndGlobalSection | |||||
EndGlobal |
@ -0,0 +1 @@ | |||||
5;0;4;0;0 |
@ -0,0 +1,472 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!114 &1 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_PixelRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 43 | |||||
width: 2560 | |||||
height: 1367 | |||||
m_ShowMode: 4 | |||||
m_Title: | |||||
m_RootView: {fileID: 6} | |||||
m_MinSize: {x: 950, y: 300} | |||||
m_MaxSize: {x: 10000, y: 10000} | |||||
--- !u!114 &2 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: | |||||
- {fileID: 9} | |||||
- {fileID: 3} | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 30 | |||||
width: 2560 | |||||
height: 1317 | |||||
m_MinSize: {x: 509, y: 498} | |||||
m_MaxSize: {x: 14004, y: 14048} | |||||
vertical: 0 | |||||
controlID: 80 | |||||
--- !u!114 &3 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: [] | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 1998 | |||||
y: 0 | |||||
width: 562 | |||||
height: 1317 | |||||
m_MinSize: {x: 277, y: 74} | |||||
m_MaxSize: {x: 4002, y: 4024} | |||||
m_ActualView: {fileID: 11} | |||||
m_Panes: | |||||
- {fileID: 11} | |||||
m_Selected: 0 | |||||
m_LastSelected: 0 | |||||
--- !u!114 &4 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: [] | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 1998 | |||||
height: 687 | |||||
m_MinSize: {x: 202, y: 224} | |||||
m_MaxSize: {x: 4002, y: 4024} | |||||
m_ActualView: {fileID: 12} | |||||
m_Panes: | |||||
- {fileID: 12} | |||||
m_Selected: 0 | |||||
m_LastSelected: 0 | |||||
--- !u!114 &5 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: [] | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 687 | |||||
width: 1998 | |||||
height: 630 | |||||
m_MinSize: {x: 232, y: 274} | |||||
m_MaxSize: {x: 10002, y: 10024} | |||||
m_ActualView: {fileID: 10} | |||||
m_Panes: | |||||
- {fileID: 10} | |||||
- {fileID: 13} | |||||
m_Selected: 0 | |||||
m_LastSelected: 1 | |||||
--- !u!114 &6 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: | |||||
- {fileID: 7} | |||||
- {fileID: 2} | |||||
- {fileID: 8} | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 2560 | |||||
height: 1367 | |||||
m_MinSize: {x: 950, y: 300} | |||||
m_MaxSize: {x: 10000, y: 10000} | |||||
--- !u!114 &7 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: [] | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 2560 | |||||
height: 30 | |||||
m_MinSize: {x: 0, y: 0} | |||||
m_MaxSize: {x: 0, y: 0} | |||||
m_LastLoadedLayoutName: | |||||
--- !u!114 &8 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: [] | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 1347 | |||||
width: 2560 | |||||
height: 20 | |||||
m_MinSize: {x: 0, y: 0} | |||||
m_MaxSize: {x: 0, y: 0} | |||||
--- !u!114 &9 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Children: | |||||
- {fileID: 4} | |||||
- {fileID: 5} | |||||
m_Position: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 1998 | |||||
height: 1317 | |||||
m_MinSize: {x: 232, y: 498} | |||||
m_MaxSize: {x: 10002, y: 14048} | |||||
vertical: 1 | |||||
controlID: 3 | |||||
--- !u!114 &10 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_MinSize: {x: 230, y: 250} | |||||
m_MaxSize: {x: 10000, y: 10000} | |||||
m_TitleContent: | |||||
m_Text: Project | |||||
m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000, | |||||
type: 0} | |||||
m_Tooltip: | |||||
m_Pos: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 760 | |||||
width: 1996 | |||||
height: 610 | |||||
m_PersistentViewDataDictionary: {fileID: 0} | |||||
m_SearchFilter: | |||||
m_NameFilter: | |||||
m_ClassNames: [] | |||||
m_AssetLabels: [] | |||||
m_AssetBundleNames: [] | |||||
m_VersionControlStates: [] | |||||
m_SoftLockControlStates: [] | |||||
m_ReferencingInstanceIDs: | |||||
m_SceneHandles: | |||||
m_ShowAllHits: 0 | |||||
m_SearchArea: 1 | |||||
m_Folders: | |||||
- Assets/Consolas | |||||
m_ViewMode: 1 | |||||
m_StartGridSize: 96 | |||||
m_LastFolders: | |||||
- Assets/Consolas | |||||
m_LastFoldersGridSize: 96 | |||||
m_LastProjectPath: Z:\Users\aaron\Source\Repos\IPA-Reloaded-BeatSaber\BSIPA-ModList\TMP | |||||
Exporter | |||||
m_LockTracker: | |||||
m_IsLocked: 0 | |||||
m_FolderTreeState: | |||||
scrollPos: {x: 0, y: 0} | |||||
m_SelectedIDs: ca260000 | |||||
m_LastClickedID: 9930 | |||||
m_ExpandedIDs: 000000001e2600006c260000922700003a28000000ca9a3b | |||||
m_RenameOverlay: | |||||
m_UserAcceptedRename: 0 | |||||
m_Name: Editor | |||||
m_OriginalName: Editor | |||||
m_EditFieldRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 0 | |||||
height: 0 | |||||
m_UserData: 9914 | |||||
m_IsWaitingForDelay: 0 | |||||
m_IsRenaming: 0 | |||||
m_OriginalEventType: 0 | |||||
m_IsRenamingFilename: 1 | |||||
m_ClientGUIView: {fileID: 5} | |||||
m_SearchString: | |||||
m_CreateAssetUtility: | |||||
m_EndAction: {fileID: 0} | |||||
m_InstanceID: 0 | |||||
m_Path: | |||||
m_Icon: {fileID: 0} | |||||
m_ResourceFile: | |||||
m_AssetTreeState: | |||||
scrollPos: {x: 0, y: 0} | |||||
m_SelectedIDs: | |||||
m_LastClickedID: 0 | |||||
m_ExpandedIDs: 000000001e2600006c260000922700003a280000 | |||||
m_RenameOverlay: | |||||
m_UserAcceptedRename: 0 | |||||
m_Name: | |||||
m_OriginalName: | |||||
m_EditFieldRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 0 | |||||
height: 0 | |||||
m_UserData: 0 | |||||
m_IsWaitingForDelay: 0 | |||||
m_IsRenaming: 0 | |||||
m_OriginalEventType: 11 | |||||
m_IsRenamingFilename: 1 | |||||
m_ClientGUIView: {fileID: 0} | |||||
m_SearchString: | |||||
m_CreateAssetUtility: | |||||
m_EndAction: {fileID: 0} | |||||
m_InstanceID: 0 | |||||
m_Path: | |||||
m_Icon: {fileID: 0} | |||||
m_ResourceFile: | |||||
m_ListAreaState: | |||||
m_SelectedInstanceIDs: | |||||
m_LastClickedInstanceID: 0 | |||||
m_HadKeyboardFocusLastEvent: 1 | |||||
m_ExpandedInstanceIDs: c6230000c60a00005a0b0000660b0000ce0a0000022f0000d00a0000eaeeffff | |||||
m_RenameOverlay: | |||||
m_UserAcceptedRename: 0 | |||||
m_Name: | |||||
m_OriginalName: | |||||
m_EditFieldRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 0 | |||||
height: 0 | |||||
m_UserData: 0 | |||||
m_IsWaitingForDelay: 0 | |||||
m_IsRenaming: 0 | |||||
m_OriginalEventType: 11 | |||||
m_IsRenamingFilename: 1 | |||||
m_ClientGUIView: {fileID: 5} | |||||
m_CreateAssetUtility: | |||||
m_EndAction: {fileID: 0} | |||||
m_InstanceID: 0 | |||||
m_Path: | |||||
m_Icon: {fileID: 0} | |||||
m_ResourceFile: | |||||
m_NewAssetIndexInList: -1 | |||||
m_ScrollPosition: {x: 0, y: 0} | |||||
m_GridSize: 96 | |||||
m_DirectoriesAreaWidth: 265 | |||||
--- !u!114 &11 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_MinSize: {x: 275, y: 50} | |||||
m_MaxSize: {x: 4000, y: 4000} | |||||
m_TitleContent: | |||||
m_Text: Inspector | |||||
m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000, | |||||
type: 0} | |||||
m_Tooltip: | |||||
m_Pos: | |||||
serializedVersion: 2 | |||||
x: 1998 | |||||
y: 73 | |||||
width: 560 | |||||
height: 1297 | |||||
m_PersistentViewDataDictionary: {fileID: 0} | |||||
m_ObjectsLockedBeforeSerialization: [] | |||||
m_InstanceIDsLockedBeforeSerialization: | |||||
m_LockTracker: | |||||
m_IsLocked: 0 | |||||
m_PreviewResizer: | |||||
m_CachedPref: 160 | |||||
m_ControlHash: -371814159 | |||||
m_PrefName: Preview_InspectorPreview | |||||
m_PreviewWindow: {fileID: 0} | |||||
--- !u!114 &12 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_MinSize: {x: 200, y: 200} | |||||
m_MaxSize: {x: 4000, y: 4000} | |||||
m_TitleContent: | |||||
m_Text: Hierarchy | |||||
m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000, | |||||
type: 0} | |||||
m_Tooltip: | |||||
m_Pos: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 73 | |||||
width: 1996 | |||||
height: 667 | |||||
m_PersistentViewDataDictionary: {fileID: 0} | |||||
m_SceneHierarchy: | |||||
m_TreeViewState: | |||||
scrollPos: {x: 0, y: 0} | |||||
m_SelectedIDs: d0260000 | |||||
m_LastClickedID: 0 | |||||
m_ExpandedIDs: b8fbffff | |||||
m_RenameOverlay: | |||||
m_UserAcceptedRename: 0 | |||||
m_Name: | |||||
m_OriginalName: | |||||
m_EditFieldRect: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 0 | |||||
width: 0 | |||||
height: 0 | |||||
m_UserData: 0 | |||||
m_IsWaitingForDelay: 0 | |||||
m_IsRenaming: 0 | |||||
m_OriginalEventType: 11 | |||||
m_IsRenamingFilename: 0 | |||||
m_ClientGUIView: {fileID: 0} | |||||
m_SearchString: | |||||
m_ExpandedScenes: [] | |||||
m_CurrenRootInstanceID: 0 | |||||
m_LockTracker: | |||||
m_IsLocked: 0 | |||||
m_CurrentSortingName: TransformSorting | |||||
m_WindowGUID: e647edac3ab8d534bb09eea7d6861473 | |||||
--- !u!114 &13 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 52 | |||||
m_CorrespondingSourceObject: {fileID: 0} | |||||
m_PrefabInstance: {fileID: 0} | |||||
m_PrefabAsset: {fileID: 0} | |||||
m_GameObject: {fileID: 0} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 1 | |||||
m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_MinSize: {x: 100, y: 100} | |||||
m_MaxSize: {x: 4000, y: 4000} | |||||
m_TitleContent: | |||||
m_Text: Console | |||||
m_Image: {fileID: 111653112392082826, guid: 0000000000000000d000000000000000, | |||||
type: 0} | |||||
m_Tooltip: | |||||
m_Pos: | |||||
serializedVersion: 2 | |||||
x: 0 | |||||
y: 760 | |||||
width: 1998 | |||||
height: 611 | |||||
m_PersistentViewDataDictionary: {fileID: 0} |
@ -0,0 +1,4 @@ | |||||
sceneSetups: | |||||
- path: Assets/Scenes/SampleScene.unity | |||||
isLoaded: 1 | |||||
isActive: 1 |
@ -0,0 +1,2 @@ | |||||
unityRebuildLibraryVersion: 11 | |||||
unityForwardCompatibleVersion: 40 |
@ -0,0 +1,37 @@ | |||||
[1.0.1] | |||||
Adding Readme file | |||||
Adding local plugin importer callbacks. | |||||
Removing Bintray references in package.json | |||||
[2.0.3] | |||||
Fix bug where importing the asset store ads package would cause duiplicate symbols, | |||||
and removing the asset store ads package would cause missing symbols. | |||||
[2.0.4] | |||||
Added new description string to package.json | |||||
Fixed art assets to use no compression (fixes issue switching between iOS and PC builds) | |||||
[2.0.5] - 2018-03-29 | |||||
Fix for https://fogbugz.unity3d.com/f/cases/1011363 | |||||
Fixes an incorrect guid that the importer used to include/exclude the runtime assembly from the build. | |||||
[2.0.6] - 2018-03-29 | |||||
Update changelog for this and 2.0.5 | |||||
[2.0.7] - 2018-04-06 | |||||
Fix editor assembly project file to include the importer script. | |||||
[2.0.8] - 2018-05-01 | |||||
Add call to SetShouldOverridePredicate to exclude package dll when asset store dlls are present. | |||||
Update unity version attribute to support 2017.4 LTS | |||||
Fix an issue with the editor assembly to add back in some iOS platform specific code that was removed | |||||
via conditionals (which is fine for source packages, but doesn't work with precompiled assemblies) |
@ -0,0 +1,11 @@ | |||||
#import "UADSMetaData.h" | |||||
@interface UADSInAppPurchaseMetaData : UADSMetaData | |||||
- (void)setProductId:(NSString *)productId; | |||||
- (void)setPrice:(NSNumber *)price; | |||||
- (void)setCurrency:(NSString *)currency; | |||||
- (void)setReceiptPurchaseData:(NSString *)receiptPurchaseData; | |||||
- (void)setSignature:(NSString *)signature; | |||||
@end |
@ -0,0 +1,13 @@ | |||||
@interface UADSJsonStorage : NSObject | |||||
@property (nonatomic, strong) NSMutableDictionary *storageContents; | |||||
- (BOOL)set:(NSString *)key value:(id)value; | |||||
- (id)getValueForKey:(NSString *)key; | |||||
- (BOOL)deleteKey:(NSString *)key; | |||||
- (NSArray *)getKeys:(NSString *)key recursive:(BOOL)recursive; | |||||
- (void)clearData; | |||||
- (BOOL)initData; | |||||
- (BOOL)hasData; | |||||
@end |
@ -0,0 +1,9 @@ | |||||
#import "UADSMetaData.h" | |||||
@interface UADSMediationMetaData : UADSMetaData | |||||
- (void)setName:(NSString *)mediationNetworkName; | |||||
- (void)setVersion:(NSString *)mediationSdkVersion; | |||||
- (void)setOrdinal:(int)mediationOrdinal; | |||||
@end |
@ -0,0 +1,12 @@ | |||||
@interface UADSMetaData : NSObject | |||||
@property (nonatomic, strong) NSString *category; | |||||
@property (nonatomic, strong) NSMutableDictionary *entries; | |||||
- (instancetype)initWithCategory:(NSString *)category; | |||||
- (void)set:(NSString *)key value:(id)value; | |||||
- (void)commit; | |||||
@end |
@ -0,0 +1,7 @@ | |||||
#import "UADSMetaData.h" | |||||
@interface UADSPlayerMetaData : UADSMetaData | |||||
- (void)setServerId:(NSString *)serverId; | |||||
@end |
@ -0,0 +1,255 @@ | |||||
#import <UIKit/UIKit.h> | |||||
#import <UnityAds/UADSMediationMetaData.h> | |||||
#import <UnityAds/UADSPlayerMetaData.h> | |||||
/** | |||||
* An enumerate that describes the state of `UnityAds` placements. | |||||
* @note All placement states, other than `kUnityAdsPlacementStateReady`, indicate that the placement is not currently ready to show ads. | |||||
*/ | |||||
typedef NS_ENUM(NSInteger, UnityAdsPlacementState) { | |||||
/** | |||||
* A state that indicates that the placement is ready to show an ad. The `show:` selector can be called. | |||||
*/ | |||||
kUnityAdsPlacementStateReady, | |||||
/** | |||||
* A state that indicates that no state is information is available. | |||||
* @warning This state can that UnityAds is not initialized or that the placement is not correctly configured in the Unity Ads admin tool. | |||||
*/ | |||||
kUnityAdsPlacementStateNotAvailable, | |||||
/** | |||||
* A state that indicates that the placement is currently disabled. The placement can be enabled in the Unity Ads admin tools. | |||||
*/ | |||||
kUnityAdsPlacementStateDisabled, | |||||
/** | |||||
* A state that indicates that the placement is not currently ready, but will be in the future. | |||||
* @note This state most likely indicates that the ad content is currently caching. | |||||
*/ | |||||
kUnityAdsPlacementStateWaiting, | |||||
/** | |||||
* A state that indicates that the placement is properly configured, but there are currently no ads available for the placement. | |||||
*/ | |||||
kUnityAdsPlacementStateNoFill | |||||
}; | |||||
/** | |||||
* An enumeration for the completion state of an ad. | |||||
*/ | |||||
typedef NS_ENUM(NSInteger, UnityAdsFinishState) { | |||||
/** | |||||
* A state that indicates that the ad did not successfully display. | |||||
*/ | |||||
kUnityAdsFinishStateError, | |||||
/** | |||||
* A state that indicates that the user skipped the ad. | |||||
*/ | |||||
kUnityAdsFinishStateSkipped, | |||||
/** | |||||
* A state that indicates that the ad was played entirely. | |||||
*/ | |||||
kUnityAdsFinishStateCompleted | |||||
}; | |||||
/** | |||||
* An enumeration for the various errors that can be emitted through the `UnityAdsDelegate` `unityAdsDidError:withMessage:` method. | |||||
*/ | |||||
typedef NS_ENUM(NSInteger, UnityAdsError) { | |||||
/** | |||||
* An error that indicates failure due to `UnityAds` currently being uninitialized. | |||||
*/ | |||||
kUnityAdsErrorNotInitialized = 0, | |||||
/** | |||||
* An error that indicates failure due to a failure in the initialization process. | |||||
*/ | |||||
kUnityAdsErrorInitializedFailed, | |||||
/** | |||||
* An error that indicates failure due to attempting to initialize `UnityAds` with invalid parameters. | |||||
*/ | |||||
kUnityAdsErrorInvalidArgument, | |||||
/** | |||||
* An error that indicates failure of the video player. | |||||
*/ | |||||
kUnityAdsErrorVideoPlayerError, | |||||
/** | |||||
* An error that indicates failure due to having attempted to initialize the `UnityAds` class in an invalid environment. | |||||
*/ | |||||
kUnityAdsErrorInitSanityCheckFail, | |||||
/** | |||||
* An error that indicates failure due to the presence of an ad blocker. | |||||
*/ | |||||
kUnityAdsErrorAdBlockerDetected, | |||||
/** | |||||
* An error that indicates failure due to inability to read or write a file. | |||||
*/ | |||||
kUnityAdsErrorFileIoError, | |||||
/** | |||||
* An error that indicates failure due to a bad device identifier. | |||||
*/ | |||||
kUnityAdsErrorDeviceIdError, | |||||
/** | |||||
* An error that indicates a failure when attempting to show an ad. | |||||
*/ | |||||
kUnityAdsErrorShowError, | |||||
/** | |||||
* An error that indicates an internal failure in `UnityAds`. | |||||
*/ | |||||
kUnityAdsErrorInternalError, | |||||
}; | |||||
/** | |||||
* The `UnityAdsDelegate` protocol defines the required methods for receiving messages from UnityAds. | |||||
* Must be implemented by the hosting app. | |||||
* The unityAdsReady: method is called when it's possible to show an ad. | |||||
* All other methods are used to provide notifications of events of the ad lifecycle. | |||||
* @note On initialization, there are ready (or error) callbacks for each placement attached to the game identifier. | |||||
*/ | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@protocol UnityAdsDelegate <NSObject> | |||||
/** | |||||
* Called when `UnityAds` is ready to show an ad. After this callback you can call the `UnityAds` `show:` method for this placement. | |||||
* Note that sometimes placement might no longer be ready due to exceptional reasons. These situations will give no new callbacks. | |||||
* | |||||
* @warning To avoid error situations, it is always best to check `isReady` method status before calling show. | |||||
* @param placementId The ID of the placement that is ready to show, as defined in Unity Ads admin tools. | |||||
*/ | |||||
- (void)unityAdsReady:(NSString *)placementId; | |||||
/** | |||||
* Called when `UnityAds` encounters an error. All errors will be logged but this method can be used as an additional debugging aid. This callback can also be used for collecting statistics from different error scenarios. | |||||
* | |||||
* @param error A `UnityAdsError` error enum value indicating the type of error encountered. | |||||
* @param message A human readable string indicating the type of error encountered. | |||||
*/ | |||||
- (void)unityAdsDidError:(UnityAdsError)error withMessage:(NSString *)message; | |||||
/** | |||||
* Called on a successful start of advertisement after calling the `UnityAds` `show:` method. | |||||
* | |||||
* @warning If there are errors in starting the advertisement, this method may never be called. Unity Ads will directly call `unityAdsDidFinish:withFinishState:` with error status. | |||||
* | |||||
* @param placementId The ID of the placement that has started, as defined in Unity Ads admin tools. | |||||
*/ | |||||
- (void)unityAdsDidStart:(NSString *)placementId; | |||||
/** | |||||
* Called after the ad has closed. | |||||
* | |||||
* @param placementId The ID of the placement that has finished, as defined in Unity Ads admin tools. | |||||
* @param state An enum value indicating the finish state of the ad. Possible values are `Completed`, `Skipped`, and `Error`. | |||||
*/ | |||||
- (void)unityAdsDidFinish:(NSString *)placementId | |||||
withFinishState:(UnityAdsFinishState)state; | |||||
@end | |||||
/** | |||||
* `UnityAds` is a static class with methods for preparing and showing ads. | |||||
* | |||||
* @warning In order to ensure expected behaviour, the delegate must always be set. | |||||
*/ | |||||
@interface UnityAds : NSObject | |||||
- (instancetype)init NS_UNAVAILABLE; | |||||
+ (instancetype)initialize NS_UNAVAILABLE; | |||||
/** | |||||
* Initializes UnityAds. UnityAds should be initialized when app starts. | |||||
* | |||||
* @param gameId Unique identifier for a game, given by Unity Ads admin tools or Unity editor. | |||||
* @param delegate delegate for UnityAdsDelegate callbacks | |||||
*/ | |||||
+ (void)initialize:(NSString *)gameId | |||||
delegate:(nullable id<UnityAdsDelegate>)delegate; | |||||
/** | |||||
* Initializes UnityAds. UnityAds should be initialized when app starts. | |||||
* | |||||
* @param gameId Unique identifier for a game, given by Unity Ads admin tools or Unity editor. | |||||
* @param delegate delegate for UnityAdsDelegate callbacks | |||||
* @param testMode Set this flag to `YES` to indicate test mode and show only test ads. | |||||
*/ | |||||
+ (void)initialize:(NSString *)gameId | |||||
delegate:(nullable id<UnityAdsDelegate>)delegate | |||||
testMode:(BOOL)testMode; | |||||
/** | |||||
* Show an ad using the defaul placement. | |||||
* | |||||
* @param viewController The `UIViewController` that is to present the ad view controller. | |||||
*/ | |||||
+ (void)show:(UIViewController *)viewController; | |||||
/** | |||||
* Show an ad using the provided placement ID. | |||||
* | |||||
* @param viewController The `UIViewController` that is to present the ad view controller. | |||||
* @param placementId The placement ID, as defined in Unity Ads admin tools. | |||||
*/ | |||||
+ (void)show:(UIViewController *)viewController placementId:(NSString *)placementId; | |||||
/** | |||||
* Provides the currently assigned `UnityAdsDelegate`. | |||||
* | |||||
* @return The current `UnityAdsDelegate`. | |||||
*/ | |||||
+ (id<UnityAdsDelegate>)getDelegate; | |||||
/** | |||||
* Allows the delegate to be reassigned after UnityAds has already been initialized. | |||||
* | |||||
* @param delegate The new `UnityAdsDelegate' for UnityAds to send callbacks to. | |||||
*/ | |||||
+ (void)setDelegate:(id<UnityAdsDelegate>)delegate; | |||||
/** | |||||
* Get the current debug status of `UnityAds`. | |||||
* | |||||
* @return If `YES`, `UnityAds` will provide verbose logs. | |||||
*/ | |||||
+ (BOOL)getDebugMode; | |||||
/** | |||||
* Set the logging verbosity of `UnityAds`. Debug mode indicates verbose logging. | |||||
* @warning Does not relate to test mode for ad content. | |||||
* @param enableDebugMode `YES` for verbose logging. | |||||
*/ | |||||
+ (void)setDebugMode:(BOOL)enableDebugMode; | |||||
/** | |||||
* Check to see if the current device supports using Unity Ads. | |||||
* | |||||
* @return If `NO`, the current device cannot initialize `UnityAds` or show ads. | |||||
*/ | |||||
+ (BOOL)isSupported; | |||||
/** | |||||
* Check if the default placement is ready to show an ad. | |||||
* | |||||
* @return If `YES`, the default placement is ready to show an ad. | |||||
*/ | |||||
+ (BOOL)isReady; | |||||
/** | |||||
* Check if a particular placement is ready to show an ad. | |||||
* | |||||
* @param placementId The placement ID being checked. | |||||
* | |||||
* @return If `YES`, the placement is ready to show an ad. | |||||
*/ | |||||
+ (BOOL)isReady:(NSString *)placementId; | |||||
/** | |||||
* Check the current state of the default placement. | |||||
* | |||||
* @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors. | |||||
*/ | |||||
+ (UnityAdsPlacementState)getPlacementState; | |||||
/** | |||||
* Check the current state of a placement. | |||||
* | |||||
* @param placementId The placement ID, as defined in Unity Ads admin tools. | |||||
* | |||||
* @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors. | |||||
*/ | |||||
+ (UnityAdsPlacementState)getPlacementState:(NSString *)placementId; | |||||
/** | |||||
* Check the version of this `UnityAds` SDK | |||||
* | |||||
* @return String representing the current version name. | |||||
*/ | |||||
+ (NSString *)getVersion; | |||||
/** | |||||
* Check that `UnityAds` has been initialized. This might be useful for debugging initialization problems. | |||||
* | |||||
* @return If `YES`, Unity Ads has been successfully initialized. | |||||
*/ | |||||
+ (BOOL)isInitialized; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
@ -0,0 +1,21 @@ | |||||
#import "UnityAds.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@protocol UnityAdsExtendedDelegate <UnityAdsDelegate> | |||||
/** | |||||
* Called when a click event happens. | |||||
* | |||||
* @param placementId The ID of the placement that was clicked. | |||||
*/ | |||||
- (void)unityAdsDidClick:(NSString *)placementId; | |||||
/** | |||||
* Called when a placement changes state. | |||||
* | |||||
* @param placementId The ID of the placement that changed state. | |||||
* @param oldState The state before the change. | |||||
* @param newState The state after the change. | |||||
*/ | |||||
- (void)unityAdsPlacementStateChanged:(NSString *)placementId oldState:(UnityAdsPlacementState)oldState newState:(UnityAdsPlacementState)newState; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
@ -0,0 +1,11 @@ | |||||
#import "UnityAds.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@protocol UnityAdsUnityDelegate <UnityAdsDelegate> | |||||
/** | |||||
* Called when an in-app purchase is initiated from an ad. | |||||
* | |||||
* @param eventString The string provided via the ad. | |||||
*/ | |||||
- (void)unityAdsDidInitiatePurchase:(NSString *)eventString; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
@ -0,0 +1,7 @@ | |||||
framework module UnityAds { | |||||
umbrella header "UnityAds.h" | |||||
header "UnityAdsExtended.h" | |||||
export * | |||||
module * { export * } | |||||
} |
@ -0,0 +1,32 @@ | |||||
**Unity Companion Package License v1.0 ("_License_")** | |||||
Copyright © 2017 Unity Technologies ApS ("**_Unity_**") | |||||
Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions: | |||||
1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted. | |||||
1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. | |||||
1. *Ownership & Grant Back to You*. | |||||
3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content. | |||||
3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. | |||||
3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License. | |||||
1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand). | |||||
1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms. | |||||
1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. | |||||
1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License. | |||||
1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. | |||||
1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. | |||||
@ -0,0 +1,4 @@ | |||||
# Unity Ads | |||||
Implementation of the Unity Ads API. | |||||
@ -0,0 +1,17 @@ | |||||
{ | |||||
"category": "AssetStore/Unity", | |||||
"description": "Unity Ads is a video ad network for iOS and Android that allows you to quickly and effectively monetize your games.", | |||||
"gitHead": "0d2114387a99011be685886f8ea902242e323e70", | |||||
"keywords": [ | |||||
"ads", | |||||
"unity" | |||||
], | |||||
"name": "com.unity.ads", | |||||
"repoPackagePath": "build/install/com.unity.ads", | |||||
"repository": { | |||||
"type": "git", | |||||
"url": "ssh://[email protected]/Unity-Technologies/com.unity.ads.git" | |||||
}, | |||||
"unity": "2017.4", | |||||
"version": "2.0.8" | |||||
} |
@ -0,0 +1,57 @@ | |||||
## [3.2.2] - 2018-11-02 | |||||
- Removed FetchOptOutStatus and Initialize call. All application of opt out | |||||
status will be handled by the engine. The Analytics/Data Privacy package still | |||||
provides FetchPrivacyUrl to provide a URL from which to opt out. | |||||
## [3.2.1] - 2018-10-25 | |||||
- Move editor and playmode tests to be packed within the package. | |||||
## [3.2.0] - 2018-10-11 | |||||
- Prevent double-registration of standard events. | |||||
- Fixed build error on platforms that don't support analytics. | |||||
- Update package docs so they can be built and published and be accessible from | |||||
the Package Manager UI. | |||||
- Fixed a crash occurring on iOS device when the device has cellular capability | |||||
but was never configured with any carrier service. | |||||
- Fixed an android build failure occurring due to conflicting install referrer | |||||
AIDL files. | |||||
## [3.1.1] - 2018-08-21 | |||||
- Add DataPrivacy plugin into package. | |||||
- Fixed an issue where Android project build would fail when proguard is enabled | |||||
in publishing settings. | |||||
- Fixed an issue where iOS product archive would fail because bitcode was not | |||||
enabled. | |||||
## [3.0.9] - 2018-07-31 | |||||
- Fixing issue with NullReferenceException during editor playmode | |||||
## [3.0.8] - 2018-07-26 | |||||
- Fixing linking issue when building Android il2cpp | |||||
## [3.0.7] - 2018-07-10 | |||||
- Adding in continuous events for signal strength, battery level, battery | |||||
temperature, memory usage, available storage | |||||
## [3.0.6] - 2018-06-01 | |||||
- Reorganizing platformInfo event around session start/resume/pause | |||||
## [3.0.5] - 2018-05-29 | |||||
- Fixing cellular signal strength incorrect array format | |||||
## [3.0.4] - 2018-05-04 | |||||
- Breaking change to only work with 2018.2 (change name of whitelisted dll's in | |||||
engine to conform to PackageManager standard) | |||||
- Changed name of old Analytics dll to the Unity.Analytics.Tracker.dll and | |||||
replaced the old one with the new platform information package. | |||||
- Changed naming convention of dlls to the PackageManager Standard: | |||||
Unity.Analytics.dll, Unity.Analytics.Editor.dll, Unity.Analytics.Tracker.dll, | |||||
Unity.Analytics.StandardEvents.dll. | |||||
- Deprecated old Analytics tracker and removed it from the add component menu. | |||||
- Merged Standardevents package into Analytics package. | |||||
## [2.0.14] - 2018-02-08 | |||||
- Added proper documentation and better description text. | |||||
## [2.0.5] - | |||||
- Update analytics tracker to 2.0 (1.0 version is still available) |
@ -0,0 +1,4 @@ | |||||
using System.Runtime.CompilerServices; | |||||
[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.Tests")] | |||||
[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.WebRequest.Tests")] |
@ -0,0 +1,132 @@ | |||||
#if ENABLE_CLOUD_SERVICES_ANALYTICS | |||||
using System; | |||||
using System.Text; | |||||
using UnityEngine.Networking; | |||||
namespace UnityEngine.Analytics | |||||
{ | |||||
public class DataPrivacy | |||||
{ | |||||
[Serializable] | |||||
internal struct UserPostData | |||||
{ | |||||
public string appid; | |||||
public string userid; | |||||
public long sessionid; | |||||
public string platform; | |||||
public UInt32 platformid; | |||||
public string sdk_ver; | |||||
public bool debug_device; | |||||
public string deviceid; | |||||
public string plugin_ver; | |||||
} | |||||
[Serializable] | |||||
internal struct TokenData | |||||
{ | |||||
public string url; | |||||
public string token; | |||||
} | |||||
const string kVersion = "3.0.0"; | |||||
const string kVersionString = "DataPrivacyPackage/" + kVersion; | |||||
internal const string kBaseUrl = "https://data-optout-service.uca.cloud.unity3d.com"; | |||||
const string kTokenUrl = kBaseUrl + "/token"; | |||||
internal static UserPostData GetUserData() | |||||
{ | |||||
var postData = new UserPostData | |||||
{ | |||||
appid = Application.cloudProjectId, | |||||
userid = AnalyticsSessionInfo.userId, | |||||
sessionid = AnalyticsSessionInfo.sessionId, | |||||
platform = Application.platform.ToString(), | |||||
platformid = (UInt32)Application.platform, | |||||
sdk_ver = Application.unityVersion, | |||||
debug_device = Debug.isDebugBuild, | |||||
deviceid = SystemInfo.deviceUniqueIdentifier, | |||||
plugin_ver = kVersionString | |||||
}; | |||||
return postData; | |||||
} | |||||
static string GetUserAgent() | |||||
{ | |||||
var message = "UnityPlayer/{0} ({1}/{2}{3} {4})"; | |||||
return String.Format(message, | |||||
Application.unityVersion, | |||||
Application.platform.ToString(), | |||||
(UInt32)Application.platform, | |||||
Debug.isDebugBuild ? "-dev" : "", | |||||
kVersionString); | |||||
} | |||||
static String getErrorString(UnityWebRequest www) | |||||
{ | |||||
var json = www.downloadHandler.text; | |||||
var error = www.error; | |||||
if (String.IsNullOrEmpty(error)) | |||||
{ | |||||
// 5.5 sometimes fails to parse an error response, and the only clue will be | |||||
// in www.responseHeadersString, which isn't accessible. | |||||
error = "Empty response"; | |||||
} | |||||
if (!String.IsNullOrEmpty(json)) | |||||
{ | |||||
error += ": " + json; | |||||
} | |||||
return error; | |||||
} | |||||
public static void FetchPrivacyUrl(Action<string> success, Action<string> failure = null) | |||||
{ | |||||
string postJson = JsonUtility.ToJson(GetUserData()); | |||||
byte[] bytes = Encoding.UTF8.GetBytes(postJson); | |||||
var uploadHandler = new UploadHandlerRaw(bytes); | |||||
uploadHandler.contentType = "application/json"; | |||||
var www = UnityWebRequest.Post(kTokenUrl, ""); | |||||
www.uploadHandler = uploadHandler; | |||||
#if !UNITY_WEBGL | |||||
www.SetRequestHeader("User-Agent", GetUserAgent()); | |||||
#endif | |||||
var async = www.SendWebRequest(); | |||||
async.completed += (AsyncOperation async2) => | |||||
{ | |||||
var json = www.downloadHandler.text; | |||||
if (!String.IsNullOrEmpty(www.error) || String.IsNullOrEmpty(json)) | |||||
{ | |||||
var error = getErrorString(www); | |||||
if (failure != null) | |||||
{ | |||||
failure(error); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
TokenData tokenData; | |||||
tokenData.url = ""; // Just to quell "possibly unassigned" error | |||||
try | |||||
{ | |||||
tokenData = JsonUtility.FromJson<TokenData>(json); | |||||
} | |||||
catch (Exception e) | |||||
{ | |||||
if (failure != null) | |||||
{ | |||||
failure(e.ToString()); | |||||
} | |||||
} | |||||
success(tokenData.url); | |||||
} | |||||
}; | |||||
} | |||||
} | |||||
} | |||||
#endif //ENABLE_CLOUD_SERVICES_ANALYTICS |
@ -0,0 +1,52 @@ | |||||
#if ENABLE_CLOUD_SERVICES_ANALYTICS | |||||
using System; | |||||
using UnityEngine.UI; | |||||
namespace UnityEngine.Analytics | |||||
{ | |||||
public class DataPrivacyButton : Button | |||||
{ | |||||
bool urlOpened = false; | |||||
DataPrivacyButton() | |||||
{ | |||||
onClick.AddListener(OpenDataPrivacyUrl); | |||||
} | |||||
void OnFailure(string reason) | |||||
{ | |||||
interactable = true; | |||||
Debug.LogWarning(String.Format("Failed to get data privacy url: {0}", reason)); | |||||
} | |||||
void OpenUrl(string url) | |||||
{ | |||||
interactable = true; | |||||
urlOpened = true; | |||||
#if UNITY_WEBGL && !UNITY_EDITOR | |||||
Application.ExternalEval("window.open(\"" + url + "\",\"_blank\")"); | |||||
#else | |||||
Application.OpenURL(url); | |||||
#endif | |||||
} | |||||
void OpenDataPrivacyUrl() | |||||
{ | |||||
interactable = false; | |||||
DataPrivacy.FetchPrivacyUrl(OpenUrl, OnFailure); | |||||
} | |||||
void OnApplicationFocus(bool hasFocus) | |||||
{ | |||||
if (hasFocus && urlOpened) | |||||
{ | |||||
urlOpened = false; | |||||
// Immediately refresh the remote config so new privacy settings can be enabled | |||||
// as soon as possible if they have changed. | |||||
RemoteSettings.ForceUpdate(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
#endif //ENABLE_CLOUD_SERVICES_ANALYTICS |
@ -0,0 +1,246 @@ | |||||
%YAML 1.1 | |||||
%TAG !u! tag:unity3d.com,2011: | |||||
--- !u!1 &109074 | |||||
GameObject: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
serializedVersion: 4 | |||||
m_Component: | |||||
- 224: {fileID: 22409074} | |||||
- 222: {fileID: 22209074} | |||||
- 114: {fileID: 11409072} | |||||
m_Layer: 5 | |||||
m_Name: Image | |||||
m_TagString: Untagged | |||||
m_Icon: {fileID: 0} | |||||
m_NavMeshLayer: 0 | |||||
m_StaticEditorFlags: 0 | |||||
m_IsActive: 1 | |||||
--- !u!1 &109076 | |||||
GameObject: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
serializedVersion: 4 | |||||
m_Component: | |||||
- 224: {fileID: 22409076} | |||||
- 222: {fileID: 22209076} | |||||
- 114: {fileID: 11409074} | |||||
- 114: {fileID: 11409076} | |||||
m_Layer: 5 | |||||
m_Name: DataPrivacyButton | |||||
m_TagString: Untagged | |||||
m_Icon: {fileID: 0} | |||||
m_NavMeshLayer: 0 | |||||
m_StaticEditorFlags: 0 | |||||
m_IsActive: 1 | |||||
--- !u!1 &109078 | |||||
GameObject: | |||||
m_ObjectHideFlags: 0 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
serializedVersion: 4 | |||||
m_Component: | |||||
- 224: {fileID: 22409078} | |||||
- 222: {fileID: 22209078} | |||||
- 114: {fileID: 11409078} | |||||
m_Layer: 0 | |||||
m_Name: Text | |||||
m_TagString: Untagged | |||||
m_Icon: {fileID: 0} | |||||
m_NavMeshLayer: 0 | |||||
m_StaticEditorFlags: 0 | |||||
m_IsActive: 1 | |||||
--- !u!114 &11409072 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109074} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Material: {fileID: 0} | |||||
m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1} | |||||
m_Sprite: {fileID: 21300000, guid: 599a5fd92bab81a4ab02e52d0b1b1c60, type: 3} | |||||
m_Type: 0 | |||||
m_PreserveAspect: 0 | |||||
m_FillCenter: 1 | |||||
m_FillMethod: 4 | |||||
m_FillAmount: 1 | |||||
m_FillClockwise: 1 | |||||
m_FillOrigin: 0 | |||||
--- !u!114 &11409074 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109076} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Material: {fileID: 0} | |||||
m_Color: {r: 1, g: 1, b: 1, a: 1} | |||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} | |||||
m_Type: 1 | |||||
m_PreserveAspect: 0 | |||||
m_FillCenter: 1 | |||||
m_FillMethod: 4 | |||||
m_FillAmount: 1 | |||||
m_FillClockwise: 1 | |||||
m_FillOrigin: 0 | |||||
--- !u!114 &11409076 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109076} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: 11500000, guid: a5ebb11c6fc3a2f498bd89593f7744aa, type: 3} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Navigation: | |||||
m_Mode: 3 | |||||
m_SelectOnUp: {fileID: 0} | |||||
m_SelectOnDown: {fileID: 0} | |||||
m_SelectOnLeft: {fileID: 0} | |||||
m_SelectOnRight: {fileID: 0} | |||||
m_Transition: 1 | |||||
m_Colors: | |||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1} | |||||
m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1} | |||||
m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1} | |||||
m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814} | |||||
m_ColorMultiplier: 1 | |||||
m_FadeDuration: .100000001 | |||||
m_SpriteState: | |||||
m_HighlightedSprite: {fileID: 0} | |||||
m_PressedSprite: {fileID: 0} | |||||
m_DisabledSprite: {fileID: 0} | |||||
m_AnimationTriggers: | |||||
m_NormalTrigger: Normal | |||||
m_HighlightedTrigger: Highlighted | |||||
m_PressedTrigger: Pressed | |||||
m_DisabledTrigger: Disabled | |||||
m_Interactable: 1 | |||||
m_TargetGraphic: {fileID: 11409074} | |||||
m_OnClick: | |||||
m_PersistentCalls: | |||||
m_Calls: [] | |||||
m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, | |||||
Culture=neutral, PublicKeyToken=null | |||||
--- !u!114 &11409078 | |||||
MonoBehaviour: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109078} | |||||
m_Enabled: 1 | |||||
m_EditorHideFlags: 0 | |||||
m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} | |||||
m_Name: | |||||
m_EditorClassIdentifier: | |||||
m_Material: {fileID: 0} | |||||
m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1} | |||||
m_FontData: | |||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} | |||||
m_FontSize: 14 | |||||
m_FontStyle: 0 | |||||
m_BestFit: 0 | |||||
m_MinSize: 10 | |||||
m_MaxSize: 40 | |||||
m_Alignment: 4 | |||||
m_RichText: 0 | |||||
m_HorizontalOverflow: 0 | |||||
m_VerticalOverflow: 0 | |||||
m_LineSpacing: 1 | |||||
m_Text: Open Data Privacy Page | |||||
--- !u!222 &22209074 | |||||
CanvasRenderer: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109074} | |||||
--- !u!222 &22209076 | |||||
CanvasRenderer: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109076} | |||||
--- !u!222 &22209078 | |||||
CanvasRenderer: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109078} | |||||
--- !u!224 &22409074 | |||||
RectTransform: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109074} | |||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |||||
m_LocalPosition: {x: 0, y: 0, z: 0} | |||||
m_LocalScale: {x: 1, y: 1, z: 1} | |||||
m_Children: [] | |||||
m_Father: {fileID: 22409076} | |||||
m_RootOrder: 1 | |||||
m_AnchorMin: {x: 1, y: .5} | |||||
m_AnchorMax: {x: 1, y: .5} | |||||
m_AnchoredPosition: {x: -8, y: 0} | |||||
m_SizeDelta: {x: 20, y: 20} | |||||
m_Pivot: {x: 1, y: .5} | |||||
--- !u!224 &22409076 | |||||
RectTransform: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109076} | |||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |||||
m_LocalPosition: {x: 0, y: 0, z: 0} | |||||
m_LocalScale: {x: 1, y: 1, z: 1} | |||||
m_Children: | |||||
- {fileID: 22409078} | |||||
- {fileID: 22409074} | |||||
m_Father: {fileID: 0} | |||||
m_RootOrder: 0 | |||||
m_AnchorMin: {x: .5, y: .5} | |||||
m_AnchorMax: {x: .5, y: .5} | |||||
m_AnchoredPosition: {x: 0, y: 0} | |||||
m_SizeDelta: {x: 200, y: 30} | |||||
m_Pivot: {x: .5, y: .5} | |||||
--- !u!224 &22409078 | |||||
RectTransform: | |||||
m_ObjectHideFlags: 1 | |||||
m_PrefabParentObject: {fileID: 0} | |||||
m_PrefabInternal: {fileID: 100100000} | |||||
m_GameObject: {fileID: 109078} | |||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |||||
m_LocalPosition: {x: 0, y: 0, z: 0} | |||||
m_LocalScale: {x: 1, y: 1, z: 1} | |||||
m_Children: [] | |||||
m_Father: {fileID: 22409076} | |||||
m_RootOrder: 0 | |||||
m_AnchorMin: {x: 0, y: 0} | |||||
m_AnchorMax: {x: .850000024, y: 1} | |||||
m_AnchoredPosition: {x: 8, y: 0} | |||||
m_SizeDelta: {x: -12, y: 0} | |||||
m_Pivot: {x: 0, y: .5} | |||||
--- !u!1001 &100100000 | |||||
Prefab: | |||||
m_ObjectHideFlags: 1 | |||||
serializedVersion: 2 | |||||
m_Modification: | |||||
m_TransformParent: {fileID: 0} | |||||
m_Modifications: [] | |||||
m_RemovedComponents: [] | |||||
m_ParentPrefab: {fileID: 0} | |||||
m_RootGameObject: {fileID: 109076} | |||||
m_IsPrefabParent: 1 | |||||
m_IsExploded: 1 |
@ -0,0 +1,8 @@ | |||||
{ | |||||
"name": "Unity.Analytics.DataPrivacy", | |||||
"references": [], | |||||
"optionalUnityReferences": [], | |||||
"includePlatforms": [], | |||||
"excludePlatforms": [], | |||||
"allowUnsafeCode": false | |||||
} |
@ -0,0 +1,32 @@ | |||||
**Unity Companion Package License v1.0 ("_License_")** | |||||
Copyright © 2017 Unity Technologies ApS ("**_Unity_**") | |||||
Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions: | |||||
1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted. | |||||
1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. | |||||
1. *Ownership & Grant Back to You*. | |||||
3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content. | |||||
3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. | |||||
3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License. | |||||
1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand). | |||||
1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms. | |||||
1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. | |||||
1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License. | |||||
1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. | |||||
1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. | |||||
@ -0,0 +1,14 @@ | |||||
Unity Analytics: Tracker | |||||
------------------------------ | |||||
Please visit the following URL to see documentation for the Analytics Event Tracker. | |||||
https://docs.google.com/document/d/1glh4zEk0KQ_FhOgk95H-VOubcdzrVGyu5BYCmhFQCh0/edit# | |||||
Please note, the documentation at this URL is considered a "living" document and subject to change. | |||||
Unity Analytics: Standard Events | |||||
------------------------------ | |||||
Track player behavior specific to your game | |||||
Standard Events are a set of curated custom events focused on player experience. |
@ -0,0 +1,3 @@ | |||||
{ | |||||
"createSeparatePackage": false | |||||
} |
@ -0,0 +1,48 @@ | |||||
using System; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AchievementStep_StepIndexTest( | |||||
[Values(-1, 0, 1)] int stepIndex | |||||
) | |||||
{ | |||||
var achievementId = "unit_tester"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AchievementStep_AchievementIdTest( | |||||
[Values("unit_tester", "", null)] string achievementId | |||||
) | |||||
{ | |||||
var stepIndex = 0; | |||||
if (string.IsNullOrEmpty(achievementId)) | |||||
{ | |||||
Assert.Throws<ArgumentException>(() => AnalyticsEvent.AchievementStep(stepIndex, achievementId)); | |||||
} | |||||
else | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
[Test] | |||||
public void AchievementStep_CustomDataTest() | |||||
{ | |||||
var stepIndex = 0; | |||||
var achievementId = "unit_tester"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,34 @@ | |||||
using System; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AchievementUnlocked_AchievementIdTest( | |||||
[Values("unit_tester", "", null)] string achievementId | |||||
) | |||||
{ | |||||
if (string.IsNullOrEmpty(achievementId)) | |||||
{ | |||||
Assert.Throws<ArgumentException>(() => AnalyticsEvent.AchievementUnlocked(achievementId)); | |||||
} | |||||
else | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
[Test] | |||||
public void AchievementUnlocked_CustomDataTest() | |||||
{ | |||||
var achievementId = "unit_tester"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,62 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AdComplete_RewardedTest( | |||||
[Values(true, false)] bool rewarded | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdComplete_NetworkStringTest( | |||||
[Values("unityads", "", null)] string network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdComplete_NetworkEnumTest( | |||||
[Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdComplete_PlacementIdTest( | |||||
[Values("rewardedVideo", "", null)] string placementId | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdComplete_CustomDataTest() | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
var placementId = "rewardedVideo"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,62 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AdOffer_RewardedTest( | |||||
[Values(true, false)] bool rewarded | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdOffer_NetworkStringTest( | |||||
[Values("unityads", "", null)] string network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdOffer_NetworkEnumTest( | |||||
[Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdOffer_PlacementIdTest( | |||||
[Values("rewardedVideo", "", null)] string placementId | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdOffer_CustomDataTest() | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
var placementId = "rewardedVideo"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,62 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AdSkip_RewardedTest( | |||||
[Values(true, false)] bool rewarded | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdSkip_NetworkStringTest( | |||||
[Values("unityads", "", null)] string network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdSkip_NetworkEnumTest( | |||||
[Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdSkip_PlacementIdTest( | |||||
[Values("rewardedVideo", "", null)] string placementId | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdSkip_CustomDataTest() | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
var placementId = "rewardedVideo"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,62 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void AdStart_RewardedTest( | |||||
[Values(true, false)] bool rewarded | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdStart_NetworkStringTest( | |||||
[Values("unityads", "", null)] string network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdStart_NetworkEnumTest( | |||||
[Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdStart_PlacementIdTest( | |||||
[Values("rewardedVideo", "", null)] string placementId | |||||
) | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void AdStart_CustomDataTest() | |||||
{ | |||||
var rewarded = true; | |||||
var network = AdvertisingNetwork.UnityAds; | |||||
var placementId = "rewardedVideo"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,115 @@ | |||||
#pragma warning disable 0612, 0618 | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
[TestFixture, Category("Standard Event SDK")] | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
readonly Dictionary<string, object> m_CustomData = new Dictionary<string, object>(); | |||||
AnalyticsResult m_Result = AnalyticsResult.Ok; | |||||
[SetUp] | |||||
public void TestCaseSetUp() | |||||
{ | |||||
m_Result = AnalyticsResult.Ok; | |||||
m_CustomData.Clear(); | |||||
m_CustomData.Add("custom_param", "test"); | |||||
} | |||||
[Test] | |||||
public void SdkVersion_FormatTest() | |||||
{ | |||||
int major, minor, patch; | |||||
var versions = AnalyticsEvent.sdkVersion.Split('.'); | |||||
Assert.AreEqual(3, versions.Length, "Number of integer fields in version format"); | |||||
Assert.IsTrue(int.TryParse(versions[0], out major), "Major version is an integer"); | |||||
Assert.IsTrue(int.TryParse(versions[1], out minor), "Minor version is an integer"); | |||||
Assert.IsTrue(int.TryParse(versions[2], out patch), "Patch version is an integer"); | |||||
Assert.LessOrEqual(0, major, "Major version"); | |||||
Assert.LessOrEqual(0, minor, "Minor version"); | |||||
Assert.LessOrEqual(0, patch, "Patch version"); | |||||
} | |||||
[Test] | |||||
public void Custom_EventNameTest( | |||||
[Values("custom_event", "", null)] string eventName | |||||
) | |||||
{ | |||||
if (string.IsNullOrEmpty(eventName)) | |||||
{ | |||||
Assert.Throws<ArgumentException>(() => m_Result = AnalyticsEvent.Custom(eventName)); | |||||
} | |||||
else | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
[Test] | |||||
public void Custom_EventDataTest() | |||||
{ | |||||
var eventName = "custom_event"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void Custom_RegisterUnregisterUnnamedTest() | |||||
{ | |||||
Action<IDictionary<string, object>> myAction = | |||||
eventData => eventData.Add("my_key", "my_value"); | |||||
AnalyticsEvent.Register(myAction); // Registering for a named AnalyticsEvent | |||||
var eventName = "custom_event"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData)); | |||||
EvaluateRegisteredCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
AnalyticsEvent.Unregister(myAction); | |||||
} | |||||
/// Normal. Unregistered. | |||||
public static void EvaluateCustomData(IDictionary<string, object> customData) | |||||
{ | |||||
Assert.AreEqual(1, customData.Count, "Custom param count"); | |||||
} | |||||
/// For Registered case. | |||||
public static void EvaluateRegisteredCustomData(IDictionary<string, object> customData) | |||||
{ | |||||
Assert.AreEqual(2, customData.Count, "Custom param count"); | |||||
} | |||||
public static void EvaluateAnalyticsResult(AnalyticsResult result) | |||||
{ | |||||
switch (result) | |||||
{ | |||||
case AnalyticsResult.Ok: | |||||
break; | |||||
case AnalyticsResult.InvalidData: | |||||
Assert.Fail("Event data is invalid."); | |||||
break; | |||||
case AnalyticsResult.TooManyItems: | |||||
Assert.Fail("Event data consists of too many parameters."); | |||||
break; | |||||
default: | |||||
Debug.LogFormat("A result of {0} is passable for the purpose of this test.", result); | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,22 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void ChatMessageSent_NoArgsTest() | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent()); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void ChatMessageSent_CustomDataTest() | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent(m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,34 @@ | |||||
using System; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void CutsceneSkip_CutsceneNameTest( | |||||
[Values("test_cutscene", "", null)] string name | |||||
) | |||||
{ | |||||
if (string.IsNullOrEmpty(name)) | |||||
{ | |||||
Assert.Throws<ArgumentException>(() => AnalyticsEvent.CutsceneSkip(name)); | |||||
} | |||||
else | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
[Test] | |||||
public void CutsceneSkip_CustomDataTest() | |||||
{ | |||||
var name = "test_cutscene"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,34 @@ | |||||
using System; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void CutsceneStart_CutsceneNameTest( | |||||
[Values("test_cutscene", "", null)] string name | |||||
) | |||||
{ | |||||
if (string.IsNullOrEmpty(name)) | |||||
{ | |||||
Assert.Throws<ArgumentException>(() => AnalyticsEvent.CutsceneStart(name)); | |||||
} | |||||
else | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
[Test] | |||||
public void CutsceneStart_CustomDataTest() | |||||
{ | |||||
var name = "test_cutscene"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,33 @@ | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void FirstInteraction_NoArgsTest() | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction()); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void FirstInteraction_ActionIdTest( | |||||
[Values("test_user_action", "", null)] string actionId | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void FirstInteraction_CustomDataTest() | |||||
{ | |||||
var actionId = "test_user_action"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,58 @@ | |||||
using System; | |||||
using NUnit.Framework; | |||||
namespace UnityEngine.Analytics.Tests | |||||
{ | |||||
public partial class AnalyticsEventTests | |||||
{ | |||||
[Test] | |||||
public void GameOver_NoArgsTest() | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver()); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void GameOver_LevelIndexTest( | |||||
[Values(-1, 0, 1)] int levelIndex | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void GameOver_LevelNameTest( | |||||
[Values("test_level", "", null)] string levelName | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void GameOver_LevelIndex_LevelNameTest( | |||||
[Values(0)] int levelIndex, | |||||
[Values("test_level", "", null)] string levelName | |||||
) | |||||
{ | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName)); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
[Test] | |||||
public void GameOver_CustomDataTest() | |||||
{ | |||||
var levelIndex = 0; | |||||
var levelName = "test_level"; | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName, m_CustomData)); | |||||
EvaluateCustomData(m_CustomData); | |||||
EvaluateAnalyticsResult(m_Result); | |||||
} | |||||
} | |||||
} |