├── ProjectSettings ├── boot.config ├── ProjectVersion.txt ├── ClusterInputManager.asset ├── PresetManager.asset ├── XRSettings.asset ├── VersionControlSettings.asset ├── Packages │ └── com.unity.testtools.codecoverage │ │ └── Settings.json ├── TimeManager.asset ├── EditorBuildSettings.asset ├── VFXManager.asset ├── AutoStreamingSettings.asset ├── AudioManager.asset ├── TagManager.asset ├── PackageManagerSettings.asset ├── EditorSettings.asset ├── UnityConnectSettings.asset ├── DynamicsManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── Physics2DSettings.asset ├── GraphicsSettings.asset ├── SceneTemplateSettings.json ├── InputManager.asset ├── QualitySettings.asset └── ProjectSettings.asset ├── .vsconfig ├── Packages ├── Loom │ ├── Documentation~ │ │ ├── images │ │ │ ├── example.png │ │ │ ├── install.png │ │ │ ├── result.png │ │ │ ├── example.png.meta │ │ │ └── result.png.meta │ │ ├── loom.md │ │ ├── loom.md.meta │ │ └── images.meta │ ├── CHANGELOG.md.meta │ ├── README.md.meta │ ├── package.json.meta │ ├── Runtime.meta │ ├── Samples~ │ │ ├── Example │ │ │ ├── See Inspector.prefab.meta │ │ │ ├── .sample.json │ │ │ ├── Demo.cs.meta │ │ │ ├── Demo.cs │ │ │ └── See Inspector.prefab │ │ └── Example.meta │ ├── Runtime │ │ ├── com.bshsf.loom.asmdef.meta │ │ ├── Loom.cs.meta │ │ ├── com.bshsf.loom.asmdef │ │ └── Loom.cs │ ├── CHANGELOG.md │ ├── package.json │ └── README.md ├── manifest.json └── packages-lock.json ├── Assets ├── Samples.meta ├── Scenes.meta ├── Scenes │ ├── SampleScene.unity.meta │ └── SampleScene.unity └── Samples │ ├── Loom.meta │ └── Loom │ ├── 1.0.0.meta │ └── 1.0.0 │ ├── Example.meta │ └── Example │ ├── See Inspector.prefab.meta │ ├── .sample.json │ ├── Demo.cs.meta │ ├── Demo.cs │ └── See Inspector.prefab ├── .gitignore └── README.md /ProjectSettings/boot.config: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vsconfig: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "components": [ 4 | "Microsoft.VisualStudio.Workload.ManagedGame" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2021.3.11f1c2 2 | m_EditorVersionWithRevision: 2021.3.11f1c2 (2c7757f00bfe) 3 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bian-Sh/Loom/HEAD/Packages/Loom/Documentation~/images/example.png -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images/install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bian-Sh/Loom/HEAD/Packages/Loom/Documentation~/images/install.png -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bian-Sh/Loom/HEAD/Packages/Loom/Documentation~/images/result.png -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/loom.md: -------------------------------------------------------------------------------- 1 | 导入示例快速开始: 2 | 3 | 1. 点击 See Inspector 预制体,看到右侧的 Click~~ 按钮,点击即可 4 | 5 | ![](images/example.png) 6 | 7 | 可以在控制台看到效果: 8 | 9 | ![](images/result.png) -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /Packages/Loom/CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd97f4b29c6a59348bbcee89b54cc706 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/Loom/README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f9ee5d90deac5544b9107295262d312 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Samples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6525ffbb8a270b14eb8ab26bcf0f266d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ea315d0fd7389c41b19996891e99ae3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/Loom/package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4fa4acb86bd47244c84a934ee2b65b43 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Samples/Loom.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 096706d7d0be1854c9eb5ed78e030faa 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/loom.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0268457949524884292f1167dbe9111e 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/Loom/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eff6c3fc8635b5648bd0cf9041e2e6b9 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4bc32ad1aee634498ed447f40b53331 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example/See Inspector.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 381ee2c74524c3c408866e01772d76b2 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd92b76e75f1621469e36a35ec31e22f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example/See Inspector.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 381ee2c74524c3c408866e01772d76b2 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/Loom/Runtime/com.bshsf.loom.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 612081a07b9bb524c8ffbe4a1ae4ef4e 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e4585faad944cf14f88cb7a984ef8bdd 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cf25dd0669d65d94baaa297ce7e9b92a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example/.sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayName":"Example Sample", 3 | "description": "Replace this string with your own description of the sample. Delete the Samples folder if not needed.", 4 | "createSeparatePackage": false 5 | } 6 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example/.sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayName":"Example Sample", 3 | "description": "Replace this string with your own description of the sample. Delete the Samples folder if not needed.", 4 | "createSeparatePackage": false 5 | } 6 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "m_Name": "Settings", 3 | "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", 4 | "m_Dictionary": { 5 | "m_DictionaryValues": [] 6 | } 7 | } -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /Packages/Loom/Runtime/Loom.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c53e1797212670c4e90d1fbf88b398d9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example/Demo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a174035ae7ffa3b48978c47f136d4a96 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example/Demo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a174035ae7ffa3b48978c47f136d4a96 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Scenes/SampleScene.unity 10 | guid: 9fc0d4010bbf28b4594072e72b8655ab 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /Packages/Loom/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this package will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | ## [0.1.0] - 2023-07-04 9 | 10 | ### This is the first release of *\*. 11 | -------------------------------------------------------------------------------- /Packages/Loom/Runtime/com.bshsf.loom.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.bshsf.loom", 3 | "rootNamespace": "", 4 | "references": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [], 12 | "versionDefines": [], 13 | "noEngineReferences": false 14 | } -------------------------------------------------------------------------------- /ProjectSettings/AutoStreamingSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1200 &1 4 | AutoStreamingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | mSearchMode: 15 8 | mCustomSearchFile: 9 | mTextureSearchString: 10 | mMeshSearchString: 11 | mTextures: [] 12 | mAudios: [] 13 | mMeshes: [] 14 | mScenes: [] 15 | mConfigCCD: 16 | useCCD: 0 17 | cosKey: 18 | projectGuid: 19 | bucketUuid: 20 | bucketName: 21 | badgeName: 22 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /Packages/Loom/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.bshsf.loom", 3 | "displayName": "Loom", 4 | "version": "1.0.0", 5 | "unity": "2021.3", 6 | "description": "Loom is a simple yet powerful Unity tool designed to simplify multithreading programming and achieve data synchronization between threads. It provides a simple and effective way for non-main threads to safely operate on Unity objects, avoiding common thread synchronization issues.", 7 | "type": "library", 8 | "samples":[ 9 | { 10 | "displayName": "Example", 11 | "description": "Very Simple Example", 12 | "path": "Samples~/Example" 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | [Ll]ibrary/ 2 | [Tt]emp/ 3 | [Oo]bj/ 4 | [Bb]uild/ 5 | [Bb]uilds/ 6 | [Ll]ogs/ 7 | [Uu]serSettings/ 8 | Assets/AssetStoreTools* 9 | 10 | # Visual Studio cache directory 11 | .vs/ 12 | 13 | # Autogenerated VS/MD/Consulo solution and project files 14 | ExportedObj/ 15 | .consulo/ 16 | *.csproj 17 | *.unityproj 18 | *.sln 19 | *.suo 20 | *.tmp 21 | *.user 22 | *.userprefs 23 | *.pidb 24 | *.booproj 25 | *.svd 26 | *.pdb 27 | *.opendb 28 | 29 | # Unity3D generated meta files 30 | *.pidb.meta 31 | *.pdb.meta 32 | 33 | # Unity3D Generated File On Crash Reports 34 | sysinfo.txt 35 | 36 | # Builds 37 | *.apk 38 | *.unitypackage 39 | *.unitypackage.meta 40 | Assets/zLeon_测试文件/ 41 | Assets/zLeon_测试文件.meta 42 | Assets/MeshCombineStudio* 43 | 44 | # PEEK 45 | Assets/Ludiq* 46 | Assets/Ludiq.Generated* 47 | Assets/测试文件/ 48 | 49 | #视频录制目录 50 | SampleRecordings/ 51 | /Assets/Editor/~Design/设计图/* 52 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreReleasePackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | m_SeeAllPackageVersions: 0 20 | oneTimeWarningShown: 0 21 | m_Registries: 22 | - m_Id: main 23 | m_Name: 24 | m_Url: https://packages.unity.cn 25 | m_Scopes: [] 26 | m_IsDefault: 1 27 | m_Capabilities: 7 28 | m_UserSelectedRegistryName: 29 | m_UserAddingNewScopedRegistry: 0 30 | m_RegistryInfoDraft: 31 | m_Modified: 0 32 | m_ErrorMessage: 33 | m_UserModificationsInstanceId: -834 34 | m_OriginalInstanceId: -836 35 | m_LoadAssets: 0 36 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_SerializeInlineMappingsOnOneLine: 1 31 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 1 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_CNEventUrl: https://cdp.cloud.unity.cn/v1/events 14 | m_CNConfigUrl: https://cdp.cloud.unity.cn/config 15 | m_TestInitMode: 0 16 | CrashReportingSettings: 17 | m_EventUrl: https://perf-events.cloud.unity.cn 18 | m_Enabled: 0 19 | m_LogBufferSize: 10 20 | m_CaptureEditorExceptions: 1 21 | UnityPurchasingSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | UnityAnalyticsSettings: 25 | m_Enabled: 1 26 | m_TestMode: 0 27 | m_InitializeOnStartup: 1 28 | UnityAdsSettings: 29 | m_Enabled: 0 30 | m_InitializeOnStartup: 1 31 | m_TestMode: 0 32 | m_IosGameId: 33 | m_AndroidGameId: 34 | m_GameIds: {} 35 | m_GameId: 36 | PerformanceReportingSettings: 37 | m_Enabled: 0 38 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example/Demo.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using UnityEngine; 4 | using static zFramework.Internal.Loom; 5 | namespace zFramework.Example.Loom 6 | { 7 | #if UNITY_EDITOR 8 | [UnityEditor.CustomEditor(typeof(Demo))] 9 | class DemoEditor : UnityEditor.Editor 10 | { 11 | public override void OnInspectorGUI() 12 | { 13 | base.OnInspectorGUI(); 14 | if (GUILayout.Button("Click~~")) 15 | { 16 | _ = (target as Demo).FooAsync(); 17 | } 18 | } 19 | } 20 | #endif 21 | public class Demo : MonoBehaviour 22 | { 23 | internal async Task FooAsync() 24 | { 25 | Debug.Log($"1. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 26 | await ToOtherThread; 27 | Debug.Log($"2. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 28 | 29 | Post(() => 30 | { 31 | Debug.Log($"Use Post Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 32 | }); 33 | 34 | await ToMainThread; 35 | Debug.Log($"3. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example/Demo.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using UnityEngine; 4 | using static zFramework.Internal.Loom; 5 | namespace zFramework.Example.Loom 6 | { 7 | #if UNITY_EDITOR 8 | [UnityEditor.CustomEditor(typeof(Demo))] 9 | class DemoEditor : UnityEditor.Editor 10 | { 11 | public override void OnInspectorGUI() 12 | { 13 | base.OnInspectorGUI(); 14 | if (GUILayout.Button("Click~~")) 15 | { 16 | _ = (target as Demo).FooAsync(); 17 | } 18 | } 19 | } 20 | #endif 21 | public class Demo : MonoBehaviour 22 | { 23 | private void Start() 24 | { 25 | _ = FooAsync(); 26 | } 27 | 28 | internal async Task FooAsync() 29 | { 30 | Debug.LogError($"1. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 31 | await ToOtherThread; 32 | Debug.LogError($"2. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 33 | 34 | Post(() => 35 | { 36 | Debug.LogError($"Use Post Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 37 | }); 38 | 39 | await ToMainThread; 40 | Debug.LogError($"3. Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /Packages/Loom/Samples~/Example/See Inspector.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &660740916970224100 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 929091694769506570} 12 | - component: {fileID: 2025288370898359092} 13 | m_Layer: 0 14 | m_Name: See Inspector 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &929091694769506570 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 660740916970224100} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_ConstrainProportionsScale: 0 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &2025288370898359092 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 660740916970224100} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: a174035ae7ffa3b48978c47f136d4a96, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | -------------------------------------------------------------------------------- /Assets/Samples/Loom/1.0.0/Example/See Inspector.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &660740916970224100 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 929091694769506570} 12 | - component: {fileID: 2025288370898359092} 13 | m_Layer: 0 14 | m_Name: See Inspector 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &929091694769506570 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 660740916970224100} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_ConstrainProportionsScale: 0 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &2025288370898359092 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 660740916970224100} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: a174035ae7ffa3b48978c47f136d4a96, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.collab-proxy": "1.17.2", 4 | "com.unity.feature.development": "1.0.1", 5 | "com.unity.ide.rider": "3.0.15", 6 | "com.unity.ide.visualstudio": "2.0.16", 7 | "com.unity.ide.vscode": "1.2.5", 8 | "com.unity.test-framework": "1.1.31", 9 | "com.unity.textmeshpro": "3.0.6", 10 | "com.unity.timeline": "1.6.4", 11 | "com.unity.ugui": "1.0.0", 12 | "com.unity.upm.develop": "0.5.0", 13 | "com.unity.visualscripting": "1.7.8", 14 | "com.unity.modules.ai": "1.0.0", 15 | "com.unity.modules.androidjni": "1.0.0", 16 | "com.unity.modules.animation": "1.0.0", 17 | "com.unity.modules.assetbundle": "1.0.0", 18 | "com.unity.modules.audio": "1.0.0", 19 | "com.unity.modules.cloth": "1.0.0", 20 | "com.unity.modules.director": "1.0.0", 21 | "com.unity.modules.imageconversion": "1.0.0", 22 | "com.unity.modules.imgui": "1.0.0", 23 | "com.unity.modules.jsonserialize": "1.0.0", 24 | "com.unity.modules.particlesystem": "1.0.0", 25 | "com.unity.modules.physics": "1.0.0", 26 | "com.unity.modules.physics2d": "1.0.0", 27 | "com.unity.modules.screencapture": "1.0.0", 28 | "com.unity.modules.terrain": "1.0.0", 29 | "com.unity.modules.terrainphysics": "1.0.0", 30 | "com.unity.modules.tilemap": "1.0.0", 31 | "com.unity.modules.ui": "1.0.0", 32 | "com.unity.modules.uielements": "1.0.0", 33 | "com.unity.modules.umbra": "1.0.0", 34 | "com.unity.modules.unityanalytics": "1.0.0", 35 | "com.unity.modules.unitywebrequest": "1.0.0", 36 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 37 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 38 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 39 | "com.unity.modules.unitywebrequestwww": "1.0.0", 40 | "com.unity.modules.vehicles": "1.0.0", 41 | "com.unity.modules.video": "1.0.0", 42 | "com.unity.modules.vr": "1.0.0", 43 | "com.unity.modules.wind": "1.0.0", 44 | "com.unity.modules.xr": "1.0.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images/example.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7f51222408eef7a47bf74c21820ad686 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: Android 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: 131 | pSDRemoveMatte: 0 132 | pSDShowRemoveMatteOption: 0 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Packages/Loom/Documentation~/images/result.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68459b2ce258dd54f90575ad6212998f 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: Android 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: 131 | pSDRemoveMatte: 0 132 | pSDShowRemoveMatteOption: 0 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Packages/Loom/README.md: -------------------------------------------------------------------------------- 1 | [English](#english) 2 | 3 | # Loom - Unity多线程工具 4 | 5 | Loom是一个强大的Unity多线程工具,旨在简化多线程编程并实现线程间的数据同步。它提供了一种简单而有效的方式,让非主线程能够安全地操作Unity对象,避免了常见的线程同步问题。 6 | 7 | ## 特点与优势 8 | 9 | - **数据同步**:Loom允许非主线程安全地访问和操作Unity对象,通过提供同步上下文来传递线程执行的结果。 10 | - **易于使用**:使用Loom,您可以轻松地在多线程异步编程中执行任务,并通过简单的API将任务委托到主线程执行。 11 | - **高效性能**:Loom通过合理地利用Unity的PlayerLoop System,在主线程的Update循环中执行任务,保证了最佳的性能和响应性。 12 | 13 | ## 安装和使用 14 | 15 | 1. 在Unity的Package Manager中,将以下链接复制并粘贴到输入框中以完成安装:``https://github.com/Bian-Sh/Loom.git?path=Packages/Loom`` 16 | ![安装](./Documentation~/images/install.png) 17 | 2. 在需要在主线程或非主线程中执行的任务上使用Loom提供的API。 18 | 3. Loom会根据您选择的API自动将任务委托到相应的线程中执行,并确保数据同步的正确性。 19 | 20 | ```csharp 21 | // 使用Loom执行任务的示例代码 22 | // 到主线程执行 23 | await Loom.ToMainThread; 24 | 25 | // 到非主线程执行 26 | await Loom.ToOtherThread; 27 | 28 | // 使用Lambda表达式的方式 29 | Loom.Post(() => 30 | { 31 | Debug.Log($"使用Post线程 ID={Thread.CurrentThread.ManagedThreadId}"); 32 | }); 33 | ``` 34 | 35 | ## 示例应用 36 | 37 | Loom的应用场景广泛,特别适用于以下情况: 38 | 39 | - 在多线程异步编程中需要访问和操作Unity对象。 40 | - 需要在非主线程中执行耗时操作,并在执行完成后将结果传递到主线程。 41 | - 需要实现高效的线程间数据同步和通信。 42 | 43 | ## 注意事项 44 | 45 | - 请确保在使用Loom之前充分了解多线程编程的基本原理和最佳实践。 46 | - 虽然Loom提供了方便的API来执行任务,但仍然需要谨慎处理多线程的相关问题,例如线程安全和数据一致性等。 47 | 48 | Loom工具是提高多线程编程效率的绝佳选择,它简化了异步编程过程,减少了线程同步的复杂性,并提供了高效的数据同步机制。立即尝试Loom,提升您的Unity项目的性能和响应能力! 49 | 50 | [简体中文](#chinese) 51 | 52 | # Loom - Unity Multithreading Tool 53 | 54 | Loom is a powerful Unity tool designed to simplify multithreading programming and achieve data synchronization between threads. It provides a simple and 55 | 56 | efficient way for non-main threads to safely operate Unity objects, avoiding common thread synchronization issues. 57 | 58 | ## Features and Benefits 59 | 60 | - **Data Synchronization**: Loom allows non-main threads to safely access and manipulate Unity objects by providing a synchronization context to pass the results of thread execution. 61 | - **Ease of Use**: With Loom, you can easily execute tasks in multithreaded asynchronous programming and delegate tasks to the main thread for execution through a simple API. 62 | - **High Performance**: Loom optimizes performance and responsiveness by leveraging Unity's PlayerLoop System to execute tasks within the main thread's Update loop. 63 | 64 | ## Installation and Usage 65 | 66 | 1. In Unity's Package Manager, copy and paste the following link into the input field to complete the installation: ``https://github.com/Bian-Sh/Loom.git?path=Packages/Loom`` 67 | ![Installation](./Documentation~/images/install.png) 68 | 2. Use the provided Loom API on tasks that need to be executed on the main thread or non-main thread. 69 | 3. Loom automatically delegates the tasks to the corresponding thread for execution based on the chosen API and ensures the correctness of data synchronization. 70 | 71 | ```csharp 72 | // Example code for executing a task using Loom 73 | // Execute on the main thread 74 | await Loom.ToMainThread; 75 | 76 | // Execute on a non-main thread 77 | await Loom.ToOtherThread; 78 | 79 | // Using the lambda expression syntax 80 | Loom.Post(() => 81 | { 82 | Debug.Log($"Use Post Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 83 | }); 84 | ``` 85 | 86 | ## Example Applications 87 | 88 | Loom has a wide range of applications and is particularly useful in the following scenarios: 89 | 90 | - Accessing and manipulating Unity objects in multithreaded asynchronous programming. 91 | - Performing time-consuming operations on non-main threads and passing the results back to the main thread upon completion. 92 | - Implementing efficient synchronization and communication between threads. 93 | 94 | ## Considerations 95 | 96 | - Make sure to have a solid understanding of multithreading programming principles and best practices before using Loom. 97 | - While Loom provides convenient APIs for task execution, it is still important to handle multithreading-related issues such as thread safety and data consistency with care. 98 | 99 | Loom is an excellent choice for improving the efficiency of multithreading programming. It simplifies the process of asynchronous programming, reduces the complexity of thread synchronization, and provides an efficient mechanism for data synchronization. Give Loom a try now to enhance the performance and responsiveness of your Unity projects! 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [English](#english) 2 | 3 | # Loom - Unity多线程工具 4 | 5 | Loom是一个强大的Unity多线程工具,旨在简化多线程编程并实现线程间的数据同步。它提供了一种简单而有效的方式,让非主线程能够安全地操作Unity对象,避免了常见的线程同步问题。 6 | 7 | ## 特点与优势 8 | 9 | - **数据同步**:Loom允许非主线程安全地访问和操作Unity对象,通过提供同步上下文来传递线程执行的结果。 10 | - **易于使用**:使用Loom,您可以轻松地在多线程异步编程中执行任务,并通过简单的API将任务委托到主线程执行。 11 | - **高效性能**:Loom通过合理地利用Unity的PlayerLoop System,在主线程的Update循环中执行任务,保证了最佳的性能和响应性。 12 | 13 | ## 安装和使用 14 | 15 | 1. 在Unity的Package Manager中,将以下链接复制并粘贴到输入框中以完成安装:``https://github.com/Bian-Sh/Loom.git?path=Packages/Loom`` 16 | 17 | ![安装](Packages/Loom/Documentation~/images/install.png) 18 | 19 | 2. 在需要在主线程或非主线程中执行的任务上使用Loom提供的API。 20 | 21 | 3. Loom会根据您选择的API自动将任务委托到相应的线程中执行,并确保数据同步的正确性。 22 | 23 | ```csharp 24 | // 使用Loom执行任务的示例代码 25 | // 到主线程执行 26 | await Loom.ToMainThread; 27 | 28 | // 到非主线程执行 29 | await Loom.ToOtherThread; 30 | 31 | // 使用Lambda表达式的方式 32 | Loom.Post(() => 33 | { 34 | Debug.Log($"使用Post线程 ID={Thread.CurrentThread.ManagedThreadId}"); 35 | }); 36 | ``` 37 | **友情提示:** 38 | 39 | * 在循环体内请避免使用 ``await Loom.ToMainTread`` 或者 ``await Loom.ToOhterThread`` ,因为这个动作会导致循环体最终变为 **MainThread** 上下文 或者 **OtherTread** 上下文。 40 | 41 | * 在循环体内,你可以使用 Post(xxx) 。 42 | 43 | ## 示例应用 44 | 45 | Loom的应用场景广泛,特别适用于以下情况: 46 | 47 | - 在多线程异步编程中需要访问和操作Unity对象。 48 | - 需要在非主线程中执行耗时操作,并在执行完成后将结果传递到主线程。 49 | - 需要实现高效的线程间数据同步和通信。 50 | 51 | ## 注意事项 52 | 53 | - 请确保在使用Loom之前充分了解多线程编程的基本原理和最佳实践。 54 | - 虽然Loom提供了方便的API来执行任务,但仍然需要谨慎处理多线程的相关问题,例如线程安全和数据一致性等。 55 | 56 | Loom工具是提高多线程编程效率的绝佳选择,它简化了异步编程过程,减少了线程同步的复杂性,并提供了高效的数据同步机制。立即尝试Loom,提升您的Unity项目的性能和响应能力! 57 | 58 | [简体中文](#chinese) 59 | 60 | # Loom - Unity Multithreading Tool 61 | 62 | Loom is a powerful Unity tool designed to simplify multithreading programming and achieve data synchronization between threads. It provides a simple and 63 | 64 | efficient way for non-main threads to safely operate Unity objects, avoiding common thread synchronization issues. 65 | 66 | ## Features and Benefits 67 | 68 | - **Data Synchronization**: Loom allows non-main threads to safely access and manipulate Unity objects by providing a synchronization context to pass the results of thread execution. 69 | - **Ease of Use**: With Loom, you can easily execute tasks in multithreaded asynchronous programming and delegate tasks to the main thread for execution through a simple API. 70 | - **High Performance**: Loom optimizes performance and responsiveness by leveraging Unity's PlayerLoop System to execute tasks within the main thread's Update loop. 71 | 72 | ## Installation and Usage 73 | 74 | 1. In Unity's Package Manager, copy and paste the following link into the input field to complete the installation: ``https://github.com/Bian-Sh/Loom.git?path=Packages/Loom`` 75 | 76 | ![Installation](Packages/Loom/Documentation~/images/install.png) 77 | 78 | 2. Use the provided Loom API on tasks that need to be executed on the main thread or non-main thread. 79 | 80 | 3. Loom automatically delegates the tasks to the corresponding thread for execution based on the chosen API and ensures the correctness of data synchronization. 81 | 82 | ```csharp 83 | // Example code for executing a task using Loom 84 | // Execute on the main thread 85 | await Loom.ToMainThread; 86 | 87 | // Execute on a non-main thread 88 | await Loom.ToOtherThread; 89 | 90 | // Using the lambda expression syntax 91 | Loom.Post(() => 92 | { 93 | Debug.Log($"Use Post Thread ID ={Thread.CurrentThread.ManagedThreadId}"); 94 | }); 95 | ``` 96 | 97 | **Tips:** 98 | * Please avoid using "await Loom.ToMainTread" or "await Loom.ToOhterThread" in the loop body, as this action will cause the loop body to eventually become the **MainThread** context or **OtherTread** context. 99 | 100 | * In the loop body, you can use Post(xxx). 101 | 102 | ## Example Applications 103 | 104 | Loom has a wide range of applications and is particularly useful in the following scenarios: 105 | 106 | - Accessing and manipulating Unity objects in multithreaded asynchronous programming. 107 | - Performing time-consuming operations on non-main threads and passing the results back to the main thread upon completion. 108 | - Implementing efficient synchronization and communication between threads. 109 | 110 | ## Considerations 111 | 112 | - Make sure to have a solid understanding of multithreading programming principles and best practices before using Loom. 113 | - While Loom provides convenient APIs for task execution, it is still important to handle multithreading-related issues such as thread safety and data consistency with care. 114 | -------------------------------------------------------------------------------- /Packages/Loom/Runtime/Loom.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) https://github.com/Bian-Sh 2 | // Licensed under the MIT License. 3 | 4 | using System; 5 | using System.Collections.Concurrent; 6 | using System.Runtime.CompilerServices; 7 | using System.Threading; 8 | #if UNITY_EDITOR 9 | using UnityEditor; 10 | #endif 11 | using UnityEngine; 12 | using UnityEngine.LowLevel; 13 | namespace zFramework.Internal 14 | { 15 | public static class Loom 16 | { 17 | static int mainThreadId; 18 | public static bool IsMainThread => Thread.CurrentThread.ManagedThreadId == mainThreadId; 19 | static readonly ConcurrentQueue tasks = new(); 20 | 21 | [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] 22 | static void Install() 23 | { 24 | mainThreadId = Thread.CurrentThread.ManagedThreadId; 25 | #region 使用 PlayerLoop 在 Unity 主线程的 Update 中更新本任务同步器 26 | // 为了 ref 而 ref 27 | static ref PlayerLoopSystem FindSubSystem(PlayerLoopSystem root, Predicate predicate) 28 | { 29 | for (int i = 0; i < root.subSystemList.Length; i++) 30 | { 31 | if (predicate.Invoke(root.subSystemList[i])) 32 | { 33 | // 可以关注 ref 配合 return 的用法,这样可以直接修改 root.subSystemList[i] 的值 34 | // https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/ref#ref-returns 35 | return ref root.subSystemList[i]; 36 | } 37 | } 38 | throw new Exception("Not Found!"); 39 | } 40 | var rootLoopSystem = PlayerLoop.GetCurrentPlayerLoop(); 41 | ref var sub_pls = ref FindSubSystem(rootLoopSystem, v => v.type == typeof(UnityEngine.PlayerLoop.Update)); 42 | Array.Resize(ref sub_pls.subSystemList, sub_pls.subSystemList.Length + 1); 43 | sub_pls.subSystemList[^1] = new PlayerLoopSystem { type = typeof(Loom), updateDelegate = Update }; 44 | PlayerLoop.SetPlayerLoop(rootLoopSystem); 45 | 46 | #if UNITY_EDITOR 47 | //因为编辑器停止播放后上面插入的 loopsystem 依旧会触发,进入或退出Play 模式先清空 tasks 48 | EditorApplication.playModeStateChanged -= EditorApplication_playModeStateChanged; 49 | EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; 50 | static void EditorApplication_playModeStateChanged(PlayModeStateChange obj) 51 | { 52 | if (obj == PlayModeStateChange.ExitingEditMode || obj == PlayModeStateChange.ExitingPlayMode) 53 | { 54 | while (tasks.TryDequeue(out _)) { }//清空任务列表 55 | } 56 | } 57 | #endif 58 | #endregion 59 | } 60 | 61 | #if UNITY_EDITOR 62 | // 确保编辑器下推送的事件也能被执行 63 | [InitializeOnLoadMethod] 64 | static void EditorForceUpdate() 65 | { 66 | Install(); 67 | EditorApplication.update -= ForceEditorPlayerLoopUpdate; 68 | EditorApplication.update += ForceEditorPlayerLoopUpdate; 69 | static void ForceEditorPlayerLoopUpdate() 70 | { 71 | if (EditorApplication.isPlayingOrWillChangePlaymode || EditorApplication.isCompiling || EditorApplication.isUpdating) 72 | { 73 | return; // Not in Edit mode, don't interfere 74 | } 75 | Update(); 76 | } 77 | } 78 | #endif 79 | 80 | /// 81 | /// 在主线程中执行 82 | /// 83 | /// 要执行的委托 84 | public static void Post(Action task) 85 | { 86 | if (IsMainThread) 87 | { 88 | task?.Invoke(); 89 | } 90 | else 91 | { 92 | tasks.Enqueue(task); 93 | } 94 | } 95 | 96 | static void Update() 97 | { 98 | while (tasks.TryDequeue(out var task)) 99 | { 100 | try 101 | { 102 | task?.Invoke(); 103 | } 104 | catch (Exception e) 105 | { 106 | Debug.Log($"{nameof(Loom)}: 封送的任务执行过程中发现异常,请确认: {e}"); 107 | } 108 | } 109 | } 110 | /// 111 | /// 切换到主线程中执行 112 | /// 113 | public static SwitchToUnityThreadAwaitable ToMainThread => new(); 114 | /// 115 | /// 切换到线程池中执行 116 | /// 117 | public static SwitchToThreadPoolAwaitable ToOtherThread => new(); 118 | public struct SwitchToUnityThreadAwaitable 119 | { 120 | public Awaiter GetAwaiter() => new(); 121 | public struct Awaiter : INotifyCompletion 122 | { 123 | public bool IsCompleted => IsMainThread; 124 | public void GetResult() { } 125 | public void OnCompleted(Action continuation) => Post(continuation); 126 | } 127 | } 128 | public struct SwitchToThreadPoolAwaitable 129 | { 130 | public Awaiter GetAwaiter() => new(); 131 | public struct Awaiter : ICriticalNotifyCompletion 132 | { 133 | static readonly WaitCallback switchToCallback = state => ((Action)state).Invoke(); 134 | public bool IsCompleted => false; 135 | public void GetResult() { } 136 | public void OnCompleted(Action continuation) => ThreadPool.UnsafeQueueUserWorkItem(switchToCallback, continuation); 137 | public void UnsafeOnCompleted(Action continuation) => ThreadPool.UnsafeQueueUserWorkItem(switchToCallback, continuation); 138 | } 139 | } 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "ignore": false, 8 | "defaultInstantiationMode": 0, 9 | "supportsModification": true 10 | }, 11 | { 12 | "userAdded": false, 13 | "type": "UnityEditor.Animations.AnimatorController", 14 | "ignore": false, 15 | "defaultInstantiationMode": 0, 16 | "supportsModification": true 17 | }, 18 | { 19 | "userAdded": false, 20 | "type": "UnityEngine.AnimatorOverrideController", 21 | "ignore": false, 22 | "defaultInstantiationMode": 0, 23 | "supportsModification": true 24 | }, 25 | { 26 | "userAdded": false, 27 | "type": "UnityEditor.Audio.AudioMixerController", 28 | "ignore": false, 29 | "defaultInstantiationMode": 0, 30 | "supportsModification": true 31 | }, 32 | { 33 | "userAdded": false, 34 | "type": "UnityEngine.ComputeShader", 35 | "ignore": true, 36 | "defaultInstantiationMode": 1, 37 | "supportsModification": true 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEngine.Cubemap", 42 | "ignore": false, 43 | "defaultInstantiationMode": 0, 44 | "supportsModification": true 45 | }, 46 | { 47 | "userAdded": false, 48 | "type": "UnityEngine.GameObject", 49 | "ignore": false, 50 | "defaultInstantiationMode": 0, 51 | "supportsModification": true 52 | }, 53 | { 54 | "userAdded": false, 55 | "type": "UnityEditor.LightingDataAsset", 56 | "ignore": false, 57 | "defaultInstantiationMode": 0, 58 | "supportsModification": false 59 | }, 60 | { 61 | "userAdded": false, 62 | "type": "UnityEngine.LightingSettings", 63 | "ignore": false, 64 | "defaultInstantiationMode": 0, 65 | "supportsModification": true 66 | }, 67 | { 68 | "userAdded": false, 69 | "type": "UnityEngine.Material", 70 | "ignore": false, 71 | "defaultInstantiationMode": 0, 72 | "supportsModification": true 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEditor.MonoScript", 77 | "ignore": true, 78 | "defaultInstantiationMode": 1, 79 | "supportsModification": true 80 | }, 81 | { 82 | "userAdded": false, 83 | "type": "UnityEngine.PhysicMaterial", 84 | "ignore": false, 85 | "defaultInstantiationMode": 0, 86 | "supportsModification": true 87 | }, 88 | { 89 | "userAdded": false, 90 | "type": "UnityEngine.PhysicsMaterial2D", 91 | "ignore": false, 92 | "defaultInstantiationMode": 0, 93 | "supportsModification": true 94 | }, 95 | { 96 | "userAdded": false, 97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 98 | "ignore": false, 99 | "defaultInstantiationMode": 0, 100 | "supportsModification": true 101 | }, 102 | { 103 | "userAdded": false, 104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 105 | "ignore": false, 106 | "defaultInstantiationMode": 0, 107 | "supportsModification": true 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Rendering.VolumeProfile", 112 | "ignore": false, 113 | "defaultInstantiationMode": 0, 114 | "supportsModification": true 115 | }, 116 | { 117 | "userAdded": false, 118 | "type": "UnityEditor.SceneAsset", 119 | "ignore": false, 120 | "defaultInstantiationMode": 0, 121 | "supportsModification": false 122 | }, 123 | { 124 | "userAdded": false, 125 | "type": "UnityEngine.Shader", 126 | "ignore": true, 127 | "defaultInstantiationMode": 1, 128 | "supportsModification": true 129 | }, 130 | { 131 | "userAdded": false, 132 | "type": "UnityEngine.ShaderVariantCollection", 133 | "ignore": true, 134 | "defaultInstantiationMode": 1, 135 | "supportsModification": true 136 | }, 137 | { 138 | "userAdded": false, 139 | "type": "UnityEngine.Texture", 140 | "ignore": false, 141 | "defaultInstantiationMode": 0, 142 | "supportsModification": true 143 | }, 144 | { 145 | "userAdded": false, 146 | "type": "UnityEngine.Texture2D", 147 | "ignore": false, 148 | "defaultInstantiationMode": 0, 149 | "supportsModification": true 150 | }, 151 | { 152 | "userAdded": false, 153 | "type": "UnityEngine.Timeline.TimelineAsset", 154 | "ignore": false, 155 | "defaultInstantiationMode": 0, 156 | "supportsModification": true 157 | } 158 | ], 159 | "defaultDependencyTypeInfo": { 160 | "userAdded": false, 161 | "type": "", 162 | "ignore": false, 163 | "defaultInstantiationMode": 1, 164 | "supportsModification": true 165 | }, 166 | "newSceneOverride": 0 167 | } -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | GameCoreScarlett: 5 223 | GameCoreXboxOne: 5 224 | Nintendo 3DS: 5 225 | Nintendo Switch: 5 226 | PS4: 5 227 | PS5: 5 228 | Stadia: 5 229 | Standalone: 5 230 | WebGL: 3 231 | Windows Store Apps: 5 232 | XboxOne: 5 233 | iPhone: 2 234 | tvOS: 2 235 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 705507994} 41 | m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1 &705507993 127 | GameObject: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | serializedVersion: 6 133 | m_Component: 134 | - component: {fileID: 705507995} 135 | - component: {fileID: 705507994} 136 | m_Layer: 0 137 | m_Name: Directional Light 138 | m_TagString: Untagged 139 | m_Icon: {fileID: 0} 140 | m_NavMeshLayer: 0 141 | m_StaticEditorFlags: 0 142 | m_IsActive: 1 143 | --- !u!108 &705507994 144 | Light: 145 | m_ObjectHideFlags: 0 146 | m_CorrespondingSourceObject: {fileID: 0} 147 | m_PrefabInstance: {fileID: 0} 148 | m_PrefabAsset: {fileID: 0} 149 | m_GameObject: {fileID: 705507993} 150 | m_Enabled: 1 151 | serializedVersion: 10 152 | m_Type: 1 153 | m_Shape: 0 154 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 155 | m_Intensity: 1 156 | m_Range: 10 157 | m_SpotAngle: 30 158 | m_InnerSpotAngle: 21.80208 159 | m_CookieSize: 10 160 | m_Shadows: 161 | m_Type: 2 162 | m_Resolution: -1 163 | m_CustomResolution: -1 164 | m_Strength: 1 165 | m_Bias: 0.05 166 | m_NormalBias: 0.4 167 | m_NearPlane: 0.2 168 | m_CullingMatrixOverride: 169 | e00: 1 170 | e01: 0 171 | e02: 0 172 | e03: 0 173 | e10: 0 174 | e11: 1 175 | e12: 0 176 | e13: 0 177 | e20: 0 178 | e21: 0 179 | e22: 1 180 | e23: 0 181 | e30: 0 182 | e31: 0 183 | e32: 0 184 | e33: 1 185 | m_UseCullingMatrixOverride: 0 186 | m_Cookie: {fileID: 0} 187 | m_DrawHalo: 0 188 | m_Flare: {fileID: 0} 189 | m_RenderMode: 0 190 | m_CullingMask: 191 | serializedVersion: 2 192 | m_Bits: 4294967295 193 | m_RenderingLayerMask: 1 194 | m_Lightmapping: 1 195 | m_LightShadowCasterMode: 0 196 | m_AreaSize: {x: 1, y: 1} 197 | m_BounceIntensity: 1 198 | m_ColorTemperature: 6570 199 | m_UseColorTemperature: 0 200 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} 201 | m_UseBoundingSphereOverride: 0 202 | m_UseViewFrustumForShadowCasterCull: 1 203 | m_ShadowRadius: 0 204 | m_ShadowAngle: 0 205 | --- !u!4 &705507995 206 | Transform: 207 | m_ObjectHideFlags: 0 208 | m_CorrespondingSourceObject: {fileID: 0} 209 | m_PrefabInstance: {fileID: 0} 210 | m_PrefabAsset: {fileID: 0} 211 | m_GameObject: {fileID: 705507993} 212 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 213 | m_LocalPosition: {x: 0, y: 3, z: 0} 214 | m_LocalScale: {x: 1, y: 1, z: 1} 215 | m_ConstrainProportionsScale: 0 216 | m_Children: [] 217 | m_Father: {fileID: 0} 218 | m_RootOrder: 1 219 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 220 | --- !u!1001 &935852697 221 | PrefabInstance: 222 | m_ObjectHideFlags: 0 223 | serializedVersion: 2 224 | m_Modification: 225 | m_TransformParent: {fileID: 0} 226 | m_Modifications: 227 | - target: {fileID: 660740916970224100, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 228 | propertyPath: m_Name 229 | value: See Inspector 230 | objectReference: {fileID: 0} 231 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 232 | propertyPath: m_RootOrder 233 | value: 2 234 | objectReference: {fileID: 0} 235 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 236 | propertyPath: m_LocalPosition.x 237 | value: 0 238 | objectReference: {fileID: 0} 239 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 240 | propertyPath: m_LocalPosition.y 241 | value: 0 242 | objectReference: {fileID: 0} 243 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 244 | propertyPath: m_LocalPosition.z 245 | value: 0 246 | objectReference: {fileID: 0} 247 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 248 | propertyPath: m_LocalRotation.w 249 | value: 1 250 | objectReference: {fileID: 0} 251 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 252 | propertyPath: m_LocalRotation.x 253 | value: 0 254 | objectReference: {fileID: 0} 255 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 256 | propertyPath: m_LocalRotation.y 257 | value: 0 258 | objectReference: {fileID: 0} 259 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 260 | propertyPath: m_LocalRotation.z 261 | value: 0 262 | objectReference: {fileID: 0} 263 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 264 | propertyPath: m_LocalEulerAnglesHint.x 265 | value: 0 266 | objectReference: {fileID: 0} 267 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 268 | propertyPath: m_LocalEulerAnglesHint.y 269 | value: 0 270 | objectReference: {fileID: 0} 271 | - target: {fileID: 929091694769506570, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 272 | propertyPath: m_LocalEulerAnglesHint.z 273 | value: 0 274 | objectReference: {fileID: 0} 275 | m_RemovedComponents: [] 276 | m_SourcePrefab: {fileID: 100100000, guid: 381ee2c74524c3c408866e01772d76b2, type: 3} 277 | --- !u!1 &963194225 278 | GameObject: 279 | m_ObjectHideFlags: 0 280 | m_CorrespondingSourceObject: {fileID: 0} 281 | m_PrefabInstance: {fileID: 0} 282 | m_PrefabAsset: {fileID: 0} 283 | serializedVersion: 6 284 | m_Component: 285 | - component: {fileID: 963194228} 286 | - component: {fileID: 963194227} 287 | - component: {fileID: 963194226} 288 | m_Layer: 0 289 | m_Name: Main Camera 290 | m_TagString: MainCamera 291 | m_Icon: {fileID: 0} 292 | m_NavMeshLayer: 0 293 | m_StaticEditorFlags: 0 294 | m_IsActive: 1 295 | --- !u!81 &963194226 296 | AudioListener: 297 | m_ObjectHideFlags: 0 298 | m_CorrespondingSourceObject: {fileID: 0} 299 | m_PrefabInstance: {fileID: 0} 300 | m_PrefabAsset: {fileID: 0} 301 | m_GameObject: {fileID: 963194225} 302 | m_Enabled: 1 303 | --- !u!20 &963194227 304 | Camera: 305 | m_ObjectHideFlags: 0 306 | m_CorrespondingSourceObject: {fileID: 0} 307 | m_PrefabInstance: {fileID: 0} 308 | m_PrefabAsset: {fileID: 0} 309 | m_GameObject: {fileID: 963194225} 310 | m_Enabled: 1 311 | serializedVersion: 2 312 | m_ClearFlags: 1 313 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 314 | m_projectionMatrixMode: 1 315 | m_GateFitMode: 2 316 | m_FOVAxisMode: 0 317 | m_SensorSize: {x: 36, y: 24} 318 | m_LensShift: {x: 0, y: 0} 319 | m_FocalLength: 50 320 | m_NormalizedViewPortRect: 321 | serializedVersion: 2 322 | x: 0 323 | y: 0 324 | width: 1 325 | height: 1 326 | near clip plane: 0.3 327 | far clip plane: 1000 328 | field of view: 60 329 | orthographic: 0 330 | orthographic size: 5 331 | m_Depth: -1 332 | m_CullingMask: 333 | serializedVersion: 2 334 | m_Bits: 4294967295 335 | m_RenderingPath: -1 336 | m_TargetTexture: {fileID: 0} 337 | m_TargetDisplay: 0 338 | m_TargetEye: 3 339 | m_HDR: 1 340 | m_AllowMSAA: 1 341 | m_AllowDynamicResolution: 0 342 | m_ForceIntoRT: 0 343 | m_OcclusionCulling: 1 344 | m_StereoConvergence: 10 345 | m_StereoSeparation: 0.022 346 | --- !u!4 &963194228 347 | Transform: 348 | m_ObjectHideFlags: 0 349 | m_CorrespondingSourceObject: {fileID: 0} 350 | m_PrefabInstance: {fileID: 0} 351 | m_PrefabAsset: {fileID: 0} 352 | m_GameObject: {fileID: 963194225} 353 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 354 | m_LocalPosition: {x: 0, y: 1, z: -10} 355 | m_LocalScale: {x: 1, y: 1, z: 1} 356 | m_ConstrainProportionsScale: 0 357 | m_Children: [] 358 | m_Father: {fileID: 0} 359 | m_RootOrder: 0 360 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 361 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.bshsf.loom": { 4 | "version": "file:Loom", 5 | "depth": 0, 6 | "source": "embedded", 7 | "dependencies": {} 8 | }, 9 | "com.unity.collab-proxy": { 10 | "version": "1.17.2", 11 | "depth": 0, 12 | "source": "registry", 13 | "dependencies": { 14 | "com.unity.services.core": "1.0.1" 15 | }, 16 | "url": "https://packages.unity.cn" 17 | }, 18 | "com.unity.editorcoroutines": { 19 | "version": "1.0.0", 20 | "depth": 1, 21 | "source": "registry", 22 | "dependencies": {}, 23 | "url": "https://packages.unity.cn" 24 | }, 25 | "com.unity.ext.nunit": { 26 | "version": "1.0.6", 27 | "depth": 1, 28 | "source": "registry", 29 | "dependencies": {}, 30 | "url": "https://packages.unity.cn" 31 | }, 32 | "com.unity.feature.development": { 33 | "version": "1.0.1", 34 | "depth": 0, 35 | "source": "builtin", 36 | "dependencies": { 37 | "com.unity.ide.visualstudio": "2.0.16", 38 | "com.unity.ide.rider": "3.0.15", 39 | "com.unity.ide.vscode": "1.2.5", 40 | "com.unity.editorcoroutines": "1.0.0", 41 | "com.unity.performance.profile-analyzer": "1.1.1", 42 | "com.unity.test-framework": "1.1.31", 43 | "com.unity.testtools.codecoverage": "1.0.1" 44 | } 45 | }, 46 | "com.unity.ide.rider": { 47 | "version": "3.0.15", 48 | "depth": 0, 49 | "source": "registry", 50 | "dependencies": { 51 | "com.unity.ext.nunit": "1.0.6" 52 | }, 53 | "url": "https://packages.unity.cn" 54 | }, 55 | "com.unity.ide.visualstudio": { 56 | "version": "2.0.16", 57 | "depth": 0, 58 | "source": "registry", 59 | "dependencies": { 60 | "com.unity.test-framework": "1.1.9" 61 | }, 62 | "url": "https://packages.unity.cn" 63 | }, 64 | "com.unity.ide.vscode": { 65 | "version": "1.2.5", 66 | "depth": 0, 67 | "source": "registry", 68 | "dependencies": {}, 69 | "url": "https://packages.unity.cn" 70 | }, 71 | "com.unity.nuget.mono-cecil": { 72 | "version": "1.10.1", 73 | "depth": 2, 74 | "source": "registry", 75 | "dependencies": {}, 76 | "url": "https://packages.unity.cn" 77 | }, 78 | "com.unity.nuget.newtonsoft-json": { 79 | "version": "3.0.2", 80 | "depth": 1, 81 | "source": "registry", 82 | "dependencies": {}, 83 | "url": "https://packages.unity.cn" 84 | }, 85 | "com.unity.package-validation-suite": { 86 | "version": "0.19.0-preview", 87 | "depth": 1, 88 | "source": "registry", 89 | "dependencies": { 90 | "com.unity.nuget.mono-cecil": "0.1.6-preview.2" 91 | }, 92 | "url": "https://packages.unity.cn" 93 | }, 94 | "com.unity.performance.profile-analyzer": { 95 | "version": "1.1.1", 96 | "depth": 1, 97 | "source": "registry", 98 | "dependencies": {}, 99 | "url": "https://packages.unity.cn" 100 | }, 101 | "com.unity.services.core": { 102 | "version": "1.4.2", 103 | "depth": 1, 104 | "source": "registry", 105 | "dependencies": { 106 | "com.unity.modules.unitywebrequest": "1.0.0", 107 | "com.unity.nuget.newtonsoft-json": "3.0.2", 108 | "com.unity.modules.androidjni": "1.0.0" 109 | }, 110 | "url": "https://packages.unity.cn" 111 | }, 112 | "com.unity.settings-manager": { 113 | "version": "1.0.3", 114 | "depth": 2, 115 | "source": "registry", 116 | "dependencies": {}, 117 | "url": "https://packages.unity.cn" 118 | }, 119 | "com.unity.test-framework": { 120 | "version": "1.1.31", 121 | "depth": 0, 122 | "source": "registry", 123 | "dependencies": { 124 | "com.unity.ext.nunit": "1.0.6", 125 | "com.unity.modules.imgui": "1.0.0", 126 | "com.unity.modules.jsonserialize": "1.0.0" 127 | }, 128 | "url": "https://packages.unity.cn" 129 | }, 130 | "com.unity.testtools.codecoverage": { 131 | "version": "1.0.1", 132 | "depth": 1, 133 | "source": "registry", 134 | "dependencies": { 135 | "com.unity.test-framework": "1.0.16", 136 | "com.unity.settings-manager": "1.0.1" 137 | }, 138 | "url": "https://packages.unity.cn" 139 | }, 140 | "com.unity.textmeshpro": { 141 | "version": "3.0.6", 142 | "depth": 0, 143 | "source": "registry", 144 | "dependencies": { 145 | "com.unity.ugui": "1.0.0" 146 | }, 147 | "url": "https://packages.unity.cn" 148 | }, 149 | "com.unity.timeline": { 150 | "version": "1.6.4", 151 | "depth": 0, 152 | "source": "registry", 153 | "dependencies": { 154 | "com.unity.modules.director": "1.0.0", 155 | "com.unity.modules.animation": "1.0.0", 156 | "com.unity.modules.audio": "1.0.0", 157 | "com.unity.modules.particlesystem": "1.0.0" 158 | }, 159 | "url": "https://packages.unity.cn" 160 | }, 161 | "com.unity.ugui": { 162 | "version": "1.0.0", 163 | "depth": 0, 164 | "source": "builtin", 165 | "dependencies": { 166 | "com.unity.modules.ui": "1.0.0", 167 | "com.unity.modules.imgui": "1.0.0" 168 | } 169 | }, 170 | "com.unity.upm.develop": { 171 | "version": "0.5.0", 172 | "depth": 0, 173 | "source": "registry", 174 | "dependencies": { 175 | "com.unity.test-framework": "1.1.20", 176 | "com.unity.package-validation-suite": "0.19.0-preview", 177 | "com.unity.nuget.newtonsoft-json": "2.0.2" 178 | }, 179 | "url": "https://packages.unity.cn" 180 | }, 181 | "com.unity.visualscripting": { 182 | "version": "1.7.8", 183 | "depth": 0, 184 | "source": "registry", 185 | "dependencies": { 186 | "com.unity.ugui": "1.0.0", 187 | "com.unity.modules.jsonserialize": "1.0.0" 188 | }, 189 | "url": "https://packages.unity.cn" 190 | }, 191 | "com.unity.modules.ai": { 192 | "version": "1.0.0", 193 | "depth": 0, 194 | "source": "builtin", 195 | "dependencies": {} 196 | }, 197 | "com.unity.modules.androidjni": { 198 | "version": "1.0.0", 199 | "depth": 0, 200 | "source": "builtin", 201 | "dependencies": {} 202 | }, 203 | "com.unity.modules.animation": { 204 | "version": "1.0.0", 205 | "depth": 0, 206 | "source": "builtin", 207 | "dependencies": {} 208 | }, 209 | "com.unity.modules.assetbundle": { 210 | "version": "1.0.0", 211 | "depth": 0, 212 | "source": "builtin", 213 | "dependencies": {} 214 | }, 215 | "com.unity.modules.audio": { 216 | "version": "1.0.0", 217 | "depth": 0, 218 | "source": "builtin", 219 | "dependencies": {} 220 | }, 221 | "com.unity.modules.cloth": { 222 | "version": "1.0.0", 223 | "depth": 0, 224 | "source": "builtin", 225 | "dependencies": { 226 | "com.unity.modules.physics": "1.0.0" 227 | } 228 | }, 229 | "com.unity.modules.director": { 230 | "version": "1.0.0", 231 | "depth": 0, 232 | "source": "builtin", 233 | "dependencies": { 234 | "com.unity.modules.audio": "1.0.0", 235 | "com.unity.modules.animation": "1.0.0" 236 | } 237 | }, 238 | "com.unity.modules.imageconversion": { 239 | "version": "1.0.0", 240 | "depth": 0, 241 | "source": "builtin", 242 | "dependencies": {} 243 | }, 244 | "com.unity.modules.imgui": { 245 | "version": "1.0.0", 246 | "depth": 0, 247 | "source": "builtin", 248 | "dependencies": {} 249 | }, 250 | "com.unity.modules.jsonserialize": { 251 | "version": "1.0.0", 252 | "depth": 0, 253 | "source": "builtin", 254 | "dependencies": {} 255 | }, 256 | "com.unity.modules.particlesystem": { 257 | "version": "1.0.0", 258 | "depth": 0, 259 | "source": "builtin", 260 | "dependencies": {} 261 | }, 262 | "com.unity.modules.physics": { 263 | "version": "1.0.0", 264 | "depth": 0, 265 | "source": "builtin", 266 | "dependencies": {} 267 | }, 268 | "com.unity.modules.physics2d": { 269 | "version": "1.0.0", 270 | "depth": 0, 271 | "source": "builtin", 272 | "dependencies": {} 273 | }, 274 | "com.unity.modules.screencapture": { 275 | "version": "1.0.0", 276 | "depth": 0, 277 | "source": "builtin", 278 | "dependencies": { 279 | "com.unity.modules.imageconversion": "1.0.0" 280 | } 281 | }, 282 | "com.unity.modules.subsystems": { 283 | "version": "1.0.0", 284 | "depth": 1, 285 | "source": "builtin", 286 | "dependencies": { 287 | "com.unity.modules.jsonserialize": "1.0.0" 288 | } 289 | }, 290 | "com.unity.modules.terrain": { 291 | "version": "1.0.0", 292 | "depth": 0, 293 | "source": "builtin", 294 | "dependencies": {} 295 | }, 296 | "com.unity.modules.terrainphysics": { 297 | "version": "1.0.0", 298 | "depth": 0, 299 | "source": "builtin", 300 | "dependencies": { 301 | "com.unity.modules.physics": "1.0.0", 302 | "com.unity.modules.terrain": "1.0.0" 303 | } 304 | }, 305 | "com.unity.modules.tilemap": { 306 | "version": "1.0.0", 307 | "depth": 0, 308 | "source": "builtin", 309 | "dependencies": { 310 | "com.unity.modules.physics2d": "1.0.0" 311 | } 312 | }, 313 | "com.unity.modules.ui": { 314 | "version": "1.0.0", 315 | "depth": 0, 316 | "source": "builtin", 317 | "dependencies": {} 318 | }, 319 | "com.unity.modules.uielements": { 320 | "version": "1.0.0", 321 | "depth": 0, 322 | "source": "builtin", 323 | "dependencies": { 324 | "com.unity.modules.ui": "1.0.0", 325 | "com.unity.modules.imgui": "1.0.0", 326 | "com.unity.modules.jsonserialize": "1.0.0", 327 | "com.unity.modules.uielementsnative": "1.0.0" 328 | } 329 | }, 330 | "com.unity.modules.uielementsnative": { 331 | "version": "1.0.0", 332 | "depth": 1, 333 | "source": "builtin", 334 | "dependencies": { 335 | "com.unity.modules.ui": "1.0.0", 336 | "com.unity.modules.imgui": "1.0.0", 337 | "com.unity.modules.jsonserialize": "1.0.0" 338 | } 339 | }, 340 | "com.unity.modules.umbra": { 341 | "version": "1.0.0", 342 | "depth": 0, 343 | "source": "builtin", 344 | "dependencies": {} 345 | }, 346 | "com.unity.modules.unityanalytics": { 347 | "version": "1.0.0", 348 | "depth": 0, 349 | "source": "builtin", 350 | "dependencies": { 351 | "com.unity.modules.unitywebrequest": "1.0.0", 352 | "com.unity.modules.jsonserialize": "1.0.0" 353 | } 354 | }, 355 | "com.unity.modules.unitywebrequest": { 356 | "version": "1.0.0", 357 | "depth": 0, 358 | "source": "builtin", 359 | "dependencies": {} 360 | }, 361 | "com.unity.modules.unitywebrequestassetbundle": { 362 | "version": "1.0.0", 363 | "depth": 0, 364 | "source": "builtin", 365 | "dependencies": { 366 | "com.unity.modules.assetbundle": "1.0.0", 367 | "com.unity.modules.unitywebrequest": "1.0.0" 368 | } 369 | }, 370 | "com.unity.modules.unitywebrequestaudio": { 371 | "version": "1.0.0", 372 | "depth": 0, 373 | "source": "builtin", 374 | "dependencies": { 375 | "com.unity.modules.unitywebrequest": "1.0.0", 376 | "com.unity.modules.audio": "1.0.0" 377 | } 378 | }, 379 | "com.unity.modules.unitywebrequesttexture": { 380 | "version": "1.0.0", 381 | "depth": 0, 382 | "source": "builtin", 383 | "dependencies": { 384 | "com.unity.modules.unitywebrequest": "1.0.0", 385 | "com.unity.modules.imageconversion": "1.0.0" 386 | } 387 | }, 388 | "com.unity.modules.unitywebrequestwww": { 389 | "version": "1.0.0", 390 | "depth": 0, 391 | "source": "builtin", 392 | "dependencies": { 393 | "com.unity.modules.unitywebrequest": "1.0.0", 394 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 395 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 396 | "com.unity.modules.audio": "1.0.0", 397 | "com.unity.modules.assetbundle": "1.0.0", 398 | "com.unity.modules.imageconversion": "1.0.0" 399 | } 400 | }, 401 | "com.unity.modules.vehicles": { 402 | "version": "1.0.0", 403 | "depth": 0, 404 | "source": "builtin", 405 | "dependencies": { 406 | "com.unity.modules.physics": "1.0.0" 407 | } 408 | }, 409 | "com.unity.modules.video": { 410 | "version": "1.0.0", 411 | "depth": 0, 412 | "source": "builtin", 413 | "dependencies": { 414 | "com.unity.modules.audio": "1.0.0", 415 | "com.unity.modules.ui": "1.0.0", 416 | "com.unity.modules.unitywebrequest": "1.0.0" 417 | } 418 | }, 419 | "com.unity.modules.vr": { 420 | "version": "1.0.0", 421 | "depth": 0, 422 | "source": "builtin", 423 | "dependencies": { 424 | "com.unity.modules.jsonserialize": "1.0.0", 425 | "com.unity.modules.physics": "1.0.0", 426 | "com.unity.modules.xr": "1.0.0" 427 | } 428 | }, 429 | "com.unity.modules.wind": { 430 | "version": "1.0.0", 431 | "depth": 0, 432 | "source": "builtin", 433 | "dependencies": {} 434 | }, 435 | "com.unity.modules.xr": { 436 | "version": "1.0.0", 437 | "depth": 0, 438 | "source": "builtin", 439 | "dependencies": { 440 | "com.unity.modules.physics": "1.0.0", 441 | "com.unity.modules.jsonserialize": "1.0.0", 442 | "com.unity.modules.subsystems": "1.0.0" 443 | } 444 | } 445 | } 446 | } 447 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 23 7 | productGUID: 8edc90efe214e1347b22ab5edd0ad95e 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Loom 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_ShowUnitySplashAds: 0 45 | m_AdsAndroidGameId: 46 | m_AdsIosGameId: 47 | m_ShowSplashAdsSlogan: 0 48 | m_SloganImage: {fileID: 0} 49 | m_SloganHeight: 150 50 | m_HolographicTrackingLossScreen: {fileID: 0} 51 | defaultScreenWidth: 1920 52 | defaultScreenHeight: 1080 53 | defaultScreenWidthWeb: 960 54 | defaultScreenHeightWeb: 600 55 | m_StereoRenderingPath: 0 56 | m_ActiveColorSpace: 1 57 | m_MTRendering: 1 58 | mipStripping: 0 59 | numberOfMipsStripped: 0 60 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 61 | iosShowActivityIndicatorOnLoading: -1 62 | androidShowActivityIndicatorOnLoading: -1 63 | iosUseCustomAppBackgroundBehavior: 0 64 | iosAllowHTTPDownload: 1 65 | allowedAutorotateToPortrait: 1 66 | allowedAutorotateToPortraitUpsideDown: 1 67 | allowedAutorotateToLandscapeRight: 1 68 | allowedAutorotateToLandscapeLeft: 1 69 | useOSAutorotation: 1 70 | use32BitDisplayBuffer: 1 71 | preserveFramebufferAlpha: 0 72 | disableDepthAndStencilBuffers: 0 73 | androidStartInFullscreen: 1 74 | androidRenderOutsideSafeArea: 1 75 | androidUseSwappy: 1 76 | androidBlitType: 0 77 | androidResizableWindow: 0 78 | androidDefaultWindowWidth: 1920 79 | androidDefaultWindowHeight: 1080 80 | androidMinimumWindowWidth: 400 81 | androidMinimumWindowHeight: 300 82 | androidFullscreenMode: 1 83 | defaultIsNativeResolution: 1 84 | macRetinaSupport: 1 85 | runInBackground: 1 86 | captureSingleScreen: 0 87 | muteOtherAudioSources: 0 88 | Prepare IOS For Recording: 0 89 | Force IOS Speakers When Recording: 0 90 | deferSystemGesturesMode: 0 91 | hideHomeButton: 0 92 | submitAnalytics: 1 93 | usePlayerLog: 1 94 | autoStreaming: 0 95 | useAnimationStreaming: 0 96 | useFontStreaming: 0 97 | autoStreamingId: 98 | instantGameAppId: 99 | bakeCollisionMeshes: 0 100 | forceSingleInstance: 0 101 | useFlipModelSwapchain: 1 102 | resizableWindow: 0 103 | useMacAppStoreValidation: 0 104 | macAppStoreCategory: public.app-category.games 105 | gpuSkinning: 1 106 | xboxPIXTextureCapture: 0 107 | xboxEnableAvatar: 0 108 | xboxEnableKinect: 0 109 | xboxEnableKinectAutoTracking: 0 110 | xboxEnableFitness: 0 111 | visibleInBackground: 1 112 | allowFullscreenSwitch: 1 113 | fullscreenMode: 3 114 | xboxSpeechDB: 0 115 | xboxEnableHeadOrientation: 0 116 | xboxEnableGuest: 0 117 | xboxEnablePIXSampling: 0 118 | metalFramebufferOnly: 0 119 | xboxOneResolution: 0 120 | xboxOneSResolution: 0 121 | xboxOneXResolution: 3 122 | xboxOneMonoLoggingLevel: 0 123 | xboxOneLoggingLevel: 1 124 | xboxOneDisableEsram: 0 125 | xboxOneEnableTypeOptimization: 0 126 | xboxOnePresentImmediateThreshold: 0 127 | switchQueueCommandMemory: 0 128 | switchQueueControlMemory: 16384 129 | switchQueueComputeMemory: 262144 130 | switchNVNShaderPoolsGranularity: 33554432 131 | switchNVNDefaultPoolsGranularity: 16777216 132 | switchNVNOtherPoolsGranularity: 16777216 133 | switchNVNMaxPublicTextureIDCount: 0 134 | switchNVNMaxPublicSamplerIDCount: 0 135 | stadiaPresentMode: 0 136 | stadiaTargetFramerate: 0 137 | vulkanNumSwapchainBuffers: 3 138 | vulkanEnableSetSRGBWrite: 0 139 | vulkanEnablePreTransform: 1 140 | vulkanEnableLateAcquireNextImage: 0 141 | vulkanEnableCommandBufferRecycling: 1 142 | m_SupportedAspectRatios: 143 | 4:3: 1 144 | 5:4: 1 145 | 16:10: 1 146 | 16:9: 1 147 | Others: 1 148 | bundleVersion: 0.1 149 | preloadedAssets: [] 150 | metroInputSource: 0 151 | wsaTransparentSwapchain: 0 152 | m_HolographicPauseOnTrackingLoss: 1 153 | xboxOneDisableKinectGpuReservation: 1 154 | xboxOneEnable7thCore: 1 155 | vrSettings: 156 | enable360StereoCapture: 0 157 | isWsaHolographicRemotingEnabled: 0 158 | enableFrameTimingStats: 0 159 | enableOpenGLProfilerGPURecorders: 1 160 | useHDRDisplay: 0 161 | D3DHDRBitDepth: 0 162 | m_ColorGamuts: 00000000 163 | targetPixelDensity: 30 164 | resolutionScalingMode: 0 165 | resetResolutionOnWindowResize: 0 166 | androidSupportedAspectRatio: 1 167 | androidMaxAspectRatio: 2.1 168 | applicationIdentifier: {} 169 | buildNumber: 170 | Standalone: 0 171 | iPhone: 0 172 | tvOS: 0 173 | overrideDefaultApplicationIdentifier: 0 174 | AndroidBundleVersionCode: 1 175 | AndroidMinSdkVersion: 22 176 | AndroidTargetSdkVersion: 0 177 | AndroidPreferredInstallLocation: 1 178 | aotOptions: 179 | stripEngineCode: 1 180 | iPhoneStrippingLevel: 0 181 | iPhoneScriptCallOptimization: 0 182 | ForceInternetPermission: 0 183 | ForceSDCardPermission: 0 184 | CreateWallpaper: 0 185 | APKExpansionFiles: 0 186 | keepLoadedShadersAlive: 0 187 | StripUnusedMeshComponents: 1 188 | VertexChannelCompressionMask: 4054 189 | iPhoneSdkVersion: 988 190 | iOSTargetOSVersionString: 11.0 191 | tvOSSdkVersion: 0 192 | tvOSRequireExtendedGameController: 0 193 | tvOSTargetOSVersionString: 11.0 194 | uIPrerenderedIcon: 0 195 | uIRequiresPersistentWiFi: 0 196 | uIRequiresFullScreen: 1 197 | uIStatusBarHidden: 1 198 | uIExitOnSuspend: 0 199 | uIStatusBarStyle: 0 200 | appleTVSplashScreen: {fileID: 0} 201 | appleTVSplashScreen2x: {fileID: 0} 202 | tvOSSmallIconLayers: [] 203 | tvOSSmallIconLayers2x: [] 204 | tvOSLargeIconLayers: [] 205 | tvOSLargeIconLayers2x: [] 206 | tvOSTopShelfImageLayers: [] 207 | tvOSTopShelfImageLayers2x: [] 208 | tvOSTopShelfImageWideLayers: [] 209 | tvOSTopShelfImageWideLayers2x: [] 210 | iOSLaunchScreenType: 0 211 | iOSLaunchScreenPortrait: {fileID: 0} 212 | iOSLaunchScreenLandscape: {fileID: 0} 213 | iOSLaunchScreenBackgroundColor: 214 | serializedVersion: 2 215 | rgba: 0 216 | iOSLaunchScreenFillPct: 100 217 | iOSLaunchScreenSize: 100 218 | iOSLaunchScreenCustomXibPath: 219 | iOSLaunchScreeniPadType: 0 220 | iOSLaunchScreeniPadImage: {fileID: 0} 221 | iOSLaunchScreeniPadBackgroundColor: 222 | serializedVersion: 2 223 | rgba: 0 224 | iOSLaunchScreeniPadFillPct: 100 225 | iOSLaunchScreeniPadSize: 100 226 | iOSLaunchScreeniPadCustomXibPath: 227 | iOSLaunchScreenCustomStoryboardPath: 228 | iOSLaunchScreeniPadCustomStoryboardPath: 229 | iOSDeviceRequirements: [] 230 | iOSURLSchemes: [] 231 | macOSURLSchemes: [] 232 | iOSBackgroundModes: 0 233 | iOSMetalForceHardShadows: 0 234 | metalEditorSupport: 1 235 | metalAPIValidation: 1 236 | iOSRenderExtraFrameOnPause: 0 237 | iosCopyPluginsCodeInsteadOfSymlink: 0 238 | appleDeveloperTeamID: 239 | iOSManualSigningProvisioningProfileID: 240 | tvOSManualSigningProvisioningProfileID: 241 | iOSManualSigningProvisioningProfileType: 0 242 | tvOSManualSigningProvisioningProfileType: 0 243 | appleEnableAutomaticSigning: 0 244 | iOSRequireARKit: 0 245 | iOSAutomaticallyDetectAndAddCapabilities: 1 246 | appleEnableProMotion: 0 247 | shaderPrecisionModel: 0 248 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 249 | templatePackageId: com.unity.template.3d@8.1.3 250 | templateDefaultScene: Assets/Scenes/SampleScene.unity 251 | useCustomMainManifest: 0 252 | useCustomLauncherManifest: 0 253 | useCustomMainGradleTemplate: 0 254 | useCustomLauncherGradleManifest: 0 255 | useCustomBaseGradleTemplate: 0 256 | useCustomGradlePropertiesTemplate: 0 257 | useCustomProguardFile: 0 258 | AndroidTargetArchitectures: 1 259 | AndroidTargetDevices: 0 260 | AndroidSplashScreenScale: 0 261 | androidSplashScreen: {fileID: 0} 262 | AndroidKeystoreName: 263 | AndroidKeyaliasName: 264 | AndroidBuildApkPerCpuArchitecture: 0 265 | AndroidTVCompatibility: 0 266 | AndroidIsGame: 1 267 | AndroidEnableTango: 0 268 | androidEnableBanner: 1 269 | androidUseLowAccuracyLocation: 0 270 | androidUseCustomKeystore: 0 271 | m_AndroidBanners: 272 | - width: 320 273 | height: 180 274 | banner: {fileID: 0} 275 | androidGamepadSupportLevel: 0 276 | chromeosInputEmulation: 1 277 | AndroidMinifyWithR8: 0 278 | AndroidMinifyRelease: 0 279 | AndroidMinifyDebug: 0 280 | AndroidValidateAppBundleSize: 1 281 | AndroidAppBundleSizeToValidate: 150 282 | m_BuildTargetIcons: [] 283 | m_BuildTargetPlatformIcons: 284 | - m_BuildTarget: Android 285 | m_Icons: 286 | - m_Textures: [] 287 | m_Width: 432 288 | m_Height: 432 289 | m_Kind: 2 290 | m_SubKind: 291 | - m_Textures: [] 292 | m_Width: 324 293 | m_Height: 324 294 | m_Kind: 2 295 | m_SubKind: 296 | - m_Textures: [] 297 | m_Width: 216 298 | m_Height: 216 299 | m_Kind: 2 300 | m_SubKind: 301 | - m_Textures: [] 302 | m_Width: 162 303 | m_Height: 162 304 | m_Kind: 2 305 | m_SubKind: 306 | - m_Textures: [] 307 | m_Width: 108 308 | m_Height: 108 309 | m_Kind: 2 310 | m_SubKind: 311 | - m_Textures: [] 312 | m_Width: 81 313 | m_Height: 81 314 | m_Kind: 2 315 | m_SubKind: 316 | - m_Textures: [] 317 | m_Width: 192 318 | m_Height: 192 319 | m_Kind: 1 320 | m_SubKind: 321 | - m_Textures: [] 322 | m_Width: 144 323 | m_Height: 144 324 | m_Kind: 1 325 | m_SubKind: 326 | - m_Textures: [] 327 | m_Width: 96 328 | m_Height: 96 329 | m_Kind: 1 330 | m_SubKind: 331 | - m_Textures: [] 332 | m_Width: 72 333 | m_Height: 72 334 | m_Kind: 1 335 | m_SubKind: 336 | - m_Textures: [] 337 | m_Width: 48 338 | m_Height: 48 339 | m_Kind: 1 340 | m_SubKind: 341 | - m_Textures: [] 342 | m_Width: 36 343 | m_Height: 36 344 | m_Kind: 1 345 | m_SubKind: 346 | - m_Textures: [] 347 | m_Width: 192 348 | m_Height: 192 349 | m_Kind: 0 350 | m_SubKind: 351 | - m_Textures: [] 352 | m_Width: 144 353 | m_Height: 144 354 | m_Kind: 0 355 | m_SubKind: 356 | - m_Textures: [] 357 | m_Width: 96 358 | m_Height: 96 359 | m_Kind: 0 360 | m_SubKind: 361 | - m_Textures: [] 362 | m_Width: 72 363 | m_Height: 72 364 | m_Kind: 0 365 | m_SubKind: 366 | - m_Textures: [] 367 | m_Width: 48 368 | m_Height: 48 369 | m_Kind: 0 370 | m_SubKind: 371 | - m_Textures: [] 372 | m_Width: 36 373 | m_Height: 36 374 | m_Kind: 0 375 | m_SubKind: 376 | m_BuildTargetBatching: 377 | - m_BuildTarget: Standalone 378 | m_StaticBatching: 1 379 | m_DynamicBatching: 0 380 | - m_BuildTarget: tvOS 381 | m_StaticBatching: 1 382 | m_DynamicBatching: 0 383 | - m_BuildTarget: Android 384 | m_StaticBatching: 1 385 | m_DynamicBatching: 0 386 | - m_BuildTarget: iPhone 387 | m_StaticBatching: 1 388 | m_DynamicBatching: 0 389 | - m_BuildTarget: WebGL 390 | m_StaticBatching: 0 391 | m_DynamicBatching: 0 392 | m_BuildTargetGraphicsJobs: 393 | - m_BuildTarget: MacStandaloneSupport 394 | m_GraphicsJobs: 0 395 | - m_BuildTarget: Switch 396 | m_GraphicsJobs: 1 397 | - m_BuildTarget: MetroSupport 398 | m_GraphicsJobs: 1 399 | - m_BuildTarget: AppleTVSupport 400 | m_GraphicsJobs: 0 401 | - m_BuildTarget: BJMSupport 402 | m_GraphicsJobs: 1 403 | - m_BuildTarget: LinuxStandaloneSupport 404 | m_GraphicsJobs: 1 405 | - m_BuildTarget: PS4Player 406 | m_GraphicsJobs: 1 407 | - m_BuildTarget: iOSSupport 408 | m_GraphicsJobs: 0 409 | - m_BuildTarget: WindowsStandaloneSupport 410 | m_GraphicsJobs: 1 411 | - m_BuildTarget: XboxOnePlayer 412 | m_GraphicsJobs: 1 413 | - m_BuildTarget: LuminSupport 414 | m_GraphicsJobs: 0 415 | - m_BuildTarget: AndroidPlayer 416 | m_GraphicsJobs: 0 417 | - m_BuildTarget: WebGLSupport 418 | m_GraphicsJobs: 0 419 | m_BuildTargetGraphicsJobMode: 420 | - m_BuildTarget: PS4Player 421 | m_GraphicsJobMode: 0 422 | - m_BuildTarget: XboxOnePlayer 423 | m_GraphicsJobMode: 0 424 | m_BuildTargetGraphicsAPIs: 425 | - m_BuildTarget: AndroidPlayer 426 | m_APIs: 150000000b000000 427 | m_Automatic: 1 428 | - m_BuildTarget: iOSSupport 429 | m_APIs: 10000000 430 | m_Automatic: 1 431 | - m_BuildTarget: AppleTVSupport 432 | m_APIs: 10000000 433 | m_Automatic: 1 434 | - m_BuildTarget: WebGLSupport 435 | m_APIs: 0b000000 436 | m_Automatic: 1 437 | m_BuildTargetVRSettings: 438 | - m_BuildTarget: Standalone 439 | m_Enabled: 0 440 | m_Devices: 441 | - Oculus 442 | - OpenVR 443 | openGLRequireES31: 0 444 | openGLRequireES31AEP: 0 445 | openGLRequireES32: 0 446 | m_TemplateCustomTags: {} 447 | mobileMTRendering: 448 | Android: 1 449 | iPhone: 1 450 | tvOS: 1 451 | m_BuildTargetGroupLightmapEncodingQuality: 452 | - m_BuildTarget: Android 453 | m_EncodingQuality: 1 454 | - m_BuildTarget: iPhone 455 | m_EncodingQuality: 1 456 | - m_BuildTarget: tvOS 457 | m_EncodingQuality: 1 458 | m_BuildTargetGroupLightmapSettings: [] 459 | m_BuildTargetNormalMapEncoding: 460 | - m_BuildTarget: Android 461 | m_Encoding: 1 462 | - m_BuildTarget: iPhone 463 | m_Encoding: 1 464 | - m_BuildTarget: tvOS 465 | m_Encoding: 1 466 | m_BuildTargetDefaultTextureCompressionFormat: 467 | - m_BuildTarget: Android 468 | m_Format: 3 469 | playModeTestRunnerEnabled: 0 470 | runPlayModeTestAsEditModeTest: 0 471 | actionOnDotNetUnhandledException: 1 472 | enableInternalProfiler: 0 473 | logObjCUncaughtExceptions: 1 474 | enableCrashReportAPI: 0 475 | cameraUsageDescription: 476 | locationUsageDescription: 477 | microphoneUsageDescription: 478 | bluetoothUsageDescription: 479 | switchNMETAOverride: 480 | switchNetLibKey: 481 | switchSocketMemoryPoolSize: 6144 482 | switchSocketAllocatorPoolSize: 128 483 | switchSocketConcurrencyLimit: 14 484 | switchScreenResolutionBehavior: 2 485 | switchUseCPUProfiler: 0 486 | switchUseGOLDLinker: 0 487 | switchLTOSetting: 0 488 | switchApplicationID: 0x01004b9000490000 489 | switchNSODependencies: 490 | switchTitleNames_0: 491 | switchTitleNames_1: 492 | switchTitleNames_2: 493 | switchTitleNames_3: 494 | switchTitleNames_4: 495 | switchTitleNames_5: 496 | switchTitleNames_6: 497 | switchTitleNames_7: 498 | switchTitleNames_8: 499 | switchTitleNames_9: 500 | switchTitleNames_10: 501 | switchTitleNames_11: 502 | switchTitleNames_12: 503 | switchTitleNames_13: 504 | switchTitleNames_14: 505 | switchTitleNames_15: 506 | switchPublisherNames_0: 507 | switchPublisherNames_1: 508 | switchPublisherNames_2: 509 | switchPublisherNames_3: 510 | switchPublisherNames_4: 511 | switchPublisherNames_5: 512 | switchPublisherNames_6: 513 | switchPublisherNames_7: 514 | switchPublisherNames_8: 515 | switchPublisherNames_9: 516 | switchPublisherNames_10: 517 | switchPublisherNames_11: 518 | switchPublisherNames_12: 519 | switchPublisherNames_13: 520 | switchPublisherNames_14: 521 | switchPublisherNames_15: 522 | switchIcons_0: {fileID: 0} 523 | switchIcons_1: {fileID: 0} 524 | switchIcons_2: {fileID: 0} 525 | switchIcons_3: {fileID: 0} 526 | switchIcons_4: {fileID: 0} 527 | switchIcons_5: {fileID: 0} 528 | switchIcons_6: {fileID: 0} 529 | switchIcons_7: {fileID: 0} 530 | switchIcons_8: {fileID: 0} 531 | switchIcons_9: {fileID: 0} 532 | switchIcons_10: {fileID: 0} 533 | switchIcons_11: {fileID: 0} 534 | switchIcons_12: {fileID: 0} 535 | switchIcons_13: {fileID: 0} 536 | switchIcons_14: {fileID: 0} 537 | switchIcons_15: {fileID: 0} 538 | switchSmallIcons_0: {fileID: 0} 539 | switchSmallIcons_1: {fileID: 0} 540 | switchSmallIcons_2: {fileID: 0} 541 | switchSmallIcons_3: {fileID: 0} 542 | switchSmallIcons_4: {fileID: 0} 543 | switchSmallIcons_5: {fileID: 0} 544 | switchSmallIcons_6: {fileID: 0} 545 | switchSmallIcons_7: {fileID: 0} 546 | switchSmallIcons_8: {fileID: 0} 547 | switchSmallIcons_9: {fileID: 0} 548 | switchSmallIcons_10: {fileID: 0} 549 | switchSmallIcons_11: {fileID: 0} 550 | switchSmallIcons_12: {fileID: 0} 551 | switchSmallIcons_13: {fileID: 0} 552 | switchSmallIcons_14: {fileID: 0} 553 | switchSmallIcons_15: {fileID: 0} 554 | switchManualHTML: 555 | switchAccessibleURLs: 556 | switchLegalInformation: 557 | switchMainThreadStackSize: 1048576 558 | switchPresenceGroupId: 559 | switchLogoHandling: 0 560 | switchReleaseVersion: 0 561 | switchDisplayVersion: 1.0.0 562 | switchStartupUserAccount: 0 563 | switchTouchScreenUsage: 0 564 | switchSupportedLanguagesMask: 0 565 | switchLogoType: 0 566 | switchApplicationErrorCodeCategory: 567 | switchUserAccountSaveDataSize: 0 568 | switchUserAccountSaveDataJournalSize: 0 569 | switchApplicationAttribute: 0 570 | switchCardSpecSize: -1 571 | switchCardSpecClock: -1 572 | switchRatingsMask: 0 573 | switchRatingsInt_0: 0 574 | switchRatingsInt_1: 0 575 | switchRatingsInt_2: 0 576 | switchRatingsInt_3: 0 577 | switchRatingsInt_4: 0 578 | switchRatingsInt_5: 0 579 | switchRatingsInt_6: 0 580 | switchRatingsInt_7: 0 581 | switchRatingsInt_8: 0 582 | switchRatingsInt_9: 0 583 | switchRatingsInt_10: 0 584 | switchRatingsInt_11: 0 585 | switchRatingsInt_12: 0 586 | switchLocalCommunicationIds_0: 587 | switchLocalCommunicationIds_1: 588 | switchLocalCommunicationIds_2: 589 | switchLocalCommunicationIds_3: 590 | switchLocalCommunicationIds_4: 591 | switchLocalCommunicationIds_5: 592 | switchLocalCommunicationIds_6: 593 | switchLocalCommunicationIds_7: 594 | switchParentalControl: 0 595 | switchAllowsScreenshot: 1 596 | switchAllowsVideoCapturing: 1 597 | switchAllowsRuntimeAddOnContentInstall: 0 598 | switchDataLossConfirmation: 0 599 | switchUserAccountLockEnabled: 0 600 | switchSystemResourceMemory: 16777216 601 | switchSupportedNpadStyles: 22 602 | switchNativeFsCacheSize: 32 603 | switchIsHoldTypeHorizontal: 0 604 | switchSupportedNpadCount: 8 605 | switchSocketConfigEnabled: 0 606 | switchTcpInitialSendBufferSize: 32 607 | switchTcpInitialReceiveBufferSize: 64 608 | switchTcpAutoSendBufferSizeMax: 256 609 | switchTcpAutoReceiveBufferSizeMax: 256 610 | switchUdpSendBufferSize: 9 611 | switchUdpReceiveBufferSize: 42 612 | switchSocketBufferEfficiency: 4 613 | switchSocketInitializeEnabled: 1 614 | switchNetworkInterfaceManagerInitializeEnabled: 1 615 | switchPlayerConnectionEnabled: 1 616 | switchUseNewStyleFilepaths: 0 617 | switchUseMicroSleepForYield: 1 618 | switchEnableRamDiskSupport: 0 619 | switchMicroSleepForYieldTime: 25 620 | switchRamDiskSpaceSize: 12 621 | ps4NPAgeRating: 12 622 | ps4NPTitleSecret: 623 | ps4NPTrophyPackPath: 624 | ps4ParentalLevel: 11 625 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 626 | ps4Category: 0 627 | ps4MasterVersion: 01.00 628 | ps4AppVersion: 01.00 629 | ps4AppType: 0 630 | ps4ParamSfxPath: 631 | ps4VideoOutPixelFormat: 0 632 | ps4VideoOutInitialWidth: 1920 633 | ps4VideoOutBaseModeInitialWidth: 1920 634 | ps4VideoOutReprojectionRate: 60 635 | ps4PronunciationXMLPath: 636 | ps4PronunciationSIGPath: 637 | ps4BackgroundImagePath: 638 | ps4StartupImagePath: 639 | ps4StartupImagesFolder: 640 | ps4IconImagesFolder: 641 | ps4SaveDataImagePath: 642 | ps4SdkOverride: 643 | ps4BGMPath: 644 | ps4ShareFilePath: 645 | ps4ShareOverlayImagePath: 646 | ps4PrivacyGuardImagePath: 647 | ps4ExtraSceSysFile: 648 | ps4NPtitleDatPath: 649 | ps4RemotePlayKeyAssignment: -1 650 | ps4RemotePlayKeyMappingDir: 651 | ps4PlayTogetherPlayerCount: 0 652 | ps4EnterButtonAssignment: 1 653 | ps4ApplicationParam1: 0 654 | ps4ApplicationParam2: 0 655 | ps4ApplicationParam3: 0 656 | ps4ApplicationParam4: 0 657 | ps4DownloadDataSize: 0 658 | ps4GarlicHeapSize: 2048 659 | ps4ProGarlicHeapSize: 2560 660 | playerPrefsMaxSize: 32768 661 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 662 | ps4pnSessions: 1 663 | ps4pnPresence: 1 664 | ps4pnFriends: 1 665 | ps4pnGameCustomData: 1 666 | playerPrefsSupport: 0 667 | enableApplicationExit: 0 668 | resetTempFolder: 1 669 | restrictedAudioUsageRights: 0 670 | ps4UseResolutionFallback: 0 671 | ps4ReprojectionSupport: 0 672 | ps4UseAudio3dBackend: 0 673 | ps4UseLowGarlicFragmentationMode: 1 674 | ps4SocialScreenEnabled: 0 675 | ps4ScriptOptimizationLevel: 0 676 | ps4Audio3dVirtualSpeakerCount: 14 677 | ps4attribCpuUsage: 0 678 | ps4PatchPkgPath: 679 | ps4PatchLatestPkgPath: 680 | ps4PatchChangeinfoPath: 681 | ps4PatchDayOne: 0 682 | ps4attribUserManagement: 0 683 | ps4attribMoveSupport: 0 684 | ps4attrib3DSupport: 0 685 | ps4attribShareSupport: 0 686 | ps4attribExclusiveVR: 0 687 | ps4disableAutoHideSplash: 0 688 | ps4videoRecordingFeaturesUsed: 0 689 | ps4contentSearchFeaturesUsed: 0 690 | ps4CompatibilityPS5: 0 691 | ps4AllowPS5Detection: 0 692 | ps4GPU800MHz: 1 693 | ps4attribEyeToEyeDistanceSettingVR: 0 694 | ps4IncludedModules: [] 695 | ps4attribVROutputEnabled: 0 696 | monoEnv: 697 | splashScreenBackgroundSourceLandscape: {fileID: 0} 698 | splashScreenBackgroundSourcePortrait: {fileID: 0} 699 | blurSplashScreenBackground: 1 700 | spritePackerPolicy: 701 | webGLMemorySize: 16 702 | webGLExceptionSupport: 1 703 | webGLNameFilesAsHashes: 0 704 | webGLDataCaching: 1 705 | webGLDebugSymbols: 0 706 | webGLEmscriptenArgs: 707 | webGLModulesDirectory: 708 | webGLTemplate: APPLICATION:Default 709 | webGLAnalyzeBuildSize: 0 710 | webGLUseEmbeddedResources: 0 711 | webGLCompressionFormat: 1 712 | webGLWasmArithmeticExceptions: 0 713 | webGLLinkerTarget: 1 714 | webGLThreadsSupport: 0 715 | webGLDecompressionFallback: 0 716 | scriptingDefineSymbols: {} 717 | additionalCompilerArguments: {} 718 | platformArchitecture: {} 719 | scriptingBackend: {} 720 | il2cppCompilerConfiguration: {} 721 | managedStrippingLevel: {} 722 | incrementalIl2cppBuild: {} 723 | suppressCommonWarnings: 1 724 | allowUnsafeCode: 0 725 | useDeterministicCompilation: 1 726 | enableRoslynAnalyzers: 1 727 | additionalIl2CppArgs: 728 | scriptingRuntimeVersion: 1 729 | gcIncremental: 1 730 | assemblyVersionValidation: 1 731 | gcWBarrierValidation: 0 732 | apiCompatibilityLevelPerPlatform: {} 733 | m_RenderingPath: 1 734 | m_MobileRenderingPath: 1 735 | metroPackageName: Template_3D 736 | metroPackageVersion: 737 | metroCertificatePath: 738 | metroCertificatePassword: 739 | metroCertificateSubject: 740 | metroCertificateIssuer: 741 | metroCertificateNotAfter: 0000000000000000 742 | metroApplicationDescription: Template_3D 743 | wsaImages: {} 744 | metroTileShortName: 745 | metroTileShowName: 0 746 | metroMediumTileShowName: 0 747 | metroLargeTileShowName: 0 748 | metroWideTileShowName: 0 749 | metroSupportStreamingInstall: 0 750 | metroLastRequiredScene: 0 751 | metroDefaultTileSize: 1 752 | metroTileForegroundText: 2 753 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 754 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 755 | metroSplashScreenUseBackgroundColor: 0 756 | platformCapabilities: {} 757 | metroTargetDeviceFamilies: {} 758 | metroFTAName: 759 | metroFTAFileTypes: [] 760 | metroProtocolName: 761 | vcxProjDefaultLanguage: 762 | XboxOneProductId: 763 | XboxOneUpdateKey: 764 | XboxOneSandboxId: 765 | XboxOneContentId: 766 | XboxOneTitleId: 767 | XboxOneSCId: 768 | XboxOneGameOsOverridePath: 769 | XboxOnePackagingOverridePath: 770 | XboxOneAppManifestOverridePath: 771 | XboxOneVersion: 1.0.0.0 772 | XboxOnePackageEncryption: 0 773 | XboxOnePackageUpdateGranularity: 2 774 | XboxOneDescription: 775 | XboxOneLanguage: 776 | - enus 777 | XboxOneCapability: [] 778 | XboxOneGameRating: {} 779 | XboxOneIsContentPackage: 0 780 | XboxOneEnhancedXboxCompatibilityMode: 0 781 | XboxOneEnableGPUVariability: 1 782 | XboxOneSockets: {} 783 | XboxOneSplashScreen: {fileID: 0} 784 | XboxOneAllowedProductIds: [] 785 | XboxOnePersistentLocalStorageSize: 0 786 | XboxOneXTitleMemory: 8 787 | XboxOneOverrideIdentityName: 788 | XboxOneOverrideIdentityPublisher: 789 | vrEditorSettings: {} 790 | cloudServicesEnabled: 791 | UNet: 1 792 | luminIcon: 793 | m_Name: 794 | m_ModelFolderPath: 795 | m_PortalFolderPath: 796 | luminCert: 797 | m_CertPath: 798 | m_SignPackage: 1 799 | luminIsChannelApp: 0 800 | luminVersion: 801 | m_VersionCode: 1 802 | m_VersionName: 803 | apiCompatibilityLevel: 6 804 | activeInputHandler: 0 805 | cloudProjectId: 806 | framebufferDepthMemorylessMode: 0 807 | qualitySettingsNames: [] 808 | projectName: 809 | organizationId: 810 | cloudEnabled: 0 811 | legacyClampBlendShapeWeights: 0 812 | playerDataPath: 813 | forceSRGBBlit: 1 814 | virtualTexturingSupportEnabled: 0 815 | --------------------------------------------------------------------------------