From 93d16fb3da331d076e09b037f105928a1c132988 Mon Sep 17 00:00:00 2001 From: wsycarlos Date: Tue, 28 Apr 2026 17:03:25 +0800 Subject: [PATCH] Version 0.1.0 of Quality Tuner --- .gitignore | 106 ++ .../com.bywaystudios.qualitytuner/Editor.meta | 8 + .../Editor/Byway.Quality.Editor.asmdef | 18 + .../Editor/Byway.Quality.Editor.asmdef.meta | 7 + .../Editor/GpuSeriesEnumerationDrawer.cs | 58 ++ .../Editor/GpuSeriesEnumerationDrawer.cs.meta | 11 + ...ctableSerializeReferenceAttributeDrawer.cs | 108 ++ ...eSerializeReferenceAttributeDrawer.cs.meta | 11 + .../Runtime.meta | 8 + .../Runtime/Byway.Quality.asmdef | 14 + .../Runtime/Byway.Quality.asmdef.meta | 7 + .../Runtime/BywayQualityRuleData.cs | 18 + .../Runtime/BywayQualityRuleData.cs.meta | 11 + .../Runtime/GpuSeriesEnums.cs | 335 ++++++ .../Runtime/GpuSeriesEnums.cs.meta | 11 + .../Runtime/HardwareInfo.Android.cs | 196 ++++ .../Runtime/HardwareInfo.Android.cs.meta | 11 + .../Runtime/HardwareInfo.cs | 98 ++ .../Runtime/HardwareInfo.cs.meta | 11 + .../Runtime/HardwareInfo.iOS.cs | 48 + .../Runtime/HardwareInfo.iOS.cs.meta | 11 + .../Runtime/RuleBasedQualitySelector.cs | 53 + .../Runtime/RuleBasedQualitySelector.cs.meta | 11 + .../Runtime/RuleMatcherBase.cs | 150 +++ .../Runtime/RuleMatcherBase.cs.meta | 11 + .../SelectableSerializeReferenceAttribute.cs | 10 + ...ectableSerializeReferenceAttribute.cs.meta | 11 + .../package.json | 11 + .../package.json.meta | 7 + Packages/manifest.json | 48 + Packages/packages-lock.json | 375 +++++++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 34 + ProjectSettings/EditorBuildSettings.asset | 8 + ProjectSettings/EditorSettings.asset | 30 + ProjectSettings/GraphicsSettings.asset | 63 ++ ProjectSettings/InputManager.asset | 295 ++++++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/NavMeshAreas.asset | 91 ++ ProjectSettings/PackageManagerSettings.asset | 35 + .../Settings.json | 5 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 961 ++++++++++++++++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 234 +++++ ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 36 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 53 files changed, 3792 insertions(+) create mode 100644 .gitignore create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs create mode 100644 Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs.meta create mode 100644 Packages/com.bywaystudios.qualitytuner/package.json create mode 100644 Packages/com.bywaystudios.qualitytuner/package.json.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff03d40 --- /dev/null +++ b/.gitignore @@ -0,0 +1,106 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +.utmp/ +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ +*.log + +# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control. +*.blend1 +*.blend1.meta + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* +# Jetbrains Rider personal-layer settings +*.DotSettings.user + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Mono auto generated files +mono_crash.* + +# Builds +*.apk +*.aab +*.unitypackage +*.unitypackage.meta + +# Crashlytics generated file +crashlytics-build.properties + +# TestRunner generated files +InitTestScene*.unity* + +# Addressables default ignores, before user customizations +/ServerData +/[Aa]ssets/StreamingAssets/aa* +/[Aa]ssets/AddressableAssetsData/link.xml* +/[Aa]ssets/Addressables_Temp* +# By default, Addressables content builds will generate addressables_content_state.bin +# files in platform-specific subfolders, for example: +# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin +/[Aa]ssets/AddressableAssetsData/*/*.bin* + +# Visual Scripting auto-generated files +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers +/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta + +# Auto-generated scenes by play mode tests +/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity* + +.vsconfig + +Logs/ +[Aa]ssets/ +[Pp]ublish/ +.vscode/settings.json +*.dat \ No newline at end of file diff --git a/Packages/com.bywaystudios.qualitytuner/Editor.meta b/Packages/com.bywaystudios.qualitytuner/Editor.meta new file mode 100644 index 0000000..93b05e1 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46715001453444d6a82d33e63e7a0ccd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef b/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef new file mode 100644 index 0000000..33c97c9 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Byway.Quality.Editor", + "rootNamespace": "", + "references": [ + "GUID:4e091e0e3cfb7429491abb1e7f0e08f5" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef.meta b/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef.meta new file mode 100644 index 0000000..5e806e9 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/Byway.Quality.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bb37ad21176e64c5181b105fd7e8c7f9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs b/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs new file mode 100644 index 0000000..1b6e4df --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs @@ -0,0 +1,58 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace Byway.Quality.Editor +{ + /// + /// Draw GpuSeriesEnumeration as popup + /// + [CustomPropertyDrawer(typeof(GpuSeriesEnumeration))] + public class GpuSeriesEnumerationDrawer : GpuSeriesEnumerationDrawerBase + { + } + + public class GpuSeriesEnumerationDrawerBase : PropertyDrawer where T : GpuSeriesEnumeration + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + // draw label + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + + // don't make child fields be indented + var indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + // get enum values of GpuSeriesEnumeration + var enums = GpuSeriesEnumeration.GetAll().ToArray(); + var enumNames = enums.Select(e => e.ToString()).ToArray(); + + // get value and index + var valueProperty = property.FindPropertyRelative("value"); + var selectedValue = valueProperty.intValue; + var selectedEnum = (T)selectedValue; + var previousIndex = Array.IndexOf(enums, selectedEnum); + + // draw enum selection popup + var selectedIndex = EditorGUI.Popup(position, previousIndex, enumNames); + + if (selectedIndex != previousIndex) + { + // update SerializedProperty value + selectedEnum = enums[selectedIndex]; + valueProperty.intValue = (int)selectedEnum; + property.FindPropertyRelative("gpuMajorSeries").intValue = (int)selectedEnum.GpuMajorSeries; + property.FindPropertyRelative("gpuMinorSeries").intValue = (int)selectedEnum.GpuMinorSeries; + property.serializedObject.ApplyModifiedProperties(); + } + + // restore indent + EditorGUI.indentLevel = indent; + + EditorGUI.EndProperty(); + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs.meta b/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs.meta new file mode 100644 index 0000000..344ceea --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/GpuSeriesEnumerationDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 929462eabaddd4c97b1092680eb9b578 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs b/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs new file mode 100644 index 0000000..7737986 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using UnityEngine.Assertions; + +namespace Byway.Quality.Editor +{ + // ref: https://light11.hatenadiary.com/entry/2021/11/30/190034 + [CustomPropertyDrawer(typeof(SelectableSerializeReferenceAttribute))] + public sealed class SelectableSerializeReferenceAttributeDrawer : PropertyDrawer + { + private readonly Dictionary _dataPerPath = new(); + + private PropertyData _data; + + private int _selectedIndex; + + private void Init(SerializedProperty property) + { + if (_dataPerPath.TryGetValue(property.propertyPath, out _data)) + return; + + _data = new PropertyData(property); + _dataPerPath.Add(property.propertyPath, _data); + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Assert.IsTrue(property.propertyType == SerializedPropertyType.ManagedReference); + + Init(property); + + var fullTypeName = property.managedReferenceFullTypename.Split(' ').Last(); + _selectedIndex = Array.IndexOf(_data.DerivedFullTypeNames, fullTypeName); + + using (var ccs = new EditorGUI.ChangeCheckScope()) + { + var selectorPosition = position; + + var indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + selectorPosition.width -= EditorGUIUtility.labelWidth; + selectorPosition.x += EditorGUIUtility.labelWidth; + selectorPosition.height = EditorGUIUtility.singleLineHeight; + var selectedTypeIndex = EditorGUI.Popup(selectorPosition, _selectedIndex, _data.DerivedTypeNames); + if (ccs.changed) + { + _selectedIndex = selectedTypeIndex; + var selectedType = _data.DerivedTypes[selectedTypeIndex]; + property.managedReferenceValue = + selectedType == null ? null : Activator.CreateInstance(selectedType); + } + + EditorGUI.indentLevel = indent; + } + + EditorGUI.PropertyField(position, property, label, true); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + Init(property); + + if (string.IsNullOrEmpty(property.managedReferenceFullTypename)) + return EditorGUIUtility.singleLineHeight; + + return EditorGUI.GetPropertyHeight(property, true); + } + + private class PropertyData + { + public PropertyData(SerializedProperty property) + { + var managedReferenceFieldTypenameSplit = property.managedReferenceFieldTypename.Split(' ').ToArray(); + var assemblyName = managedReferenceFieldTypenameSplit[0]; + var fieldTypeName = managedReferenceFieldTypenameSplit[1]; + var fieldType = GetAssembly(assemblyName).GetType(fieldTypeName); + DerivedTypes = TypeCache.GetTypesDerivedFrom(fieldType) + .Where(x => !x.IsAbstract && !x.IsInterface && !x.IsGenericType) // added: ignoring generic types + .ToArray(); + DerivedTypeNames = new string[DerivedTypes.Length]; + DerivedFullTypeNames = new string[DerivedTypes.Length]; + for (var i = 0; i < DerivedTypes.Length; i++) + { + var type = DerivedTypes[i]; + DerivedTypeNames[i] = ObjectNames.NicifyVariableName(type.Name); + DerivedFullTypeNames[i] = type.FullName; + } + } + + public Type[] DerivedTypes { get; } + + public string[] DerivedTypeNames { get; } + + public string[] DerivedFullTypeNames { get; } + + private static Assembly GetAssembly(string name) + { + return AppDomain.CurrentDomain.GetAssemblies() + .SingleOrDefault(assembly => assembly.GetName().Name == name); + } + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs.meta b/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs.meta new file mode 100644 index 0000000..bc8a329 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Editor/SelectableSerializeReferenceAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 806ce0f17d82f491581567240e813ecc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime.meta b/Packages/com.bywaystudios.qualitytuner/Runtime.meta new file mode 100644 index 0000000..a020d03 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25ebb21761495477bb20fe52be6401bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef b/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef new file mode 100644 index 0000000..6c1aec5 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Byway.Quality", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef.meta new file mode 100644 index 0000000..f5aad97 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/Byway.Quality.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4e091e0e3cfb7429491abb1e7f0e08f5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs new file mode 100644 index 0000000..7d85955 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs @@ -0,0 +1,18 @@ +namespace Byway.Quality +{ + public class BywayQualityRuleData : QualityRuleData { } + public class BywayDeviceNameRuleMatcher : DeviceNameRuleMatcherBase { } + + public class BywayGpuSeriesRuleMatcher : GpuSeriesRuleMatcherBase { } + + public class BywaySystemMemoryRuleMatcher : SystemMemoryRuleMatcherBase { } + + public enum BywayQualityLevel + { + Lowest, + Low, + Medium, + High, + Highest + } +} \ No newline at end of file diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs.meta new file mode 100644 index 0000000..828a8f1 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/BywayQualityRuleData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c89be35d65d93a64d843fefc4f18334b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs new file mode 100644 index 0000000..f2d1cc2 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs @@ -0,0 +1,335 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace Byway.Quality +{ + /// + /// Enum of GPU series + /// + public enum GpuMajorSeries + { + /// + /// Unknown + /// + Unknown, + + /// + /// Apple X-series + /// + Apple, + + /// + /// Qualcomm Adreno series + /// + Adreno, + + /// + /// ARM Mali series + /// + Mali, + + /// + /// PowerVR series + /// + PowerVR, + + /// + /// Samsung Xclipse series + /// + Xclipse, + + /// + /// Huawei Maleoon series + /// + Maleoon, + + /// + /// ARM Immortalis series + /// + Immortalis + } + + public enum GpuMinorSeries + { + /// + /// Unknown + /// + Unknown, + + /// + /// Apple A-series + /// + AppleA = 11, + + /// + /// Apple M-series + /// + AppleM = 12, + + /// + /// Apple A-series Pro + /// + AppleAPro = 13, + + /// + /// Qualcomm Adreno 100 series + /// + Adreno100 = 21, + + /// + /// Qualcomm Adreno 200 series + /// + Adreno200 = 22, + + /// + /// Qualcomm Adreno 300 series + /// + Adreno300 = 23, + + /// + /// Qualcomm Adreno 400 series + /// + Adreno400 = 24, + + /// + /// Qualcomm Adreno 500 series + /// + Adreno500 = 25, + + /// + /// Qualcomm Adreno 600 series + /// + Adreno600 = 26, + + /// + /// Qualcomm Adreno 700 series + /// + Adreno700 = 27, + + /// + /// Qualcomm Adreno 800 series + /// + /// Qualcomm Adreno 900 series + /// + Adreno900 = 29, + + /// + /// ARM Mali series + /// + Mali = 31, + + /// + /// ARM Mali-T series + /// + MaliT = 32, + + /// + /// ARM Mali-G series + /// + MaliG = 33, + + /// + /// PowerVR 6XT series + /// + PowerVR6XT = 41, + + /// + /// PowerVR 8XE series + /// + PowerVR8XE = 42, + + /// + /// PowerVR 9XM series + /// + PowerVR9XM = 43, + + /// + /// PowerVR BXM series + /// + PowerVRBXM = 44, + + /// + /// PowerVR DXT series + /// + PowerVRDXT = 45, + + /// + /// Samsung Xclipse series + /// + Xclipse = 51, + + /// + /// Huawei Maleoon series + /// + Maleoon = 61, + + /// + /// ARM Immortalis-G series + /// + ImmortalisG = 71 + } + + [Serializable] + public class GpuSeriesEnumeration : IComparable + { + public static readonly GpuSeriesEnumeration Unkown = new(GpuMajorSeries.Unknown, GpuMinorSeries.Unknown); + + // Apple + public static readonly GpuSeriesEnumeration AppleAny = new(GpuMajorSeries.Apple, GpuMinorSeries.Unknown); + public static readonly GpuSeriesEnumeration AppleA = new(GpuMajorSeries.Apple, GpuMinorSeries.AppleA); + public static readonly GpuSeriesEnumeration AppleM = new(GpuMajorSeries.Apple, GpuMinorSeries.AppleM); + public static readonly GpuSeriesEnumeration AppleAPro = new(GpuMajorSeries.Apple, GpuMinorSeries.AppleAPro); + + // Adreno + public static readonly GpuSeriesEnumeration AdrenoAny = new(GpuMajorSeries.Adreno, GpuMinorSeries.Unknown); + public static readonly GpuSeriesEnumeration Adreno100 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno100); + public static readonly GpuSeriesEnumeration Adreno200 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno200); + public static readonly GpuSeriesEnumeration Adreno300 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno300); + public static readonly GpuSeriesEnumeration Adreno400 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno400); + public static readonly GpuSeriesEnumeration Adreno500 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno500); + public static readonly GpuSeriesEnumeration Adreno600 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno600); + public static readonly GpuSeriesEnumeration Adreno700 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno700); + public static readonly GpuSeriesEnumeration Adreno800 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno800); + public static readonly GpuSeriesEnumeration Adreno900 = new(GpuMajorSeries.Adreno, GpuMinorSeries.Adreno900); + + // Mali + public static readonly GpuSeriesEnumeration MaliAny = new(GpuMajorSeries.Mali, GpuMinorSeries.Unknown); + public static readonly GpuSeriesEnumeration Mali = new(GpuMajorSeries.Mali, GpuMinorSeries.Mali); + public static readonly GpuSeriesEnumeration MaliT = new(GpuMajorSeries.Mali, GpuMinorSeries.MaliT); + public static readonly GpuSeriesEnumeration MaliG = new(GpuMajorSeries.Mali, GpuMinorSeries.MaliG); + + // ARM Immortalis + public static readonly GpuSeriesEnumeration ImmortalisAny = new(GpuMajorSeries.Immortalis, GpuMinorSeries.Unknown); + public static readonly GpuSeriesEnumeration ImmortalisG = new(GpuMajorSeries.Immortalis, GpuMinorSeries.ImmortalisG); + + // PowerVR + public static readonly GpuSeriesEnumeration PowerVRAny = new(GpuMajorSeries.PowerVR, GpuMinorSeries.Unknown); + public static readonly GpuSeriesEnumeration PowerVR6XT = new(GpuMajorSeries.PowerVR, GpuMinorSeries.PowerVR6XT); + public static readonly GpuSeriesEnumeration PowerVR8XE = new(GpuMajorSeries.PowerVR, GpuMinorSeries.PowerVR8XE); + public static readonly GpuSeriesEnumeration PowerVR9XM = new(GpuMajorSeries.PowerVR, GpuMinorSeries.PowerVR9XM); + public static readonly GpuSeriesEnumeration PowerVRDXT = new(GpuMajorSeries.PowerVR, GpuMinorSeries.PowerVRDXT); + public static readonly GpuSeriesEnumeration PowerVRBXM = new(GpuMajorSeries.PowerVR, GpuMinorSeries.PowerVRBXM); + + // Samsung + public static readonly GpuSeriesEnumeration Xclipse = new(GpuMajorSeries.Xclipse, GpuMinorSeries.Xclipse); + + // Huawei + public static readonly GpuSeriesEnumeration Maleoon = new(GpuMajorSeries.Maleoon, GpuMinorSeries.Maleoon); + + [SerializeField] + protected int value; + + [SerializeField] + protected GpuMajorSeries gpuMajorSeries; + + [SerializeField] + protected GpuMinorSeries gpuMinorSeries; + + protected GpuSeriesEnumeration(GpuMajorSeries gpuMajorSeries, GpuMinorSeries gpuMinorSeries) + { + this.gpuMajorSeries = gpuMajorSeries; + this.gpuMinorSeries = gpuMinorSeries; + + if (gpuMinorSeries == GpuMinorSeries.Unknown) + value = (int)gpuMajorSeries * 10; + else + value = (int)gpuMinorSeries; + } + + public GpuMajorSeries GpuMajorSeries => gpuMajorSeries; + public GpuMinorSeries GpuMinorSeries => gpuMinorSeries; + + public int CompareTo(object other) + { + if (other is GpuSeriesEnumeration otherValue) + return value.CompareTo(otherValue.value); + return -1; + } + + public static implicit operator int(GpuSeriesEnumeration e) + { + return e.value; + } + + public static implicit operator GpuSeriesEnumeration(int value) + { + return FromValue(value); + } + + public override string ToString() + { + if (gpuMajorSeries == GpuMajorSeries.Unknown) + return "Any"; + if (gpuMinorSeries == GpuMinorSeries.Unknown) + return gpuMajorSeries + "/Any"; + return gpuMajorSeries + "/" + gpuMinorSeries; + } + + public static IEnumerable GetAll() where T : GpuSeriesEnumeration + { + return TypeCache.Enums; + } + + private static IEnumerable _GetAll() where T : GpuSeriesEnumeration + { + return typeof(T).GetFields(BindingFlags.Public | + BindingFlags.Static | + BindingFlags.DeclaredOnly) + .Select(f => f.GetValue(null)) + .Cast(); + } + + public static T FromValue(int value) where T : GpuSeriesEnumeration + { + var matchingItem = TypeCache.Enums.FirstOrDefault(item => item.value == value); + + if (matchingItem == null) + throw new ArgumentException($"'{value}' is not a valid value in {typeof(T)}"); + + return matchingItem; + } + + public static T FromGpuSeries(GpuMajorSeries gpuMajorSeries, GpuMinorSeries gpuMinorSeries) + where T : GpuSeriesEnumeration + { + var matchingItem = TypeCache.Enums.FirstOrDefault(item => + item.gpuMajorSeries == gpuMajorSeries && item.gpuMinorSeries == gpuMinorSeries); + + if (matchingItem == null) + throw new ArgumentException( + $"'{gpuMajorSeries}/{gpuMinorSeries}' and is not a valid GPU series in {typeof(T)}"); + + return matchingItem; + } + + public override bool Equals(object obj) + { + if (obj is not GpuSeriesEnumeration otherValue) + return false; + + // type matches and value matches + return GetType().Equals(obj.GetType()) && value.Equals(otherValue.value); + } + + public override int GetHashCode() + { + return value.GetHashCode(); + } + + protected static class TypeCache where T : GpuSeriesEnumeration + { + public static readonly T[] Enums; + + static TypeCache() + { + Enums = _GetAll().ToArray(); + } + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs.meta new file mode 100644 index 0000000..6442893 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/GpuSeriesEnums.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 718845abd76124f4e98011dfc602fc5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs new file mode 100644 index 0000000..9c4048b --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs @@ -0,0 +1,196 @@ +using System; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace Byway.Quality +{ + internal static class HardwareInfoAndroid + { + // Build.VERSION_CODES.S (Android 12) + private const int ANDROID_VERSION_CODES_S = 31; + + private static int _sdkVersion; + + public static void SetAndroidHardwareStats(HardwareStats stats) + { +#if UNITY_EDITOR + if (Application.isEditor) + return; +#endif + var gpuName = stats.GpuName; + stats.GpuMajorSeries = ParseGpuMajorSeries(gpuName); + (stats.GpuMinorSeries, stats.GpuSeriesNumber) = stats.GpuMajorSeries switch + { + GpuMajorSeries.Adreno => ParseAdrenoGpuSeries(gpuName), + GpuMajorSeries.Mali => ParseMaliGpuSeries(gpuName), + GpuMajorSeries.Immortalis => ParseImmortalisGpuSeries(gpuName), + GpuMajorSeries.PowerVR => ParsePowerVRGpuSeries(gpuName), + GpuMajorSeries.Xclipse => ParseXclipseGpuSeries(gpuName), + GpuMajorSeries.Maleoon => ParseMaleoonGpuSeries(gpuName), + _ => (GpuMinorSeries.Unknown, 0) + }; + stats.SocName = GetSocName(); + } + + public static GpuMajorSeries ParseGpuMajorSeries(string gpuName) + { + // parse GPU series by StartsWith + return gpuName switch + { + { } when gpuName.StartsWith("Adreno", StringComparison.Ordinal) => GpuMajorSeries.Adreno, + { } when gpuName.StartsWith("Mali", StringComparison.Ordinal) => GpuMajorSeries.Mali, + { } when gpuName.StartsWith("ARM Immortalis", StringComparison.Ordinal) => GpuMajorSeries.Immortalis, + { } when gpuName.StartsWith("PowerVR", StringComparison.Ordinal) => GpuMajorSeries.PowerVR, + { } when gpuName.StartsWith("Samsung Xclipse", StringComparison.Ordinal) => GpuMajorSeries.Xclipse, + { } when gpuName.StartsWith("Maleoon", StringComparison.Ordinal) => GpuMajorSeries.Maleoon, + _ => GpuMajorSeries.Unknown + }; + } + + public static (GpuMinorSeries, int) ParseAdrenoGpuSeries(string gpuName) + { + // parse Adreno GPU series number by regex + // ex: Adreno (TM) xxx + var match = Regex.Match(gpuName, @"Adreno \(TM\) (\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var number)) + return (number / 100) switch + { + 1 => (GpuMinorSeries.Adreno100, number), + 2 => (GpuMinorSeries.Adreno200, number), + 3 => (GpuMinorSeries.Adreno300, number), + 4 => (GpuMinorSeries.Adreno400, number), + 5 => (GpuMinorSeries.Adreno500, number), + 6 => (GpuMinorSeries.Adreno600, number), + 7 => (GpuMinorSeries.Adreno700, number), + 8 => (GpuMinorSeries.Adreno800, number), + 9 => (GpuMinorSeries.Adreno900, number), + _ => (GpuMinorSeries.Unknown, number) + }; + + return (GpuMinorSeries.Unknown, 0); + } + + public static (GpuMinorSeries, int) ParseMaliGpuSeries(string gpuName) + { + // parse Mali GPU series number by regex + // ex: Mali-Gxx, Mali-Txxx + var match = Regex.Match(gpuName, @"Mali-([GT]?)(\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[2].Value, out var number)) + return match.Groups[1].Value switch + { + "G" => (GpuMinorSeries.MaliG, number), + "T" => (GpuMinorSeries.MaliT, number), + "" => (GpuMinorSeries.Mali, number), + _ => (GpuMinorSeries.Unknown, number) + }; + + return (GpuMinorSeries.Unknown, 0); + } + + public static (GpuMinorSeries, int) ParseImmortalisGpuSeries(string gpuName) + { + // parse ARM Immortalis GPU series number by regex + // ex: ARM Immortalis-G925 MP16 + var match = Regex.Match(gpuName, @"Immortalis-G(\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var number)) + return (GpuMinorSeries.ImmortalisG, number); + + return (GpuMinorSeries.Unknown, 0); + } + + public static (GpuMinorSeries, int) ParsePowerVRGpuSeries(string gpuName) + { + // parse PowerVR GPU series number by regex + // ex: PowerVR Rogue GExxxx, PowerVR Rogue G?xxxx + var match = Regex.Match(gpuName, @"PowerVR Rogue (G[A-Z])(\d)(\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[2].Value + match.Groups[3].Value, out var number)) + return (match.Groups[1].Value + match.Groups[2].Value) switch + { + "GX6" => (GpuMinorSeries.PowerVR6XT, number), + "GE8" => (GpuMinorSeries.PowerVR8XE, number), + "GM9" => (GpuMinorSeries.PowerVR9XM, number), + _ => (GpuMinorSeries.Unknown, number) + }; + + // parse PowerVR B-Series BXM series + // ex: PowerVR B-Series BXM-8-256, PowerVR B-Series BXM-4-64 + match = Regex.Match(gpuName, @"BXM-(\d+)-(\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var bxmNumber)) + return (GpuMinorSeries.PowerVRBXM, bxmNumber); + + // parse PowerVR D-Series DXT series + // ex: PowerVR D-Series DXT-24-1024 + match = Regex.Match(gpuName, @"DXT-(\d+)-(\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var dxtNumber)) + return (GpuMinorSeries.PowerVRDXT, dxtNumber); + + return (GpuMinorSeries.Unknown, 0); + } + + public static (GpuMinorSeries, int) ParseXclipseGpuSeries(string gpuName) + { + // parse Samsung Xclipse GPU series number by regex + // ex: Samsung Xclipse xxx + var match = Regex.Match(gpuName, @"Samsung Xclipse (\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var number)) + return (GpuMinorSeries.Xclipse, number); + + return (GpuMinorSeries.Unknown, 0); + } + + public static (GpuMinorSeries, int) ParseMaleoonGpuSeries(string gpuName) + { + // parse Huawei Maleoon GPU series number by regex + // ex: Maleoon xxx + var match = Regex.Match(gpuName, @"Maleoon (\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var number)) + return (GpuMinorSeries.Maleoon, number); + + return (GpuMinorSeries.Unknown, 0); + } + + public static string GetSocName() + { + if (GetAndroidSdkVersion() < ANDROID_VERSION_CODES_S) + return ""; + + try + { + using var buildClass = new AndroidJavaClass("android.os.Build"); + var socModel = buildClass.GetStatic("SOC_MODEL"); + return socModel; + } + catch (Exception e) + { + Debug.LogException(e); + return ""; + } + } + + private static int GetAndroidSdkVersion() + { +#if UNITY_EDITOR + if (Application.isEditor) + return 0; +#endif +#if UNITY_ANDROID + if (_sdkVersion != 0) + return _sdkVersion; + + using var versionCls = new AndroidJavaClass("android.os.Build$VERSION"); + _sdkVersion = versionCls.GetStatic("SDK_INT"); + return _sdkVersion; +#else + return 0; +#endif + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs.meta new file mode 100644 index 0000000..cbae0a2 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.Android.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df1ae78653b0746db9ec4c1e1ccb456a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs new file mode 100644 index 0000000..2117ce0 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs @@ -0,0 +1,98 @@ +using UnityEngine; + +namespace Byway.Quality +{ + /// + /// Hardware stats to identify performance index of device + /// + public class HardwareStats + { + /// + /// Name of device model + /// + /// + public string DeviceModel { get; internal set; } + + /// + /// Memory size of GPU in MegaBytes + /// Return zero on editor + /// + public int GpuMemorySizeMb { get; internal set; } + + /// + /// Name of GPU + /// + /// + public string GpuName { get; internal set; } + + /// + /// Major series of GPU + /// + public GpuMajorSeries GpuMajorSeries { get; internal set; } + + /// + /// Major series of GPU + /// + public GpuMinorSeries GpuMinorSeries { get; internal set; } + + /// + /// Series number of GPU. + /// ex: Adreno 650 -> 650 + /// + public int GpuSeriesNumber { get; internal set; } + + /// + /// Name of SoC + /// Only available on Android12 or later + /// + public string SocName { get; internal set; } + + /// + /// Memory size of system in MegaBytes + /// Return zero on editor + /// + public int SystemMemorySizeMb { get; internal set; } + + internal static HardwareStats CreateDefault() + { + return new HardwareStats + { + DeviceModel = SystemInfo.deviceModel, + GpuName = SystemInfo.graphicsDeviceName, + GpuMemorySizeMb = SystemInfo.graphicsMemorySize, + GpuMajorSeries = GpuMajorSeries.Unknown, + GpuMinorSeries = GpuMinorSeries.Unknown, + GpuSeriesNumber = 0, + SocName = "", + SystemMemorySizeMb = SystemInfo.systemMemorySize + }; + } + } + + public static class HardwareInfo + { + // singleton cache + private static HardwareStats _cachedHardwareStats; + + /// + /// Get hardware stats of running device + /// + /// HardwareStats + public static HardwareStats GetHardwareStats() + { + if (_cachedHardwareStats != null) + return _cachedHardwareStats; + + + _cachedHardwareStats = HardwareStats.CreateDefault(); + + +#if UNITY_EDITOR_OSX || UNITY_IOS + HardwareInfoIos.SetIosHardwareStats(_cachedHardwareStats); +#elif UNITY_ANDROID + HardwareInfoAndroid.SetAndroidHardwareStats(_cachedHardwareStats); +#endif + return _cachedHardwareStats; + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs.meta new file mode 100644 index 0000000..3d19ffa --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6effba98da674bdeabba5e109cc88ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs new file mode 100644 index 0000000..ab8950b --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs @@ -0,0 +1,48 @@ +using System; +using System.Text.RegularExpressions; + +namespace Byway.Quality +{ + internal static class HardwareInfoIos + { + public static void SetIosHardwareStats(HardwareStats stats) + { + // only works with iOS, iPadOS and macOS, including editor +#if UNITY_EDITOR && !UNITY_EDITOR_OSX + if (UnityEngine.Application.isEditor) + return; +#endif + stats.GpuMajorSeries = GpuMajorSeries.Apple; + stats.GpuMinorSeries = ParseGpuMinorSeries(stats.GpuName); + stats.GpuSeriesNumber = ParseAppleGpuSeriesNumber(stats.GpuName); + } + + public static GpuMinorSeries ParseGpuMinorSeries(string gpuName) + { + // parse GPU series by StartsWith + if (gpuName.StartsWith("Apple A", StringComparison.Ordinal)) + { + return gpuName.Contains("Pro") ? GpuMinorSeries.AppleAPro : GpuMinorSeries.AppleA; + } + + if (gpuName.StartsWith("Apple M", StringComparison.Ordinal)) + { + return GpuMinorSeries.AppleM; + } + + return GpuMinorSeries.Unknown; + } + + public static int ParseAppleGpuSeriesNumber(string gpuName) + { + // parse Apple GPU series number by regex + // ex: Apple A8 GPU, Apple A10 GPU, Apple M1 + var match = Regex.Match(gpuName, @"Apple [AM](\d+)"); + if (match.Success) + if (int.TryParse(match.Groups[1].Value, out var number)) + return number; + + return 0; + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs.meta new file mode 100644 index 0000000..e40a1f5 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/HardwareInfo.iOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd6f4afff0462436b9c1b93ff0d8833c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs new file mode 100644 index 0000000..4fdbd1c --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Byway.Quality +{ + public class RuleBasedQualitySelector + { + public RuleBasedQualitySelector(T defaultQualityLevel, IEnumerable qualityLevelRuleMatchers) + { + DefaultQualityLevel = defaultQualityLevel; + QualityLevelRuleMatchers = new List(qualityLevelRuleMatchers); + } + + public RuleBasedQualitySelector(QualityRuleData data) : this(data.defaultQualityLevel, + data.qualityLevelRuleMatchers) + { + } + + public List QualityLevelRuleMatchers { get; } + + public T DefaultQualityLevel { get; set; } + + public bool TryGetQualityLevel(HardwareStats stats, out T qualityLevel) + { + if (QualityLevelRuleMatchers is not null) + foreach (var matcher in QualityLevelRuleMatchers) + { + if (matcher == null) + continue; + + if (matcher.TryMatch(stats, out var matchedQualityLevel)) + { + qualityLevel = matchedQualityLevel; + return true; + } + } + + qualityLevel = DefaultQualityLevel; + return false; + } + } + + public abstract class QualityRuleData : ScriptableObject + { + [Tooltip("Default quality level if no match")] + public T defaultQualityLevel; + + [Tooltip("Combined performance index table")] + [SerializeReference] + [SelectableSerializeReference] + public IMatcher[] qualityLevelRuleMatchers; // cannot use IMatcher because of SerializeReference + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs.meta new file mode 100644 index 0000000..8797986 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleBasedQualitySelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a69dd1328098843cb89cf7fc851fd19b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs new file mode 100644 index 0000000..44a81c7 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Assertions; + +namespace Byway.Quality +{ + public interface IMatcher + { + bool TryMatch(HardwareStats stats, out T qualityLevel); + } + + public interface IMatcher + { + bool TryMatch(HardwareStats stats, out T matchedQualityLevel); + } + + public abstract class RuleMatcherBase : IMatcher + { + protected abstract IEnumerable> Rules { get; } + + bool IMatcher.TryMatch(HardwareStats stats, out TOut qualityLevel) + { + Assert.AreEqual(typeof(T), typeof(TOut), "type mismatch"); + + var matched = TryMatch(stats, out var matchedQualityLevel); + qualityLevel = (TOut)Convert.ChangeType(matchedQualityLevel, typeof(TOut)); + return matched; + } + + public bool TryMatch(HardwareStats stats, out T qualityLevel) + { + if (Rules is not null) + foreach (var rule in Rules) + if (rule.TryMatch(stats, out var matchedQualityLevel)) + { + qualityLevel = matchedQualityLevel; + return true; + } + + qualityLevel = default; + return false; + } + } + + [Serializable] + public class DeviceNameRuleMatcherBase : RuleMatcherBase + { + public Rule[] rules; + + protected override IEnumerable> Rules => rules; + + [Serializable] + public class Rule : IMatcher + { + [Tooltip("Device model name returned by SystemInfo.deviceModel (exact match)")] + public string deviceModel; + + [Tooltip("Quality level for the device that match")] + public T qualityLevel; + + public bool TryMatch(HardwareStats stats, out T matchedQualityLevel) + { + if (deviceModel.Equals(stats.DeviceModel, StringComparison.Ordinal)) + { + matchedQualityLevel = qualityLevel; + return true; + } + + matchedQualityLevel = default; + return false; + } + } + } + + [Serializable] + public class GpuSeriesRuleMatcherBase : RuleMatcherBase + where TEnum : GpuSeriesEnumeration + { + public Rule[] rules; + + protected override IEnumerable> Rules => rules; + + [Serializable] + public sealed class Rule : IMatcher + { + [Tooltip("GPU series that match")] + public TEnum gpuSeries; + + [Tooltip("Minimum of GPU series number that match (inclusive)")] + public int gpuSeriesNumberMin; + + [Tooltip("Maximum of GPU series number that match (inclusive)")] + public int gpuSeriesNumberMax; + + [Tooltip("Performance level for the device that match")] + public TLevel qualityLevel; + + public bool TryMatch(HardwareStats stats, out TLevel matchedQualityLevel) + { + matchedQualityLevel = default; + if (stats.GpuMajorSeries != gpuSeries.GpuMajorSeries) + return false; + // don't check gpuMinorSeries if it's unknown + if (gpuSeries.GpuMinorSeries != GpuMinorSeries.Unknown && + stats.GpuMinorSeries != gpuSeries.GpuMinorSeries) + return false; + + if (stats.GpuSeriesNumber < gpuSeriesNumberMin || + stats.GpuSeriesNumber > gpuSeriesNumberMax) + return false; + + matchedQualityLevel = qualityLevel; + return true; + } + } + } + + [Serializable] + public class SystemMemoryRuleMatcherBase : RuleMatcherBase + { + public Rule[] rules; + + protected override IEnumerable> Rules => rules; + + [Serializable] + public sealed class Rule : IMatcher + { + [Tooltip("Minimum of system memory megabytes that match (inclusive)")] + public int systemMemoryMin; + + [Tooltip("Maximum of system memory megabytes that match (inclusive)")] + public int systemMemoryMax; + + [Tooltip("Performance level for the device that match")] + public T qualityLevel; + + public bool TryMatch(HardwareStats stats, out T matchedQualityLevel) + { + matchedQualityLevel = default; + if (stats.SystemMemorySizeMb < systemMemoryMin || + stats.SystemMemorySizeMb > systemMemoryMax) + return false; + + matchedQualityLevel = qualityLevel; + return true; + } + } + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs.meta new file mode 100644 index 0000000..17c2662 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/RuleMatcherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aef62e03531de451395b4c442fac883f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs b/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs new file mode 100644 index 0000000..f5e12dd --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine; + +namespace Byway.Quality +{ + [AttributeUsage(AttributeTargets.Field)] + public class SelectableSerializeReferenceAttribute : PropertyAttribute + { + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs.meta b/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs.meta new file mode 100644 index 0000000..b1f2bc5 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/Runtime/SelectableSerializeReferenceAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c52c2f1188c954111aef107ac07e4b83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.bywaystudios.qualitytuner/package.json b/Packages/com.bywaystudios.qualitytuner/package.json new file mode 100644 index 0000000..fd88a67 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/package.json @@ -0,0 +1,11 @@ +{ + "name": "com.bywaystudios.qualitytuner", + "displayName": "Quality Tuner", + "version": "0.1.0", + "description": "Tools to support deciding quality level by hardware spec of mobile devices.", + "repository": { + "url": "git@gitea.bywaystudios.com:wangshiyao/QualitySettingsPackage.git", + "type": "git", + "revision": null + } +} diff --git a/Packages/com.bywaystudios.qualitytuner/package.json.meta b/Packages/com.bywaystudios.qualitytuner/package.json.meta new file mode 100644 index 0000000..b373a48 --- /dev/null +++ b/Packages/com.bywaystudios.qualitytuner/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c5989fc7abeeb41478a33e30f352866d +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..70ee380 --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,48 @@ +{ + "dependencies": { + "com.unity.asset-store-validation": "0.6.0", + "com.unity.collab-proxy": "2.12.4", + "com.unity.editorcoroutines": "1.0.1", + "com.unity.feature.development": "1.0.1", + "com.unity.ide.rider": "3.0.38", + "com.unity.ide.visualstudio": "2.0.25", + "com.unity.ide.vscode": "1.2.5", + "com.unity.nuget.newtonsoft-json": "3.2.2", + "com.unity.performance.profile-analyzer": "1.2.4", + "com.unity.settings-manager": "2.1.1", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.7", + "com.unity.upm.develop": "0.5.3-exp.1", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..2406aef --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,375 @@ +{ + "dependencies": { + "com.bywaystudios.qualitytuner": { + "version": "file:com.bywaystudios.qualitytuner", + "depth": 0, + "source": "embedded", + "dependencies": {} + }, + "com.unity.asset-store-validation": { + "version": "0.6.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "2.0.2" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "2.12.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.editorcoroutines": { + "version": "1.0.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.feature.development": { + "version": "1.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.ide.rider": "3.0.36", + "com.unity.ide.vscode": "1.2.5", + "com.unity.editorcoroutines": "1.0.0", + "com.unity.performance.profile-analyzer": "1.2.3", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.6" + } + }, + "com.unity.ide.rider": { + "version": "3.0.38", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.25", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.31" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.5", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.2", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.performance.profile-analyzer": { + "version": "1.2.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.settings-manager": { + "version": "2.1.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.testtools.codecoverage": { + "version": "1.2.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.0.16", + "com.unity.settings-manager": "1.0.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.upm.develop": { + "version": "0.5.3-exp.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.20", + "com.unity.nuget.newtonsoft-json": "2.0.2", + "com.unity.asset-store-validation": "0.1.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..07ebfb0 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..1e44a0a --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..43369e3 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..112a053 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -830 + m_OriginalInstanceId: -832 + m_LoadAssets: 0 diff --git a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 0000000..3c7b4c1 --- /dev/null +++ b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,5 @@ +{ + "m_Dictionary": { + "m_DictionaryValues": [] + } +} \ No newline at end of file diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..47880b1 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..546c7c3 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,961 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 26 + productGUID: 95c2a2f5e092ac941bd8d86b5757f6b5 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: QualitySettingsPackage + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 0 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + switchMaxWorkerMultiple: 8 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.packagetemplate@1.0.0 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 1 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 + scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + managedStrippingLevel: + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: QualitySettingsPackage + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: QualitySettingsPackage + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..587f809 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.62f3 +m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..36c0dad --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,234 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + GameCoreScarlett: 5 + GameCoreXboxOne: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PS5: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..a88bee0 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file