├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── DemoProject ├── Assets │ ├── DemoAddOnCreator.meta │ ├── DemoAddOnCreator │ │ ├── MyModifiedBlenderCube.meta │ │ └── MyModifiedBlenderCube │ │ │ ├── FBX.meta │ │ │ ├── FBX │ │ │ ├── ModifiedBlenderCube.fbx │ │ │ └── ModifiedBlenderCube.fbx.meta │ │ │ ├── Patcher.meta │ │ │ ├── Patcher │ │ │ ├── Data.meta │ │ │ ├── Data │ │ │ │ ├── DiffFiles.meta │ │ │ │ ├── DiffFiles │ │ │ │ │ ├── BlenderCube.hdiff │ │ │ │ │ ├── BlenderCube.hdiff.meta │ │ │ │ │ ├── BlenderCubeMeta.hdiff │ │ │ │ │ └── BlenderCubeMeta.hdiff.meta │ │ │ │ ├── hdiff.meta │ │ │ │ └── hdiff │ │ │ │ │ ├── hpatchz.meta │ │ │ │ │ └── hpatchz │ │ │ │ │ ├── License.txt │ │ │ │ │ ├── License.txt.meta │ │ │ │ │ ├── Linux.meta │ │ │ │ │ ├── Linux │ │ │ │ │ ├── hpatchz │ │ │ │ │ └── hpatchz.meta │ │ │ │ │ ├── Mac.meta │ │ │ │ │ ├── Mac │ │ │ │ │ ├── hpatchz │ │ │ │ │ └── hpatchz.meta │ │ │ │ │ ├── Windows.meta │ │ │ │ │ └── Windows │ │ │ │ │ ├── hpatchz.exe │ │ │ │ │ └── hpatchz.exe.meta │ │ │ ├── Editor.meta │ │ │ └── Editor │ │ │ │ ├── ModifiedBlenderCube_Patcher.cs │ │ │ │ └── ModifiedBlenderCube_Patcher.cs.meta │ │ │ ├── Prefab.meta │ │ │ └── Prefab │ │ │ ├── ModifiedBlenderCubePrefab.prefab │ │ │ └── ModifiedBlenderCubePrefab.prefab.meta │ ├── DemoCreator.meta │ ├── DemoCreator │ │ ├── BlenderCube.meta │ │ └── BlenderCube │ │ │ ├── fbx.meta │ │ │ ├── fbx │ │ │ ├── BlenderCube.fbx │ │ │ └── BlenderCube.fbx.meta │ │ │ ├── prefab.meta │ │ │ └── prefab │ │ │ ├── BlenderCubePrefab Variant.prefab │ │ │ └── BlenderCubePrefab Variant.prefab.meta │ ├── Hash's_Things.meta │ ├── Hash's_Things │ │ ├── EditDistributor.meta │ │ └── EditDistributor │ │ │ ├── Editor.meta │ │ │ ├── Editor │ │ │ ├── CommunFonctions.cs │ │ │ ├── CommunFonctions.cs.meta │ │ │ ├── EditDistributorBuilder.cs │ │ │ ├── EditDistributorBuilder.cs.meta │ │ │ ├── EditDistributorUpdater.cs │ │ │ ├── EditDistributorUpdater.cs.meta │ │ │ ├── PatcherTemplate.cs │ │ │ └── PatcherTemplate.cs.meta │ │ │ ├── hdiff.meta │ │ │ └── hdiff │ │ │ ├── License.txt │ │ │ ├── License.txt.meta │ │ │ ├── hdiffz.meta │ │ │ ├── hdiffz │ │ │ ├── License.txt │ │ │ ├── License.txt.meta │ │ │ ├── Linux.meta │ │ │ ├── Linux │ │ │ │ ├── hdiffz │ │ │ │ └── hdiffz.meta │ │ │ ├── Mac.meta │ │ │ ├── Mac │ │ │ │ ├── hdiffz │ │ │ │ └── hdiffz.meta │ │ │ ├── Windows.meta │ │ │ └── Windows │ │ │ │ ├── hdiffz.exe │ │ │ │ └── hdiffz.exe.meta │ │ │ ├── hpatchz.meta │ │ │ └── hpatchz │ │ │ ├── License.txt │ │ │ ├── License.txt.meta │ │ │ ├── Linux.meta │ │ │ ├── Linux │ │ │ ├── hpatchz │ │ │ └── hpatchz.meta │ │ │ ├── Mac.meta │ │ │ ├── Mac │ │ │ ├── hpatchz │ │ │ └── hpatchz.meta │ │ │ ├── Windows.meta │ │ │ └── Windows │ │ │ ├── hpatchz.exe │ │ │ └── hpatchz.exe.meta │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── Packages │ ├── manifest.json │ └── packages-lock.json └── ProjectSettings │ ├── AudioManager.asset │ ├── ClusterInputManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── MemorySettings.asset │ ├── NavMeshAreas.asset │ ├── PackageManagerSettings.asset │ ├── Packages │ └── com.unity.testtools.codecoverage │ │ └── Settings.json │ ├── Physics2DSettings.asset │ ├── PresetManager.asset │ ├── ProjectSettings.asset │ ├── ProjectVersion.txt │ ├── QualitySettings.asset │ ├── SceneTemplateSettings.json │ ├── TagManager.asset │ ├── TimeManager.asset │ ├── UnityConnectSettings.asset │ ├── VFXManager.asset │ ├── VersionControlSettings.asset │ └── XRSettings.asset ├── LICENSE ├── README.md ├── ReadMeFiles ├── Builderwindowindex.png ├── Builderwindowindexwithnumbers.png ├── Remplaced strings sampledescription.png ├── Updaterwindowindex.png ├── Updaterwindowindexwithnumbers.pdn ├── Updaterwindowindexwithnumbers.png ├── distribution_tools_thumbnail.pdn ├── distribution_tools_thumbnail.png ├── header.png └── sampledescription.png ├── Releases ├── EditDistributionTools-v2.0.unitypackage ├── EditDistributionTools-v2.1.unitypackage ├── EditDistributionTools-v2.2.1.unitypackage ├── EditDistributionTools-v2.2.2.unitypackage ├── EditDistributionTools-v2.2.unitypackage └── EditDistributionTools-v2.3.unitypackage ├── demo cube.blend └── demo packages ├── MyCubeDescriptions ├── SampleDescription EN.txt └── SampleDescription FR.txt ├── SampleCube Patcher.unitypackage ├── SampleCube v1.0.unitypackage └── SampleDescriptions ├── SampleDescription EN.txt └── SampleDescription FR.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: hashedits -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### 2 | # Unity folders and files 3 | ### 4 | DemoProject/Assets/AssetStoreTools* 5 | DemoProject/Build/ 6 | DemoProject/Library/* 7 | DemoProject/Local[Cc]ache 8 | DemoProject/Obj/ 9 | DemoProject/Temp/ 10 | DemoProject/Logs/ 11 | DemoProject/UnityGenerated/ 12 | DemoProject/UserSettings/ 13 | DemoProject/Exports/ 14 | 15 | # My project excludes 16 | 17 | 18 | DemoProject/[Uu]nityPackages/ 19 | DemoProject/[Tt]hry/ 20 | DemoProject/[Rr]esources/ 21 | DemoProject/[Pp]rojectSettings/ 22 | 23 | 24 | # file on crash reports 25 | DemoProject/sysinfo.txt 26 | 27 | # Unity3D generated meta files 28 | *.pidb.meta 29 | 30 | # Visual Studio cache directory 31 | .vs/ 32 | 33 | ### 34 | # VS/MD solution and project files 35 | ### 36 | DemoProject/[Ee]xportedObj/ 37 | *.booproj 38 | *.csproj 39 | *.sln 40 | *.suo 41 | *.svd 42 | *.unityproj 43 | *.user 44 | *.userprefs 45 | *.pidb 46 | .DS_Store 47 | 48 | ### 49 | # OS generated 50 | ### 51 | .DS_Store 52 | .DS_Store? 53 | ._* 54 | .Spotlight-V100 55 | .Trashes 56 | ehthumbs.db 57 | Thumbs.db 58 | 59 | # Builds 60 | *.apk 61 | 62 | .rsp2 63 | /DemoProject/Library/PackageCache 64 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 37d71d1e74d707b468a09a4df3ddcbc7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f764d9cab4fba04883db35f2af451bd 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/FBX.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ac66273cfe8d3b24eb2384ef1578c654 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/FBX/ModifiedBlenderCube.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/FBX/ModifiedBlenderCube.fbx -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/FBX/ModifiedBlenderCube.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f35b654f336c8de46ab4cb21accf911b 3 | ModelImporter: 4 | serializedVersion: 22200 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 2 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | removeConstantScaleCurves: 0 18 | motionNodeName: 19 | rigImportErrors: "Invalid Avatar Rig Configuration. Missing or invalid transform:\n\tRequired 20 | human bone 'LeftUpperLeg' not found\n" 21 | rigImportWarnings: 22 | animationImportErrors: 23 | animationImportWarnings: 24 | animationRetargetingWarnings: 25 | animationDoRetargetingWarnings: 0 26 | importAnimatedCustomProperties: 0 27 | importConstraints: 0 28 | animationCompression: 3 29 | animationRotationError: 0.5 30 | animationPositionError: 0.5 31 | animationScaleError: 0.5 32 | animationWrapMode: 0 33 | extraExposedTransformPaths: [] 34 | extraUserProperties: [] 35 | clipAnimations: [] 36 | isReadable: 0 37 | meshes: 38 | lODScreenPercentages: [] 39 | globalScale: 1 40 | meshCompression: 0 41 | addColliders: 0 42 | useSRGBMaterialColor: 1 43 | sortHierarchyByName: 1 44 | importPhysicalCameras: 1 45 | importVisibility: 1 46 | importBlendShapes: 1 47 | importCameras: 1 48 | importLights: 1 49 | nodeNameCollisionStrategy: 1 50 | fileIdsGeneration: 2 51 | swapUVChannels: 0 52 | generateSecondaryUV: 0 53 | useFileUnits: 1 54 | keepQuads: 0 55 | weldVertices: 1 56 | bakeAxisConversion: 0 57 | preserveHierarchy: 0 58 | skinWeightsMode: 0 59 | maxBonesPerVertex: 4 60 | minBoneWeight: 0.001 61 | optimizeBones: 1 62 | meshOptimizationFlags: -1 63 | indexFormat: 0 64 | secondaryUVAngleDistortion: 8 65 | secondaryUVAreaDistortion: 15.000001 66 | secondaryUVHardAngle: 88 67 | secondaryUVMarginMethod: 1 68 | secondaryUVMinLightmapResolution: 40 69 | secondaryUVMinObjectScale: 1 70 | secondaryUVPackMargin: 4 71 | useFileScale: 1 72 | strictVertexDataChecks: 0 73 | tangentSpace: 74 | normalSmoothAngle: 60 75 | normalImportMode: 0 76 | tangentImportMode: 3 77 | normalCalculationMode: 4 78 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 79 | blendShapeNormalImportMode: 1 80 | normalSmoothingSource: 0 81 | referencedClips: [] 82 | importAnimation: 1 83 | humanDescription: 84 | serializedVersion: 3 85 | human: 86 | - boneName: Bone 87 | humanName: Hips 88 | limit: 89 | min: {x: 0, y: 0, z: 0} 90 | max: {x: 0, y: 0, z: 0} 91 | value: {x: 0, y: 0, z: 0} 92 | length: 0 93 | modified: 0 94 | - boneName: Bone_end 95 | humanName: Spine 96 | limit: 97 | min: {x: 0, y: 0, z: 0} 98 | max: {x: 0, y: 0, z: 0} 99 | value: {x: 0, y: 0, z: 0} 100 | length: 0 101 | modified: 0 102 | skeleton: 103 | - name: ;ModifiedBlenderCube(Clone) 104 | parentName: 105 | position: {x: -0, y: 0, z: 0} 106 | rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067} 107 | scale: {x: 1, y: 1, z: 1} 108 | - name: Cube 109 | parentName: ;ModifiedBlenderCube(Clone) 110 | position: {x: -0, y: 0, z: 0} 111 | rotation: {x: 0, y: -0, z: -0, w: 1} 112 | scale: {x: 1, y: 1, z: 1} 113 | - name: Bone 114 | parentName: ;ModifiedBlenderCube(Clone) 115 | position: {x: -0, y: 0, z: 0} 116 | rotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071067} 117 | scale: {x: 1, y: 1, z: 1} 118 | - name: Bone_end 119 | parentName: Bone 120 | position: {x: -0, y: 1, z: 0} 121 | rotation: {x: 0, y: -0, z: -0, w: 1} 122 | scale: {x: 1, y: 1, z: 1} 123 | armTwist: 0.5 124 | foreArmTwist: 0.5 125 | upperLegTwist: 0.5 126 | legTwist: 0.5 127 | armStretch: 0.05 128 | legStretch: 0.05 129 | feetSpacing: 0 130 | globalScale: 1 131 | rootMotionBoneName: 132 | hasTranslationDoF: 0 133 | hasExtraRoot: 0 134 | skeletonHasParents: 1 135 | lastHumanDescriptionAvatarSource: {instanceID: 0} 136 | autoGenerateAvatarMappingIfUnspecified: 1 137 | animationType: 3 138 | humanoidOversampling: 1 139 | avatarSetup: 1 140 | addHumanoidExtraRootOnlyWhenUsingAvatar: 1 141 | importBlendShapeDeformPercent: 1 142 | remapMaterialsIfMaterialImportModeIsNone: 0 143 | additionalBone: 0 144 | userData: 145 | assetBundleName: 146 | assetBundleVariant: 147 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: deb29a76c573c6e4b921a46553cae7e3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 201345e414dfab145a3c5d8d14594374 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a56a9aee0e487f34eb79f77fb62fdac8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCube.hdiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCube.hdiff -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCube.hdiff.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 10028fa2d3546874bac082d268366108 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCubeMeta.hdiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCubeMeta.hdiff -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/DiffFiles/BlenderCubeMeta.hdiff.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5974efaf74e888246bd781eb744daa54 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2068ccc20200e984ba8d995540b0c590 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 76479c099d272924abbb27d7f5db0be1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/License.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | HDiffPatch 4 | Copyright (c) 2012-2022 housisong 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | 24 | ---------------------------------------------------------------------------------- 25 | 26 | libdivsufsort 27 | Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. 28 | 29 | Permission is hereby granted, free of charge, to any person 30 | obtaining a copy of this software and associated documentation 31 | files (the "Software"), to deal in the Software without 32 | restriction, including without limitation the rights to use, 33 | copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the 35 | Software is furnished to do so, subject to the following 36 | conditions: 37 | 38 | The above copyright notice and this permission notice shall be 39 | included in all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 42 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 43 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 44 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 45 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 47 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 48 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/License.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e4098aa32b68fc42a34a291224c62fd 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Linux.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98ace124717dec34482828b0b9338b88 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Linux/hpatchz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Linux/hpatchz -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Linux/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d0874cfe2f80914183fb46dad901107 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Mac.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f15e8cdeef7edc848b0084a81087c063 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Mac/hpatchz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Mac/hpatchz -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Mac/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc37bf72c1724f4d880bee1b4347d3a 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Windows.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 392c7d97e8ef8264dbd706cbe0ad43bf 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Windows/hpatchz.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Windows/hpatchz.exe -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Data/hdiff/hpatchz/Windows/hpatchz.exe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0dab0ed7c6ba07c49a953f816fdf596e 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d64222973ebd2f3428c9802833bc8fec 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Editor/ModifiedBlenderCube_Patcher.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEditor; 4 | using System; 5 | using System.IO; 6 | using System.Diagnostics; 7 | using System.Collections; 8 | using System.Runtime.InteropServices; 9 | 10 | public class ModifiedBlenderCube_Patcher : EditorWindow 11 | { 12 | private static bool Debug = false; 13 | private static string OGfbxPath = @"DemoCreator" + Path.DirectorySeparatorChar + @"BlenderCube" + Path.DirectorySeparatorChar + @"fbx" + Path.DirectorySeparatorChar + @"BlenderCube.fbx"; 14 | private static string CustomfbxPath = @"DemoAddOnCreator" + Path.DirectorySeparatorChar + @"MyModifiedBlenderCube" + Path.DirectorySeparatorChar + @"FBX" + Path.DirectorySeparatorChar + @"ModifiedBlenderCube.fbx"; 15 | private byte debugMessage = 0; 16 | private static string AvatarVersion = @"SampleCube v1.0.unitypackage"; 17 | private bool PatchButtonHasBeenPressed = false; 18 | 19 | [MenuItem(@"Tools/DemoAddOnCreator/BlenderCube Patcher")] 20 | public static void ShowWindow() 21 | { 22 | ModifiedBlenderCube_Patcher window = GetWindow(@"ModifiedBlenderCube_Patcher"); 23 | if (!Debug) window.maxSize = new Vector2(442, 223); 24 | if (Debug) window.maxSize = new Vector2(1000, 700); 25 | window.Show(); 26 | } 27 | 28 | void OnGUI() 29 | { 30 | 31 | GUIStyle boldLabelStyle = new GUIStyle(EditorStyles.boldLabel); 32 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 33 | { 34 | 35 | EditorGUILayout.Space(20); 36 | 37 | EditorGUILayout.BeginHorizontal(); 38 | GUILayout.FlexibleSpace(); 39 | GUILayout.Label(@"DemoAddOnCreator" + "'s "+ @"BlenderCube", boldLabelStyle); 40 | GUILayout.FlexibleSpace(); 41 | EditorGUILayout.EndHorizontal(); 42 | 43 | string currentOGfbxPath = Path.Combine(Application.dataPath, OGfbxPath); 44 | 45 | string currentCustomfbxPath = Path.Combine(Application.dataPath, CustomfbxPath); 46 | 47 | string hpatchz = ""; 48 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Windows", "hpatchz.exe"); 49 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Linux", "hpatchz"); 50 | if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Mac", "hpatchz"); 51 | 52 | string FBXDiffFile = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "DiffFiles", Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + ".hdiff"); 53 | string MetaDiffFile = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "DiffFiles", Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + "Meta.hdiff"); 54 | string fbxfolder = GoUpNDirs(currentCustomfbxPath, 1); 55 | 56 | if (Debug) ShowDebugMessages(currentOGfbxPath, FBXDiffFile, MetaDiffFile, currentCustomfbxPath); 57 | 58 | 59 | 60 | EditorGUILayout.Space(20); 61 | if (!File.Exists(currentOGfbxPath)) 62 | { 63 | AddBoldCenteredLabel("Please make sure your have the original FBX in: " + GoUpNDirs(OGfbxPath, 1)); 64 | debugMessage = 1; 65 | } 66 | else if (File.Exists(currentCustomfbxPath)) 67 | { 68 | AddBoldCenteredLabel("Edited model is already in the folder Enjoy :)"); 69 | debugMessage = 2; 70 | } 71 | else if (!(File.Exists(FBXDiffFile) && File.Exists(MetaDiffFile))) 72 | { 73 | AddBoldCenteredLabel("Please make sure your have diff files in: " + GoUpNDirs(FBXDiffFile, 1)); 74 | debugMessage = 3; 75 | } 76 | else if (PatchButtonHasBeenPressed) 77 | { 78 | if (debugMessage == 4) 79 | { 80 | 81 | } 82 | else 83 | { 84 | debugMessage = 0; 85 | PatchButtonHasBeenPressed = false; 86 | } 87 | 88 | } 89 | else 90 | { 91 | debugMessage = 0; 92 | } 93 | 94 | 95 | if (debugMessage == 0 || debugMessage == 4) 96 | { 97 | if (GUILayout.Button("Patch")) 98 | { 99 | PatchButtonHasBeenPressed = true; 100 | if (Directory.Exists(fbxfolder)) 101 | { 102 | if (Debug) UnityEngine.Debug.Log("fbx exists"); 103 | } 104 | else 105 | { 106 | Directory.CreateDirectory(fbxfolder); 107 | } 108 | 109 | string arguments = "\"" + currentOGfbxPath + ".meta\" \"" + MetaDiffFile + "\" \"" + currentCustomfbxPath + ".meta\""; 110 | if (Debug) UnityEngine.Debug.Log("meta Arguments: " + arguments); 111 | if (LaunchProgramWithArguments(hpatchz, arguments, currentCustomfbxPath + ".meta") == true) 112 | { 113 | debugMessage = 5; 114 | //communicate to the user that something went wrong during the patching process of the meta file 115 | 116 | } 117 | else 118 | { 119 | debugMessage = 6;//it workey 120 | DeleteAllFilesInDirectory(Path.Combine(GoUpNDirs(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 1), "LocalLow", "VRChat", "VRChat", "OSC")); 121 | 122 | } 123 | 124 | arguments = "\"" + currentOGfbxPath + "\" \"" + FBXDiffFile + "\" \"" + currentCustomfbxPath + "\""; 125 | if (Debug) UnityEngine.Debug.Log("FBX Arguments: " + arguments); 126 | if (LaunchProgramWithArguments(hpatchz, arguments, currentCustomfbxPath) == true) 127 | { 128 | debugMessage = 4; 129 | //communicate to the user that something went wrong during the patching process of the FBX 130 | } 131 | else 132 | { 133 | debugMessage = 6;//it workey 134 | DeleteAllFilesInDirectory(Path.Combine(GoUpNDirs(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 1), "LocalLow", "VRChat", "VRChat", "OSC")); 135 | } 136 | 137 | 138 | 139 | AssetDatabase.Refresh(); 140 | 141 | 142 | } 143 | } 144 | 145 | 146 | 147 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 148 | { 149 | 150 | switch (debugMessage) 151 | { 152 | case 0: 153 | //please click the button 154 | AddBoldCenteredLabel("Please click the button above to patch your model :)"); 155 | EditorGUILayout.Space(10); 156 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion); 157 | AddBoldCenteredLabel("to import the original avatar in your project"); 158 | break; 159 | case 4: 160 | //fbx fucked up 161 | AddBoldCenteredLabel("/!\\ Something went wrong during the patching of the FBX /!\\ "); 162 | EditorGUILayout.Space(10); 163 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion); 164 | AddBoldCenteredLabel("to import the original avatar in your project"); 165 | break; 166 | case 5: 167 | //meta fucked up 168 | AddBoldCenteredLabel("/!\\ Something went wrong during the patching of the import file /!\\ "); 169 | EditorGUILayout.Space(10); 170 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion + "to import the original avatar in your project"); 171 | break; 172 | case 6: 173 | AddBoldCenteredLabel("FBX patched, get to the prefab folder to enjoy your product"); 174 | break; 175 | default: 176 | break; 177 | 178 | 179 | } 180 | 181 | } 182 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 183 | { 184 | EditorGUILayout.BeginHorizontal(); 185 | GUILayout.FlexibleSpace(); 186 | if (GUILayout.Button("This package is using Hash's Edit Distributor", EditorStyles.linkLabel)) 187 | { 188 | Application.OpenURL("https://github.com/HashEdits/Face-Tracking-Patcher"); 189 | } 190 | GUILayout.FlexibleSpace(); 191 | EditorGUILayout.EndHorizontal(); 192 | } 193 | } 194 | 195 | } 196 | 197 | 198 | private static string GoUpNDirs(string MyDir, int n) 199 | { 200 | MyDir = MyDir.TrimEnd(Path.PathSeparator); 201 | for (var i = 0; i < n; i++) 202 | MyDir = Path.GetDirectoryName(MyDir); 203 | return MyDir; 204 | } 205 | 206 | 207 | private static bool LaunchProgramWithArguments(string programPath, string arguments, string destinationFile) 208 | { 209 | try 210 | { 211 | var process = new Process 212 | { 213 | StartInfo = new ProcessStartInfo() 214 | { 215 | FileName = programPath, 216 | Arguments = arguments, 217 | WorkingDirectory = Application.dataPath, 218 | UseShellExecute = false, 219 | RedirectStandardError = true, 220 | RedirectStandardInput = true, 221 | RedirectStandardOutput = true, 222 | CreateNoWindow = true, 223 | } 224 | 225 | }; 226 | 227 | 228 | process.Start(); 229 | string output = process.StandardOutput.ReadToEnd(); 230 | UnityEngine.Debug.Log(output); 231 | if (!File.Exists(destinationFile)) 232 | { 233 | return true; 234 | } 235 | process.WaitForExit(); 236 | 237 | return false; 238 | 239 | } 240 | catch (Exception e) 241 | { 242 | UnityEngine.Debug.Log(e.Message); 243 | //SaveStringToFile(e.Message, " ", Application.dataPath + "/Logs", "Error crash " + Path.GetFileNameWithoutExtension(CustomfbxPath) + " Patcher " + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log"); 244 | return true; 245 | } 246 | } 247 | 248 | private static bool SaveStringToFile(string inputString, string searchString, string saveDirectory, string fileName) 249 | { 250 | if (inputString.Contains(searchString)) 251 | { 252 | try 253 | { 254 | // Ensure the directory exists 255 | Directory.CreateDirectory(saveDirectory); 256 | 257 | // Combine the directory and filename to get the full path 258 | string filePath = Path.Combine(saveDirectory, fileName); 259 | 260 | // Write the input string to the file 261 | File.WriteAllText(filePath, inputString); 262 | 263 | if (Debug) UnityEngine.Debug.Log("Something went wrong, please get in contact and provide: " + filePath + "/" + fileName); 264 | return true; 265 | } 266 | catch (Exception e) 267 | { 268 | UnityEngine.Debug.Log($"Error saving string to file: {e.Message}"); 269 | return true; 270 | } 271 | } 272 | else 273 | { 274 | return false; 275 | } 276 | 277 | } 278 | 279 | private void AddBoldCenteredLabel(string mymessage) 280 | { 281 | EditorGUILayout.LabelField(mymessage, EditorStyles.boldLabel); 282 | } 283 | 284 | private void ShowDebugMessages(string currentOGfbxPath, string FBXDiffFile, string MetaDiffFile, string currentCustomfbxPath) 285 | { 286 | GUILayout.Label("OGfbxPath: " + currentOGfbxPath); 287 | GUILayout.Label("OGfbxPath exists: " + File.Exists(currentOGfbxPath)); 288 | 289 | GUILayout.Label("FBXDiffFile: " + FBXDiffFile); 290 | GUILayout.Label("MetaDiffFile: " + MetaDiffFile); 291 | 292 | GUILayout.Label("FBXDiffFile exists: " + File.Exists(FBXDiffFile)); 293 | GUILayout.Label("MetaDiffFile exists: " + File.Exists(MetaDiffFile)); 294 | EditorGUILayout.Space(10); 295 | GUILayout.Label("arguments fed to hpatchz: " + currentOGfbxPath + "\" \"" + FBXDiffFile + "\" \"" + currentCustomfbxPath + "\""); 296 | } 297 | 298 | public static void DeleteAllFilesInDirectory(string directoryPath) 299 | { 300 | try 301 | { 302 | // Check if the directory exists 303 | if (Directory.Exists(directoryPath)) 304 | { 305 | // Get all files in the directory 306 | string[] files = Directory.GetFiles(directoryPath); 307 | 308 | // Delete each file 309 | foreach (string filePath in files) 310 | { 311 | File.Delete(filePath); 312 | UnityEngine.Debug.Log($"File deleted: {filePath}"); 313 | } 314 | 315 | UnityEngine.Debug.Log("Deletion process completed successfully."); 316 | } 317 | else 318 | { 319 | UnityEngine.Debug.Log("Directory does not exist."); 320 | } 321 | } 322 | catch (Exception ex) 323 | { 324 | UnityEngine.Debug.Log($"An error occurred: {ex.Message}"); 325 | } 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Patcher/Editor/ModifiedBlenderCube_Patcher.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 43bba86a2a93314409b0668adf25a725 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 427444366ffc14441ad528e8d9e98d13 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Prefab/ModifiedBlenderCubePrefab.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &2698403207346673579 4 | PrefabInstance: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Modification: 8 | serializedVersion: 3 9 | m_TransformParent: {fileID: 0} 10 | m_Modifications: 11 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 12 | propertyPath: m_LocalPosition.x 13 | value: -0 14 | objectReference: {fileID: 0} 15 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 16 | propertyPath: m_LocalPosition.y 17 | value: 0 18 | objectReference: {fileID: 0} 19 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 20 | propertyPath: m_LocalPosition.z 21 | value: 0 22 | objectReference: {fileID: 0} 23 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 24 | propertyPath: m_LocalRotation.w 25 | value: 0.7071067 26 | objectReference: {fileID: 0} 27 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 28 | propertyPath: m_LocalRotation.x 29 | value: -0.7071068 30 | objectReference: {fileID: 0} 31 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 32 | propertyPath: m_LocalRotation.y 33 | value: 0 34 | objectReference: {fileID: 0} 35 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 36 | propertyPath: m_LocalRotation.z 37 | value: -0 38 | objectReference: {fileID: 0} 39 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 40 | propertyPath: m_LocalEulerAnglesHint.x 41 | value: 0 42 | objectReference: {fileID: 0} 43 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 44 | propertyPath: m_LocalEulerAnglesHint.y 45 | value: 0 46 | objectReference: {fileID: 0} 47 | - target: {fileID: -8679921383154817045, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 48 | propertyPath: m_LocalEulerAnglesHint.z 49 | value: 0 50 | objectReference: {fileID: 0} 51 | - target: {fileID: 919132149155446097, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 52 | propertyPath: m_Name 53 | value: ModifiedBlenderCubePrefab Variant 54 | objectReference: {fileID: 0} 55 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 56 | propertyPath: m_DirtyAABB 57 | value: 0 58 | objectReference: {fileID: 0} 59 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 60 | propertyPath: m_AABB.m_Center.x 61 | value: -0.2671271 62 | objectReference: {fileID: 0} 63 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 64 | propertyPath: m_AABB.m_Center.y 65 | value: 0.2695433 66 | objectReference: {fileID: 0} 67 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 68 | propertyPath: m_AABB.m_Center.z 69 | value: 0.6974677 70 | objectReference: {fileID: 0} 71 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 72 | propertyPath: m_AABB.m_Extent.x 73 | value: 2.0283003 74 | objectReference: {fileID: 0} 75 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 76 | propertyPath: m_AABB.m_Extent.y 77 | value: 2.895296 78 | objectReference: {fileID: 0} 79 | - target: {fileID: 8417361359673230750, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 80 | propertyPath: m_AABB.m_Extent.z 81 | value: 2.143733 82 | objectReference: {fileID: 0} 83 | m_RemovedComponents: [] 84 | m_RemovedGameObjects: [] 85 | m_AddedGameObjects: [] 86 | m_AddedComponents: [] 87 | m_SourcePrefab: {fileID: 100100000, guid: f35b654f336c8de46ab4cb21accf911b, type: 3} 88 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoAddOnCreator/MyModifiedBlenderCube/Prefab/ModifiedBlenderCubePrefab.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a9af8a90b456f2a469eba93bdece077b 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b7cacf02ca12644bbb5d7bc26bb6a30 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d44b98067cc2a8f44b013b4d665628ae 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aeaf09ceae5adad4d90941f2aeaf5048 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/fbx/BlenderCube.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/DemoCreator/BlenderCube/fbx/BlenderCube.fbx -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/fbx/BlenderCube.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 72fa06b76840a1640b2e17a419863e91 3 | ModelImporter: 4 | serializedVersion: 22200 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 2 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | removeConstantScaleCurves: 0 18 | motionNodeName: 19 | rigImportErrors: 20 | rigImportWarnings: 21 | animationImportErrors: 22 | animationImportWarnings: 23 | animationRetargetingWarnings: 24 | animationDoRetargetingWarnings: 0 25 | importAnimatedCustomProperties: 0 26 | importConstraints: 0 27 | animationCompression: 3 28 | animationRotationError: 0.5 29 | animationPositionError: 0.5 30 | animationScaleError: 0.5 31 | animationWrapMode: 0 32 | extraExposedTransformPaths: [] 33 | extraUserProperties: [] 34 | clipAnimations: [] 35 | isReadable: 0 36 | meshes: 37 | lODScreenPercentages: [] 38 | globalScale: 1 39 | meshCompression: 0 40 | addColliders: 0 41 | useSRGBMaterialColor: 1 42 | sortHierarchyByName: 1 43 | importPhysicalCameras: 1 44 | importVisibility: 1 45 | importBlendShapes: 1 46 | importCameras: 1 47 | importLights: 1 48 | nodeNameCollisionStrategy: 1 49 | fileIdsGeneration: 2 50 | swapUVChannels: 0 51 | generateSecondaryUV: 0 52 | useFileUnits: 1 53 | keepQuads: 0 54 | weldVertices: 1 55 | bakeAxisConversion: 0 56 | preserveHierarchy: 0 57 | skinWeightsMode: 0 58 | maxBonesPerVertex: 4 59 | minBoneWeight: 0.001 60 | optimizeBones: 1 61 | meshOptimizationFlags: -1 62 | indexFormat: 0 63 | secondaryUVAngleDistortion: 8 64 | secondaryUVAreaDistortion: 15.000001 65 | secondaryUVHardAngle: 88 66 | secondaryUVMarginMethod: 1 67 | secondaryUVMinLightmapResolution: 40 68 | secondaryUVMinObjectScale: 1 69 | secondaryUVPackMargin: 4 70 | useFileScale: 1 71 | strictVertexDataChecks: 0 72 | tangentSpace: 73 | normalSmoothAngle: 60 74 | normalImportMode: 0 75 | tangentImportMode: 3 76 | normalCalculationMode: 4 77 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 78 | blendShapeNormalImportMode: 1 79 | normalSmoothingSource: 0 80 | referencedClips: [] 81 | importAnimation: 1 82 | humanDescription: 83 | serializedVersion: 3 84 | human: [] 85 | skeleton: [] 86 | armTwist: 0.5 87 | foreArmTwist: 0.5 88 | upperLegTwist: 0.5 89 | legTwist: 0.5 90 | armStretch: 0.05 91 | legStretch: 0.05 92 | feetSpacing: 0 93 | globalScale: 1 94 | rootMotionBoneName: 95 | hasTranslationDoF: 0 96 | hasExtraRoot: 0 97 | skeletonHasParents: 1 98 | lastHumanDescriptionAvatarSource: {instanceID: 0} 99 | autoGenerateAvatarMappingIfUnspecified: 1 100 | animationType: 3 101 | humanoidOversampling: 1 102 | avatarSetup: 1 103 | addHumanoidExtraRootOnlyWhenUsingAvatar: 1 104 | importBlendShapeDeformPercent: 1 105 | remapMaterialsIfMaterialImportModeIsNone: 0 106 | additionalBone: 0 107 | userData: 108 | assetBundleName: 109 | assetBundleVariant: 110 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0de2a2f7ece982244ac003b596111610 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/prefab/BlenderCubePrefab Variant.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &3706602525585142750 4 | PrefabInstance: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Modification: 8 | serializedVersion: 3 9 | m_TransformParent: {fileID: 0} 10 | m_Modifications: 11 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 12 | propertyPath: m_LocalPosition.x 13 | value: -0 14 | objectReference: {fileID: 0} 15 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 16 | propertyPath: m_LocalPosition.y 17 | value: 0 18 | objectReference: {fileID: 0} 19 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 20 | propertyPath: m_LocalPosition.z 21 | value: 0 22 | objectReference: {fileID: 0} 23 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 24 | propertyPath: m_LocalRotation.w 25 | value: 0.7071067 26 | objectReference: {fileID: 0} 27 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 28 | propertyPath: m_LocalRotation.x 29 | value: -0.7071068 30 | objectReference: {fileID: 0} 31 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 32 | propertyPath: m_LocalRotation.y 33 | value: 0 34 | objectReference: {fileID: 0} 35 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 36 | propertyPath: m_LocalRotation.z 37 | value: -0 38 | objectReference: {fileID: 0} 39 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 40 | propertyPath: m_LocalEulerAnglesHint.x 41 | value: 0 42 | objectReference: {fileID: 0} 43 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 44 | propertyPath: m_LocalEulerAnglesHint.y 45 | value: 0 46 | objectReference: {fileID: 0} 47 | - target: {fileID: -8679921383154817045, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 48 | propertyPath: m_LocalEulerAnglesHint.z 49 | value: 0 50 | objectReference: {fileID: 0} 51 | - target: {fileID: 919132149155446097, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 52 | propertyPath: m_Name 53 | value: BlenderCubePrefab Variant 54 | objectReference: {fileID: 0} 55 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 56 | propertyPath: m_DirtyAABB 57 | value: 0 58 | objectReference: {fileID: 0} 59 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 60 | propertyPath: m_AABB.m_Center.y 61 | value: 0.2695433 62 | objectReference: {fileID: 0} 63 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 64 | propertyPath: m_AABB.m_Center.z 65 | value: 0.9206004 66 | objectReference: {fileID: 0} 67 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 68 | propertyPath: m_AABB.m_Extent.x 69 | value: 1 70 | objectReference: {fileID: 0} 71 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 72 | propertyPath: m_AABB.m_Extent.y 73 | value: 2.895296 74 | objectReference: {fileID: 0} 75 | - target: {fileID: 8417361359673230750, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 76 | propertyPath: m_AABB.m_Extent.z 77 | value: 1.9206004 78 | objectReference: {fileID: 0} 79 | m_RemovedComponents: [] 80 | m_RemovedGameObjects: [] 81 | m_AddedGameObjects: [] 82 | m_AddedComponents: [] 83 | m_SourcePrefab: {fileID: 100100000, guid: 72fa06b76840a1640b2e17a419863e91, type: 3} 84 | -------------------------------------------------------------------------------- /DemoProject/Assets/DemoCreator/BlenderCube/prefab/BlenderCubePrefab Variant.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eea42cc945521764683893055f886249 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f82cf514eb6a7d04d8be4ecb0520d726 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50dfd868795ceb44e8540861edfdb0d9 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/CommunFonctions.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | using System; 4 | using System.IO; 5 | using System.Text.RegularExpressions; 6 | using System.Diagnostics; 7 | using System.Collections; 8 | 9 | 10 | namespace EditDistributor 11 | { 12 | 13 | public class CommunFonctions : MonoBehaviour 14 | { 15 | 16 | 17 | public static string GetRelativePath(string fromPath, string toPath) 18 | { 19 | if (string.IsNullOrEmpty(fromPath) || string.IsNullOrEmpty(toPath)) 20 | { 21 | throw new ArgumentException("Both paths must be non-empty"); 22 | } 23 | 24 | Uri fromUri = new Uri(fromPath); 25 | Uri toUri = new Uri(toPath); 26 | 27 | if (fromUri.Scheme != toUri.Scheme) 28 | { 29 | // The paths have different schemes (e.g., file and http), so we can't construct a relative path. 30 | return toPath; 31 | } 32 | 33 | Uri relativeUri = fromUri.MakeRelativeUri(toUri); 34 | return Uri.UnescapeDataString(relativeUri.ToString()); 35 | } 36 | 37 | 38 | 39 | public static void AddCenteredLabel(string mymessage) 40 | { 41 | EditorGUILayout.BeginHorizontal(); 42 | GUILayout.FlexibleSpace(); 43 | EditorGUILayout.LabelField(mymessage); 44 | GUILayout.FlexibleSpace(); 45 | EditorGUILayout.EndHorizontal(); 46 | } 47 | 48 | 49 | public static void AddBoldCenteredLabel(string mymessage) 50 | { 51 | GUIStyle boldLabelStyle = new GUIStyle(EditorStyles.boldLabel); 52 | EditorGUILayout.BeginHorizontal(); 53 | GUILayout.FlexibleSpace(); 54 | EditorGUILayout.LabelField(mymessage, EditorStyles.boldLabel); 55 | GUILayout.FlexibleSpace(); 56 | EditorGUILayout.EndHorizontal(); 57 | } 58 | 59 | 60 | 61 | public static void CheckAndCopyFileIfExists(string OGPath, string DestPath) 62 | { 63 | if (File.Exists(OGPath)) 64 | { 65 | File.Copy(OGPath, DestPath); 66 | } 67 | else 68 | { 69 | PrintMissingFileError(OGPath); 70 | } 71 | } 72 | 73 | 74 | 75 | public static void PrintMissingFileError(string PathToFile) 76 | { 77 | UnityEngine.Debug.Log("Please make sure you have " + Path.GetFileName(PathToFile) + " in: " + PathToFile); 78 | } 79 | 80 | 81 | 82 | public static void DeleteAllFilesInDirectory(string directoryPath) 83 | { 84 | try 85 | { 86 | // Check if the directory exists 87 | if (Directory.Exists(directoryPath)) 88 | { 89 | // Get all files in the directory 90 | string[] files = Directory.GetFiles(directoryPath); 91 | 92 | // Delete each file 93 | foreach (string filePath in files) 94 | { 95 | File.Delete(filePath); 96 | UnityEngine.Debug.Log($"File deleted: {filePath}"); 97 | } 98 | 99 | UnityEngine.Debug.Log("Deletion process completed successfully."); 100 | } 101 | else 102 | { 103 | UnityEngine.Debug.Log("Directory does not exist."); 104 | } 105 | } 106 | catch (Exception ex) 107 | { 108 | UnityEngine.Debug.Log($"An error occurred: {ex.Message}"); 109 | } 110 | } 111 | 112 | 113 | 114 | 115 | public static void ReplaceStringsAndCopyFiles(string sourceDirectory, string targetDirectory, string[] searchPatterns, string[] replacementValues) 116 | { 117 | try 118 | { 119 | // Check if the source directory exists 120 | if (Directory.Exists(sourceDirectory)) 121 | { 122 | // Create the target directory if it doesn't exist 123 | if (!Directory.Exists(targetDirectory)) 124 | { 125 | Directory.CreateDirectory(targetDirectory); 126 | } 127 | 128 | // Iterate through all directories and subdirectories 129 | string[] allDirectories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.AllDirectories); 130 | 131 | foreach (string currentDirectory in allDirectories) 132 | { 133 | // Get all files in the current directory 134 | string[] files = Directory.GetFiles(currentDirectory); 135 | 136 | // Iterate over each file, replace strings, and copy to the target directory 137 | foreach (string filePath in files) 138 | { 139 | // Read the content of the file 140 | string content = File.ReadAllText(filePath); 141 | 142 | // Replace strings in the content 143 | for (int i = 0; i < searchPatterns.Length; i++) 144 | { 145 | content = content.Replace(searchPatterns[i], replacementValues[i]); 146 | } 147 | 148 | // Get the relative path within the source directory 149 | string relativePath = filePath.Substring(sourceDirectory.Length + 1); 150 | 151 | // Create the target path by combining the target directory and the relative path 152 | string targetFilePath = Path.Combine(targetDirectory, relativePath); 153 | 154 | // Create the target directory for the file if it doesn't exist 155 | string targetFileDirectory = Path.GetDirectoryName(targetFilePath); 156 | if (!Directory.Exists(targetFileDirectory)) 157 | { 158 | Directory.CreateDirectory(targetFileDirectory); 159 | } 160 | 161 | // Write the modified content to the target file 162 | File.WriteAllText(targetFilePath, content); 163 | 164 | // Log using UnityEngine.Debug.Log instead of Console.WriteLine 165 | UnityEngine.Debug.Log($"File copied and strings replaced: {targetFilePath}"); 166 | } 167 | } 168 | 169 | // Copy root directory files as well 170 | string[] rootFiles = Directory.GetFiles(sourceDirectory); 171 | foreach (string filePath in rootFiles) 172 | { 173 | // Read the content of the file 174 | string content = File.ReadAllText(filePath); 175 | 176 | // Replace strings in the content 177 | for (int i = 0; i < searchPatterns.Length; i++) 178 | { 179 | content = content.Replace(searchPatterns[i], replacementValues[i]); 180 | } 181 | 182 | // Get the relative path within the source directory 183 | string relativePath = filePath.Substring(sourceDirectory.Length + 1); 184 | 185 | // Create the target path by combining the target directory and the relative path 186 | string targetFilePath = Path.Combine(targetDirectory, relativePath); 187 | 188 | // Create the target directory for the file if it doesn't exist 189 | string targetFileDirectory = Path.GetDirectoryName(targetFilePath); 190 | if (!Directory.Exists(targetFileDirectory)) 191 | { 192 | Directory.CreateDirectory(targetFileDirectory); 193 | } 194 | 195 | // Write the modified content to the target file 196 | File.WriteAllText(targetFilePath, content); 197 | 198 | // Log using UnityEngine.Debug.Log instead of Console.WriteLine 199 | UnityEngine.Debug.Log($"Root file copied and strings replaced: {targetFilePath}"); 200 | } 201 | 202 | UnityEngine.Debug.Log("Replacement and copying process completed successfully."); 203 | } 204 | else 205 | { 206 | UnityEngine.Debug.Log("Source directory does not exist."); 207 | } 208 | } 209 | catch (Exception ex) 210 | { 211 | UnityEngine.Debug.LogError($"An error occurred: {ex.Message}"); 212 | } 213 | } 214 | 215 | 216 | 217 | 218 | 219 | 220 | public static void ReplaceStringsInFile(string filePath, string[] searchPatterns, string[] replacementValues) 221 | { 222 | if (searchPatterns.Length != replacementValues.Length) 223 | { 224 | throw new ArgumentException("Search patterns and replacement values arrays must have the same length."); 225 | } 226 | 227 | string content = File.ReadAllText(filePath); 228 | 229 | for (int i = 0; i < searchPatterns.Length; i++) 230 | { 231 | string escapedPattern = Regex.Escape(searchPatterns[i]); 232 | content = Regex.Replace(content, escapedPattern, replacementValues[i]); 233 | } 234 | 235 | File.WriteAllText(filePath, content); 236 | } 237 | 238 | 239 | 240 | public static bool DirectoryContainsExe(string directoryPath) 241 | { 242 | try 243 | { 244 | // Check if the directory exists 245 | if (Directory.Exists(directoryPath)) 246 | { 247 | // Get all files in the directory 248 | string[] files = Directory.GetFiles(directoryPath); 249 | 250 | // Check if any file ends with ".exe" 251 | foreach (string filePath in files) 252 | { 253 | if (Path.GetExtension(filePath).Equals(".exe", StringComparison.OrdinalIgnoreCase)) 254 | { 255 | return true; 256 | } 257 | } 258 | } 259 | } 260 | catch (Exception ex) 261 | { 262 | Console.WriteLine($"An error occurred: {ex.Message}"); 263 | } 264 | 265 | // Return false if no .exe files are found or an error occurs 266 | return false; 267 | } 268 | 269 | 270 | public static string FindFbxPathInAnimator(GameObject prefab) 271 | { 272 | 273 | if (prefab != null) 274 | { 275 | Animator animator = prefab.GetComponent(); 276 | 277 | if (animator != null && animator.avatar != null) 278 | { 279 | Avatar avatar = animator.avatar; 280 | 281 | return GetFBXPathFromAvatar(avatar); 282 | } 283 | } 284 | 285 | return string.Empty; 286 | } 287 | 288 | public static string GetGameObjectPath(GameObject gameObject) 289 | { 290 | if (string.IsNullOrEmpty(AssetDatabase.GetAssetPath(gameObject))) 291 | { 292 | return FindFbxPathInAnimator(gameObject); 293 | } 294 | else 295 | { 296 | return (Application.dataPath.Replace("Assets", "") + AssetDatabase.GetAssetPath(gameObject))/*.Replace("\\", "/")*/;//returns 297 | } 298 | } 299 | 300 | 301 | private static string GetFBXPathFromAvatar(Avatar avatar) 302 | { 303 | string avatarGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(avatar)); 304 | string[] assetPaths = AssetDatabase.GetAllAssetPaths(); 305 | 306 | foreach (string assetPath in assetPaths) 307 | { 308 | if (AssetDatabase.GUIDToAssetPath(avatarGUID) == assetPath && Path.GetExtension(assetPath).ToLower() == ".fbx") 309 | { 310 | string dataPath = Application.dataPath; 311 | string relativePath = assetPath.Substring("Assets/".Length); 312 | string fullPath = Path.Combine(dataPath, relativePath); 313 | fullPath = Path.GetFullPath(fullPath); 314 | return fullPath; 315 | } 316 | } 317 | 318 | return string.Empty; 319 | } 320 | 321 | 322 | public static string GoUpNDirs(string MyDir, int n) 323 | { 324 | MyDir = MyDir.TrimEnd(Path.PathSeparator); 325 | for (var i = 0; i < n; i++) 326 | MyDir = Path.GetDirectoryName(MyDir); 327 | return MyDir; 328 | } 329 | 330 | public static string GetRelativePathToAssets(string fullPath) 331 | { 332 | string assetsFolder = "Assets"; 333 | int assetsIndex = fullPath.IndexOf(assetsFolder, StringComparison.OrdinalIgnoreCase); 334 | 335 | if (assetsIndex != -1) 336 | { 337 | string relativePath = fullPath.Substring(assetsIndex + assetsFolder.Length + 1); 338 | 339 | return relativePath.Replace(Path.DirectorySeparatorChar, '/'); 340 | } 341 | 342 | return fullPath; 343 | } 344 | 345 | 346 | public static void LaunchProgramWithArguments(string programPath, string arguments) 347 | { 348 | try 349 | { 350 | Process process = new Process 351 | { 352 | StartInfo = new ProcessStartInfo() 353 | { 354 | FileName = programPath, 355 | Arguments = arguments, 356 | WorkingDirectory = Application.dataPath, 357 | UseShellExecute = false, 358 | RedirectStandardError = true, 359 | RedirectStandardInput = true, 360 | RedirectStandardOutput = true, 361 | CreateNoWindow = true, 362 | } 363 | 364 | }; 365 | 366 | 367 | process.Start(); 368 | UnityEngine.Debug.Log("we started process with argument\n + " + arguments); 369 | UnityEngine.Debug.Log(process.StandardOutput.ReadToEnd()); 370 | process.WaitForExit(); 371 | 372 | } 373 | catch (Exception e) 374 | { 375 | UnityEngine.Debug.Log(e.Message); 376 | } 377 | } 378 | 379 | 380 | 381 | public static void CopyFolder(string sourceDir, string destDir) 382 | { 383 | if (!Directory.Exists(destDir)) 384 | { 385 | Directory.CreateDirectory(destDir); 386 | } 387 | 388 | // Copy files 389 | foreach (string file in Directory.GetFiles(sourceDir)) 390 | { 391 | string destFile = Path.Combine(destDir, Path.GetFileName(file)); 392 | CheckAndCopyFileIfExists(file, destFile); 393 | } 394 | 395 | // Recursively copy subdirectories 396 | foreach (string subDir in Directory.GetDirectories(sourceDir)) 397 | { 398 | string destSubDir = Path.Combine(destDir, Path.GetFileName(subDir)); 399 | CopyFolder(subDir, destSubDir); 400 | } 401 | } 402 | 403 | public static string MakePathPlatformAgnostic(string proprietaryPath) 404 | { 405 | // Split the input string by '/' 406 | string[] parts = proprietaryPath.Split(Path.AltDirectorySeparatorChar); 407 | 408 | // Join the parts with proper formatting 409 | string platformAgnosticPath = ""; 410 | for (int i = 0; i < parts.Length; i++) 411 | { 412 | // Add each part enclosed in @"" and concatenate with + Path.PathSeparator + 413 | platformAgnosticPath += "@\"" + parts[i] + "\""; 414 | 415 | // Append Path.PathSeparator + if it's not the last part 416 | if (i < parts.Length - 1) 417 | platformAgnosticPath += " + Path.DirectorySeparatorChar + "; 418 | } 419 | 420 | return platformAgnosticPath; 421 | } 422 | } 423 | 424 | 425 | 426 | } 427 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/CommunFonctions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24616e4f1464f18418bfaa3b4fa6a6cb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/EditDistributorBuilder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bed1d0a9279ac1f49b316f555a96208d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/EditDistributorUpdater.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEditor; 4 | using System; 5 | using System.IO; 6 | using System.Diagnostics; 7 | using System.Collections; 8 | using System.Runtime.InteropServices; 9 | 10 | namespace EditDistributor 11 | { 12 | 13 | public class EditDistributorUpdater : EditorWindow 14 | { 15 | 16 | 17 | private static bool Debug = false; 18 | private GameObject OGAvatarPrefab = null; 19 | private GameObject CustomAvatarPrefab = null; 20 | private string OGfbxPath = ""; 21 | private string CustomfbxPath = ""; 22 | private string patcherToUpdate = ""; 23 | private string PackageName = ""; 24 | private string hdiffz = ""; 25 | private string FBXDiffFile = ""; 26 | private string MetaDiffFile = ""; 27 | string originalStrings; 28 | string remplacementStrings; 29 | string[] searchPatterns; 30 | string[] replacementValues; 31 | 32 | 33 | private bool StoreTextTog = false; 34 | private string DescriptionDir = ""; 35 | string DestinationDir = ""; 36 | private string CreatorName = ""; 37 | private string StorePage = ""; 38 | 39 | 40 | private byte debugMessage = 0; 41 | 42 | 43 | [MenuItem("Tools/Hash/EditDistributor/Updater")] 44 | private static void ShowWindow() 45 | { 46 | EditDistributorUpdater window = GetWindow("Updater"); 47 | //if (!Debug) window.maxSize = new Vector2(442, 160); 48 | window.minSize = new Vector2(290, 220); 49 | window.maxSize = new Vector2(400, 450); 50 | window.Show(); 51 | } 52 | 53 | void OnGUI() 54 | { 55 | GUIStyle boldLabelStyle = new GUIStyle(EditorStyles.boldLabel); 56 | boldLabelStyle.fontSize = 14; 57 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 58 | { 59 | 60 | EditorGUILayout.BeginHorizontal(); 61 | GUILayout.FlexibleSpace(); 62 | GUILayout.Label("Hash's Distribution Updater", boldLabelStyle); 63 | GUILayout.FlexibleSpace(); 64 | EditorGUILayout.EndHorizontal(); 65 | 66 | EditorGUILayout.BeginHorizontal(); 67 | GUILayout.FlexibleSpace(); 68 | if (GUILayout.Button("GitHub Repo", EditorStyles.linkLabel)) 69 | { 70 | Application.OpenURL("https://github.com/HashEdits/Face-Tracking-Patcher"); 71 | } 72 | GUILayout.FlexibleSpace(); 73 | EditorGUILayout.EndHorizontal(); 74 | 75 | EditorGUILayout.Space(10); 76 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 77 | { 78 | using (new GUILayout.HorizontalScope(EditorStyles.helpBox)) 79 | { 80 | OGAvatarPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab original model ->", OGAvatarPrefab, typeof(GameObject), true); 81 | 82 | if (OGAvatarPrefab != null) 83 | { 84 | OGfbxPath = CommunFonctions.GetGameObjectPath(OGAvatarPrefab); 85 | 86 | if (Debug) GUILayout.Label(OGfbxPath); 87 | if (string.IsNullOrEmpty(OGfbxPath)) 88 | { 89 | 90 | 91 | } 92 | 93 | 94 | 95 | } 96 | else 97 | { 98 | OGfbxPath = ""; 99 | 100 | } 101 | } 102 | 103 | EditorGUILayout.Space(10); 104 | using (new GUILayout.HorizontalScope(EditorStyles.helpBox)) 105 | { 106 | CustomAvatarPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab modified model ->", CustomAvatarPrefab, typeof(GameObject), true); 107 | 108 | if (CustomAvatarPrefab != null) 109 | { 110 | CustomfbxPath = CommunFonctions.GetGameObjectPath(CustomAvatarPrefab); 111 | 112 | if (Debug) GUILayout.Label(CustomfbxPath); 113 | if (string.IsNullOrEmpty(CustomfbxPath)) 114 | { 115 | patcherToUpdate = ""; 116 | } 117 | else 118 | { 119 | patcherToUpdate = Path.Combine(CommunFonctions.GoUpNDirs(CustomfbxPath, 2), "Patcher", "Editor", Path.GetFileNameWithoutExtension(CustomfbxPath) + "_Patcher.cs"); 120 | } 121 | } 122 | else 123 | { 124 | CustomfbxPath = ""; 125 | patcherToUpdate = ""; 126 | } 127 | } 128 | } 129 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 130 | { 131 | PackageName = EditorGUILayout.TextField("Name of New package", PackageName); 132 | } 133 | } 134 | 135 | //text remplacement 136 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 137 | { 138 | EditorGUILayout.BeginHorizontal(); 139 | GUILayout.FlexibleSpace(); 140 | EditorGUILayout.LabelField("Generate updated descriptions?"); 141 | StoreTextTog = EditorGUILayout.Toggle("", StoreTextTog); 142 | GUILayout.FlexibleSpace(); 143 | EditorGUILayout.EndHorizontal(); 144 | 145 | EditorGUILayout.Space(20); 146 | 147 | if (StoreTextTog) 148 | { 149 | 150 | CommunFonctions.AddCenteredLabel("Will copy the selected folder and remplace"); 151 | 152 | EditorGUILayout.BeginHorizontal(); 153 | GUILayout.FlexibleSpace(); 154 | if (GUILayout.Button("More info here", EditorStyles.linkLabel)) 155 | { 156 | Application.OpenURL("https://github.com/HashEdits/Face-Tracking-Patcher?tab=readme-ov-file#exemple-"); 157 | } 158 | GUILayout.FlexibleSpace(); 159 | EditorGUILayout.EndHorizontal(); 160 | 161 | 162 | EditorGUILayout.Space(20); 163 | if (GUILayout.Button("Select custom folder")) 164 | { 165 | DescriptionDir = EditorUtility.OpenFolderPanel("Select Folder", "", ""); 166 | } 167 | if (GUILayout.Button("Select destination")) 168 | { 169 | DestinationDir = EditorUtility.OpenFolderPanel("Select Folder", "", ""); 170 | } 171 | EditorGUILayout.LabelField("Custom desc source: ", DescriptionDir); 172 | EditorGUILayout.LabelField("Custom desc dest: ", DestinationDir); 173 | 174 | CreatorName = EditorGUILayout.TextField("CreatorName ", CreatorName); 175 | 176 | StorePage = EditorGUILayout.TextField("StorePage ", StorePage); 177 | 178 | //preparing the paterns to feed in the search and remplace algo 179 | searchPatterns = new string[] { @"/*AVATAR AUTHOR*/", @"/*StoreLink*/", @"/*AVATAR NAME*/", @"/*PACKAGE NAME*/", @"/*DIR PREFAB*/" }; 180 | replacementValues = new string[] { CreatorName, StorePage, Path.GetFileNameWithoutExtension(OGfbxPath), PackageName, "Assets" + CommunFonctions.GetRelativePathToAssets(Path.Combine(CommunFonctions.GoUpNDirs(CustomfbxPath, 2), "prefab")) }; 181 | 182 | } 183 | } 184 | UnityEngine.Debug.Log("Patcher to update: " + patcherToUpdate); 185 | UnityEngine.Debug.Log("Does the patcher to update exists" + File.Exists(patcherToUpdate)); 186 | 187 | 188 | if (!File.Exists(OGfbxPath)) 189 | { 190 | debugMessage = 1; 191 | } 192 | else if (!File.Exists(CustomfbxPath)) 193 | { 194 | debugMessage = 2; 195 | } 196 | else if (string.IsNullOrEmpty(PackageName)) 197 | { 198 | debugMessage = 3; 199 | } 200 | else if (!File.Exists(patcherToUpdate)) 201 | { 202 | debugMessage = 6; 203 | } 204 | else if (StoreTextTog && string.IsNullOrEmpty(DescriptionDir)) 205 | { 206 | debugMessage = 8; 207 | } 208 | else if (StoreTextTog && ((string.IsNullOrEmpty(CreatorName) || string.IsNullOrEmpty(StorePage) || string.IsNullOrEmpty(PackageName)))) 209 | { 210 | debugMessage = 4; 211 | } 212 | else if (StoreTextTog && (DescriptionDir == DestinationDir)) 213 | { 214 | debugMessage = 9; 215 | } 216 | else if (StoreTextTog && string.IsNullOrEmpty(DestinationDir)) 217 | { 218 | debugMessage = 10; 219 | } 220 | else 221 | { 222 | debugMessage = 0; 223 | } 224 | 225 | if (debugMessage == 0) 226 | { 227 | if (GUILayout.Button("Update")) 228 | { 229 | if (StoreTextTog) 230 | { 231 | CommunFonctions.ReplaceStringsAndCopyFiles(DescriptionDir, DestinationDir, searchPatterns, replacementValues);//remplaces text 232 | Updating(); 233 | debugMessage = 4; 234 | AssetDatabase.Refresh(); 235 | } 236 | else 237 | { 238 | 239 | Updating(); 240 | debugMessage = 4; 241 | AssetDatabase.Refresh(); 242 | } 243 | } 244 | } 245 | else 246 | { 247 | switch (debugMessage) 248 | { 249 | case 0: 250 | 251 | break; 252 | case 1: 253 | CommunFonctions.AddBoldCenteredLabel("Please Input a valid original model"); 254 | break; 255 | case 2: 256 | CommunFonctions.AddBoldCenteredLabel("Please Input a valid custom model"); 257 | 258 | break; 259 | case 3: 260 | CommunFonctions.AddBoldCenteredLabel("Please Input a new package name"); 261 | break; 262 | case 4: 263 | CommunFonctions.AddBoldCenteredLabel("Fill the text fileds or untick tickbox"); 264 | break; 265 | case 6: 266 | CommunFonctions.AddBoldCenteredLabel("A patcher doesn't already exists"); 267 | CommunFonctions.AddBoldCenteredLabel("please use the builder tool"); 268 | break; 269 | case 8: 270 | CommunFonctions.AddBoldCenteredLabel("Please select a source folder"); 271 | CommunFonctions.AddBoldCenteredLabel("or untick tickbox"); 272 | break; 273 | case 9: 274 | CommunFonctions.AddBoldCenteredLabel("Destination cannot be the source"); 275 | break; 276 | case 10: 277 | CommunFonctions.AddBoldCenteredLabel("Please select a destination folder"); 278 | CommunFonctions.AddBoldCenteredLabel("or untick tickbox"); 279 | break; 280 | default: 281 | CommunFonctions.AddBoldCenteredLabel("something went wrong with the error code"); 282 | break; 283 | } 284 | } 285 | if (debugMessage == 4) 286 | { 287 | CommunFonctions.AddBoldCenteredLabel("Patcher updated!"); 288 | } 289 | } 290 | 291 | private void Updating() 292 | { 293 | string outputDirectory = Path.Combine(CommunFonctions.GoUpNDirs(CustomfbxPath, 2), "Patcher", "Data", "DiffFiles"); 294 | 295 | 296 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) hdiffz = Path.Combine(Environment.CurrentDirectory, "Assets", "Hash's_Things", "EditDistributor", "hdiff", "hdiffz", "Windows", "hdiffz.exe"); 297 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) hdiffz = Path.Combine(Environment.CurrentDirectory, "Assets", "Hash's_Things", "EditDistributor", "hdiff", "hdiffz", "Linux", "hdiffz"); 298 | if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) hdiffz = Path.Combine(Environment.CurrentDirectory, "Assets", "Hash's_Things", "EditDistributor", "hdiff", "hdiffz", "Mac", "hdiffz"); 299 | 300 | FBXDiffFile = Path.Combine(outputDirectory, Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + ".hdiff"); 301 | MetaDiffFile = Path.Combine(outputDirectory, Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + "Meta.hdiff"); 302 | 303 | if (File.Exists(hdiffz)) 304 | { 305 | 306 | // Launch the hdiff with the constructed arguments 307 | string arguments = "\"" + OGfbxPath + "\" \"" + CustomfbxPath + "\" \"" + FBXDiffFile + "\""; 308 | CommunFonctions.LaunchProgramWithArguments(hdiffz, arguments); 309 | //we do the same for the .meta file 310 | arguments = "\"" + OGfbxPath + ".meta\" \"" + CustomfbxPath + ".meta\" \"" + MetaDiffFile + "\""; 311 | CommunFonctions.LaunchProgramWithArguments(hdiffz, arguments); 312 | 313 | 314 | 315 | } 316 | else 317 | { 318 | UnityEngine.Debug.Log("please make sure you have hdiffz.exe in: " + hdiffz);//need to add to the list of errors /!\ todo /!\ 319 | } 320 | 321 | originalStrings = @" private static string AvatarVersion = "; 322 | remplacementStrings = @" private static string AvatarVersion = " + '\u0022' + PackageName + '\u0022' + ';'; 323 | ReplaceLineInFile(patcherToUpdate, originalStrings, remplacementStrings); 324 | } 325 | 326 | 327 | 328 | 329 | 330 | private static void ReplaceLineInFile(string filePath, string searchStartsWith, string replacementLine) 331 | { 332 | try 333 | { 334 | // Check if the file exists 335 | if (File.Exists(filePath)) 336 | { 337 | // Read all lines from the file 338 | string[] lines = File.ReadAllLines(filePath); 339 | 340 | // Find and replace the line that starts with the specified string 341 | for (int i = 0; i < lines.Length; i++) 342 | { 343 | if (lines[i].StartsWith(searchStartsWith)) 344 | { 345 | lines[i] = replacementLine; 346 | UnityEngine.Debug.Log($"Line replaced: {lines[i]}"); 347 | break; // Stop searching after the first match (remove if you want to replace all matching lines) 348 | } 349 | } 350 | 351 | // Write the modified lines back to the file 352 | File.WriteAllLines(filePath, lines); 353 | 354 | UnityEngine.Debug.Log("Replacement process completed successfully."); 355 | } 356 | else 357 | { 358 | UnityEngine.Debug.Log("File does not exist."); 359 | } 360 | } 361 | catch (Exception ex) 362 | { 363 | UnityEngine.Debug.Log($"An error occurred: {ex.Message}"); 364 | } 365 | } 366 | 367 | 368 | } 369 | } 370 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/EditDistributorUpdater.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8be629773d43517449ed4cbe312b2db7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/PatcherTemplate.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEditor; 4 | using System; 5 | using System.IO; 6 | using System.Diagnostics; 7 | using System.Collections; 8 | using System.Runtime.InteropServices; 9 | 10 | public class PatcherTemplate : EditorWindow 11 | { 12 | private static bool Debug = false; 13 | private static string OGfbxPath = "YourCoolAvatar"; 14 | private static string CustomfbxPath = "YourCoolCustomAvatar"; 15 | private byte debugMessage = 0; 16 | private static string AvatarVersion = @"CurrentPackageVersion"; 17 | private bool PatchButtonHasBeenPressed = false; 18 | 19 | [MenuItem(@"Tools/Hash/EditDistributor/(DO_NOT_USE)")] 20 | public static void ShowWindow() 21 | { 22 | PatcherTemplate window = GetWindow(@"NameOfWindow"); 23 | if (!Debug) window.maxSize = new Vector2(442, 223); 24 | if (Debug) window.maxSize = new Vector2(1000, 700); 25 | window.Show(); 26 | } 27 | 28 | void OnGUI() 29 | { 30 | 31 | GUIStyle boldLabelStyle = new GUIStyle(EditorStyles.boldLabel); 32 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 33 | { 34 | 35 | EditorGUILayout.Space(20); 36 | 37 | EditorGUILayout.BeginHorizontal(); 38 | GUILayout.FlexibleSpace(); 39 | GUILayout.Label(@"DistributionCreator" + "'s "+ @"AvatarName", boldLabelStyle); 40 | GUILayout.FlexibleSpace(); 41 | EditorGUILayout.EndHorizontal(); 42 | 43 | string currentOGfbxPath = Path.Combine(Application.dataPath, OGfbxPath); 44 | 45 | string currentCustomfbxPath = Path.Combine(Application.dataPath, CustomfbxPath); 46 | 47 | string hpatchz = ""; 48 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Windows", "hpatchz.exe"); 49 | if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Linux", "hpatchz"); 50 | if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) hpatchz = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "hdiff", "hpatchz", "Mac", "hpatchz"); 51 | 52 | string FBXDiffFile = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "DiffFiles", Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + ".hdiff"); 53 | string MetaDiffFile = Path.Combine(GoUpNDirs(currentCustomfbxPath, 2), "patcher", "data", "DiffFiles", Path.GetFileNameWithoutExtension(OGfbxPath).Replace(" ", "_") + "Meta.hdiff"); 54 | string fbxfolder = GoUpNDirs(currentCustomfbxPath, 1); 55 | 56 | if (Debug) ShowDebugMessages(currentOGfbxPath, FBXDiffFile, MetaDiffFile, currentCustomfbxPath); 57 | 58 | 59 | 60 | EditorGUILayout.Space(20); 61 | if (!File.Exists(currentOGfbxPath)) 62 | { 63 | AddBoldCenteredLabel("Please make sure your have the original FBX in: " + GoUpNDirs(OGfbxPath, 1)); 64 | debugMessage = 1; 65 | } 66 | else if (File.Exists(currentCustomfbxPath)) 67 | { 68 | AddBoldCenteredLabel("Edited model is already in the folder Enjoy :)"); 69 | debugMessage = 2; 70 | } 71 | else if (!(File.Exists(FBXDiffFile) && File.Exists(MetaDiffFile))) 72 | { 73 | AddBoldCenteredLabel("Please make sure your have diff files in: " + GoUpNDirs(FBXDiffFile, 1)); 74 | debugMessage = 3; 75 | } 76 | else if (PatchButtonHasBeenPressed) 77 | { 78 | if (debugMessage == 4) 79 | { 80 | 81 | } 82 | else 83 | { 84 | debugMessage = 0; 85 | PatchButtonHasBeenPressed = false; 86 | } 87 | 88 | } 89 | else 90 | { 91 | debugMessage = 0; 92 | } 93 | 94 | 95 | if (debugMessage == 0 || debugMessage == 4) 96 | { 97 | if (GUILayout.Button("Patch")) 98 | { 99 | PatchButtonHasBeenPressed = true; 100 | if (Directory.Exists(fbxfolder)) 101 | { 102 | if (Debug) UnityEngine.Debug.Log("fbx exists"); 103 | } 104 | else 105 | { 106 | Directory.CreateDirectory(fbxfolder); 107 | } 108 | 109 | string arguments = "\"" + currentOGfbxPath + ".meta\" \"" + MetaDiffFile + "\" \"" + currentCustomfbxPath + ".meta\""; 110 | if (Debug) UnityEngine.Debug.Log("meta Arguments: " + arguments); 111 | if (LaunchProgramWithArguments(hpatchz, arguments, currentCustomfbxPath + ".meta") == true) 112 | { 113 | debugMessage = 5; 114 | //communicate to the user that something went wrong during the patching process of the meta file 115 | 116 | } 117 | else 118 | { 119 | debugMessage = 6;//it workey 120 | DeleteAllFilesInDirectory(Path.Combine(GoUpNDirs(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 1), "LocalLow", "VRChat", "VRChat", "OSC")); 121 | 122 | } 123 | 124 | arguments = "\"" + currentOGfbxPath + "\" \"" + FBXDiffFile + "\" \"" + currentCustomfbxPath + "\""; 125 | if (Debug) UnityEngine.Debug.Log("FBX Arguments: " + arguments); 126 | if (LaunchProgramWithArguments(hpatchz, arguments, currentCustomfbxPath) == true) 127 | { 128 | debugMessage = 4; 129 | //communicate to the user that something went wrong during the patching process of the FBX 130 | } 131 | else 132 | { 133 | debugMessage = 6;//it workey 134 | DeleteAllFilesInDirectory(Path.Combine(GoUpNDirs(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 1), "LocalLow", "VRChat", "VRChat", "OSC")); 135 | } 136 | 137 | 138 | 139 | AssetDatabase.Refresh(); 140 | 141 | 142 | } 143 | } 144 | 145 | 146 | 147 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 148 | { 149 | 150 | switch (debugMessage) 151 | { 152 | case 0: 153 | //please click the button 154 | AddBoldCenteredLabel("Please click the button above to patch your model :)"); 155 | EditorGUILayout.Space(10); 156 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion); 157 | AddBoldCenteredLabel("to import the original avatar in your project"); 158 | break; 159 | case 4: 160 | //fbx fucked up 161 | AddBoldCenteredLabel("/!\\ Something went wrong during the patching of the FBX /!\\ "); 162 | EditorGUILayout.Space(10); 163 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion); 164 | AddBoldCenteredLabel("to import the original avatar in your project"); 165 | break; 166 | case 5: 167 | //meta fucked up 168 | AddBoldCenteredLabel("/!\\ Something went wrong during the patching of the import file /!\\ "); 169 | EditorGUILayout.Space(10); 170 | AddBoldCenteredLabel("Please double check that you used " + AvatarVersion + "to import the original avatar in your project"); 171 | break; 172 | case 6: 173 | AddBoldCenteredLabel("FBX patched, get to the prefab folder to enjoy your product"); 174 | break; 175 | default: 176 | break; 177 | 178 | 179 | } 180 | 181 | } 182 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 183 | { 184 | EditorGUILayout.BeginHorizontal(); 185 | GUILayout.FlexibleSpace(); 186 | if (GUILayout.Button("This package is using Hash's Edit Distributor", EditorStyles.linkLabel)) 187 | { 188 | Application.OpenURL("https://github.com/HashEdits/Face-Tracking-Patcher"); 189 | } 190 | GUILayout.FlexibleSpace(); 191 | EditorGUILayout.EndHorizontal(); 192 | } 193 | } 194 | 195 | } 196 | 197 | 198 | private static string GoUpNDirs(string MyDir, int n) 199 | { 200 | MyDir = MyDir.TrimEnd(Path.PathSeparator); 201 | for (var i = 0; i < n; i++) 202 | MyDir = Path.GetDirectoryName(MyDir); 203 | return MyDir; 204 | } 205 | 206 | 207 | private static bool LaunchProgramWithArguments(string programPath, string arguments, string destinationFile) 208 | { 209 | try 210 | { 211 | var process = new Process 212 | { 213 | StartInfo = new ProcessStartInfo() 214 | { 215 | FileName = programPath, 216 | Arguments = arguments, 217 | WorkingDirectory = Application.dataPath, 218 | UseShellExecute = false, 219 | RedirectStandardError = true, 220 | RedirectStandardInput = true, 221 | RedirectStandardOutput = true, 222 | CreateNoWindow = true, 223 | } 224 | 225 | }; 226 | 227 | 228 | process.Start(); 229 | string output = process.StandardOutput.ReadToEnd(); 230 | UnityEngine.Debug.Log(output); 231 | if (!File.Exists(destinationFile)) 232 | { 233 | return true; 234 | } 235 | process.WaitForExit(); 236 | 237 | return false; 238 | 239 | } 240 | catch (Exception e) 241 | { 242 | UnityEngine.Debug.Log(e.Message); 243 | //SaveStringToFile(e.Message, " ", Application.dataPath + "/Logs", "Error crash " + Path.GetFileNameWithoutExtension(CustomfbxPath) + " Patcher " + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log"); 244 | return true; 245 | } 246 | } 247 | 248 | private static bool SaveStringToFile(string inputString, string searchString, string saveDirectory, string fileName) 249 | { 250 | if (inputString.Contains(searchString)) 251 | { 252 | try 253 | { 254 | // Ensure the directory exists 255 | Directory.CreateDirectory(saveDirectory); 256 | 257 | // Combine the directory and filename to get the full path 258 | string filePath = Path.Combine(saveDirectory, fileName); 259 | 260 | // Write the input string to the file 261 | File.WriteAllText(filePath, inputString); 262 | 263 | if (Debug) UnityEngine.Debug.Log("Something went wrong, please get in contact and provide: " + filePath + "/" + fileName); 264 | return true; 265 | } 266 | catch (Exception e) 267 | { 268 | UnityEngine.Debug.Log($"Error saving string to file: {e.Message}"); 269 | return true; 270 | } 271 | } 272 | else 273 | { 274 | return false; 275 | } 276 | 277 | } 278 | 279 | private void AddBoldCenteredLabel(string mymessage) 280 | { 281 | EditorGUILayout.LabelField(mymessage, EditorStyles.boldLabel); 282 | } 283 | 284 | private void ShowDebugMessages(string currentOGfbxPath, string FBXDiffFile, string MetaDiffFile, string currentCustomfbxPath) 285 | { 286 | GUILayout.Label("OGfbxPath: " + currentOGfbxPath); 287 | GUILayout.Label("OGfbxPath exists: " + File.Exists(currentOGfbxPath)); 288 | 289 | GUILayout.Label("FBXDiffFile: " + FBXDiffFile); 290 | GUILayout.Label("MetaDiffFile: " + MetaDiffFile); 291 | 292 | GUILayout.Label("FBXDiffFile exists: " + File.Exists(FBXDiffFile)); 293 | GUILayout.Label("MetaDiffFile exists: " + File.Exists(MetaDiffFile)); 294 | EditorGUILayout.Space(10); 295 | GUILayout.Label("arguments fed to hpatchz: " + currentOGfbxPath + "\" \"" + FBXDiffFile + "\" \"" + currentCustomfbxPath + "\""); 296 | } 297 | 298 | public static void DeleteAllFilesInDirectory(string directoryPath) 299 | { 300 | try 301 | { 302 | // Check if the directory exists 303 | if (Directory.Exists(directoryPath)) 304 | { 305 | // Get all files in the directory 306 | string[] files = Directory.GetFiles(directoryPath); 307 | 308 | // Delete each file 309 | foreach (string filePath in files) 310 | { 311 | File.Delete(filePath); 312 | UnityEngine.Debug.Log($"File deleted: {filePath}"); 313 | } 314 | 315 | UnityEngine.Debug.Log("Deletion process completed successfully."); 316 | } 317 | else 318 | { 319 | UnityEngine.Debug.Log("Directory does not exist."); 320 | } 321 | } 322 | catch (Exception ex) 323 | { 324 | UnityEngine.Debug.Log($"An error occurred: {ex.Message}"); 325 | } 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/Editor/PatcherTemplate.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bef7be5f21db7484999d9b9815419bd2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f037590aeb9019d4ead2ee2835ad615f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/License.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | HDiffPatch 4 | Copyright (c) 2012-2022 housisong 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | 24 | ---------------------------------------------------------------------------------- 25 | 26 | libdivsufsort 27 | Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. 28 | 29 | Permission is hereby granted, free of charge, to any person 30 | obtaining a copy of this software and associated documentation 31 | files (the "Software"), to deal in the Software without 32 | restriction, including without limitation the rights to use, 33 | copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the 35 | Software is furnished to do so, subject to the following 36 | conditions: 37 | 38 | The above copyright notice and this permission notice shall be 39 | included in all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 42 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 43 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 44 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 45 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 47 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 48 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/License.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 47a5bf58fbea4b54aa3515379af0b438 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 10517c768c2d6254a8fc58b89572b5db 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/License.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | HDiffPatch 4 | Copyright (c) 2012-2022 housisong 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | 24 | ---------------------------------------------------------------------------------- 25 | 26 | libdivsufsort 27 | Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. 28 | 29 | Permission is hereby granted, free of charge, to any person 30 | obtaining a copy of this software and associated documentation 31 | files (the "Software"), to deal in the Software without 32 | restriction, including without limitation the rights to use, 33 | copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the 35 | Software is furnished to do so, subject to the following 36 | conditions: 37 | 38 | The above copyright notice and this permission notice shall be 39 | included in all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 42 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 43 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 44 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 45 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 47 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 48 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/License.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 00bd00bc9c012dd4dba994e976428807 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Linux.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50757b2d820b5b040a0bba9be9bce742 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Linux/hdiffz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Linux/hdiffz -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Linux/hdiffz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 44b7896b206d0ea4b863ff50060ab0b3 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Mac.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a6c3dc46a12dc3448a767a89d1e3d27f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Mac/hdiffz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Mac/hdiffz -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Mac/hdiffz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2441a749b7e3fa48951432358ab6d19 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Windows.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8347f1f55298ca943b0e17ba59172542 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Windows/hdiffz.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Windows/hdiffz.exe -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hdiffz/Windows/hdiffz.exe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1c867a1958b49d4682366aec163aabf 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 03eda44b33356844ab61c7f75451dcc6 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/License.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | HDiffPatch 4 | Copyright (c) 2012-2022 housisong 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | 24 | ---------------------------------------------------------------------------------- 25 | 26 | libdivsufsort 27 | Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. 28 | 29 | Permission is hereby granted, free of charge, to any person 30 | obtaining a copy of this software and associated documentation 31 | files (the "Software"), to deal in the Software without 32 | restriction, including without limitation the rights to use, 33 | copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the 35 | Software is furnished to do so, subject to the following 36 | conditions: 37 | 38 | The above copyright notice and this permission notice shall be 39 | included in all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 42 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 43 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 44 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 45 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 47 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 48 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/License.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 43afb428e596563438328ed323fa87c1 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Linux.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 398efbc4bf45bb64a835d9988793bd6b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Linux/hpatchz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Linux/hpatchz -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Linux/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 51d3c384fea931b4e8c6ff5cdccc760d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Mac.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 70f53fd6026a63849a3cd0d9f278f493 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Mac/hpatchz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Mac/hpatchz -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Mac/hpatchz.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 77fa6cfa9e82edd4c97a104afb557c5f 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Windows.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2d48f3cff511f44fab3892968a7f716 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Windows/hpatchz.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Windows/hpatchz.exe -------------------------------------------------------------------------------- /DemoProject/Assets/Hash's_Things/EditDistributor/hdiff/hpatchz/Windows/hpatchz.exe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 48f28634950e46a4390d63c7280faf6d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Assets/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.44657898, g: 0.4964133, b: 0.5748178, 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: 3 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 | buildHeightMesh: 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 | serializedVersion: 2 213 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 214 | m_LocalPosition: {x: 0, y: 3, z: 0} 215 | m_LocalScale: {x: 1, y: 1, z: 1} 216 | m_ConstrainProportionsScale: 0 217 | m_Children: [] 218 | m_Father: {fileID: 0} 219 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 220 | --- !u!1001 &824192954 221 | PrefabInstance: 222 | m_ObjectHideFlags: 0 223 | serializedVersion: 2 224 | m_Modification: 225 | serializedVersion: 3 226 | m_TransformParent: {fileID: 0} 227 | m_Modifications: 228 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 229 | propertyPath: m_LocalPosition.x 230 | value: -0 231 | objectReference: {fileID: 0} 232 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 233 | propertyPath: m_LocalPosition.y 234 | value: 0 235 | objectReference: {fileID: 0} 236 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 237 | propertyPath: m_LocalPosition.z 238 | value: 0 239 | objectReference: {fileID: 0} 240 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 241 | propertyPath: m_LocalRotation.w 242 | value: 0.7071067 243 | objectReference: {fileID: 0} 244 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 245 | propertyPath: m_LocalRotation.x 246 | value: -0.7071068 247 | objectReference: {fileID: 0} 248 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 249 | propertyPath: m_LocalRotation.y 250 | value: 0 251 | objectReference: {fileID: 0} 252 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 253 | propertyPath: m_LocalRotation.z 254 | value: -0 255 | objectReference: {fileID: 0} 256 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 257 | propertyPath: m_LocalEulerAnglesHint.x 258 | value: 0 259 | objectReference: {fileID: 0} 260 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 261 | propertyPath: m_LocalEulerAnglesHint.y 262 | value: 0 263 | objectReference: {fileID: 0} 264 | - target: {fileID: 2519797075178238016, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 265 | propertyPath: m_LocalEulerAnglesHint.z 266 | value: 0 267 | objectReference: {fileID: 0} 268 | - target: {fileID: 3004972676769999610, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 269 | propertyPath: m_Name 270 | value: ModifiedBlenderCubePrefab 271 | objectReference: {fileID: 0} 272 | - target: {fileID: 5882509136947597877, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 273 | propertyPath: m_BlendShapeWeights.Array.data[0] 274 | value: 0 275 | objectReference: {fileID: 0} 276 | - target: {fileID: 5882509136947597877, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 277 | propertyPath: m_BlendShapeWeights.Array.data[1] 278 | value: 0 279 | objectReference: {fileID: 0} 280 | m_RemovedComponents: [] 281 | m_RemovedGameObjects: [] 282 | m_AddedGameObjects: [] 283 | m_AddedComponents: [] 284 | m_SourcePrefab: {fileID: 100100000, guid: a9af8a90b456f2a469eba93bdece077b, type: 3} 285 | --- !u!1 &963194225 286 | GameObject: 287 | m_ObjectHideFlags: 0 288 | m_CorrespondingSourceObject: {fileID: 0} 289 | m_PrefabInstance: {fileID: 0} 290 | m_PrefabAsset: {fileID: 0} 291 | serializedVersion: 6 292 | m_Component: 293 | - component: {fileID: 963194228} 294 | - component: {fileID: 963194227} 295 | - component: {fileID: 963194226} 296 | m_Layer: 0 297 | m_Name: Main Camera 298 | m_TagString: MainCamera 299 | m_Icon: {fileID: 0} 300 | m_NavMeshLayer: 0 301 | m_StaticEditorFlags: 0 302 | m_IsActive: 1 303 | --- !u!81 &963194226 304 | AudioListener: 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 | --- !u!20 &963194227 312 | Camera: 313 | m_ObjectHideFlags: 0 314 | m_CorrespondingSourceObject: {fileID: 0} 315 | m_PrefabInstance: {fileID: 0} 316 | m_PrefabAsset: {fileID: 0} 317 | m_GameObject: {fileID: 963194225} 318 | m_Enabled: 1 319 | serializedVersion: 2 320 | m_ClearFlags: 1 321 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 322 | m_projectionMatrixMode: 1 323 | m_GateFitMode: 2 324 | m_FOVAxisMode: 0 325 | m_Iso: 200 326 | m_ShutterSpeed: 0.005 327 | m_Aperture: 16 328 | m_FocusDistance: 10 329 | m_FocalLength: 50 330 | m_BladeCount: 5 331 | m_Curvature: {x: 2, y: 11} 332 | m_BarrelClipping: 0.25 333 | m_Anamorphism: 0 334 | m_SensorSize: {x: 36, y: 24} 335 | m_LensShift: {x: 0, y: 0} 336 | m_NormalizedViewPortRect: 337 | serializedVersion: 2 338 | x: 0 339 | y: 0 340 | width: 1 341 | height: 1 342 | near clip plane: 0.3 343 | far clip plane: 1000 344 | field of view: 60 345 | orthographic: 0 346 | orthographic size: 5 347 | m_Depth: -1 348 | m_CullingMask: 349 | serializedVersion: 2 350 | m_Bits: 4294967295 351 | m_RenderingPath: -1 352 | m_TargetTexture: {fileID: 0} 353 | m_TargetDisplay: 0 354 | m_TargetEye: 3 355 | m_HDR: 1 356 | m_AllowMSAA: 1 357 | m_AllowDynamicResolution: 0 358 | m_ForceIntoRT: 0 359 | m_OcclusionCulling: 1 360 | m_StereoConvergence: 10 361 | m_StereoSeparation: 0.022 362 | --- !u!4 &963194228 363 | Transform: 364 | m_ObjectHideFlags: 0 365 | m_CorrespondingSourceObject: {fileID: 0} 366 | m_PrefabInstance: {fileID: 0} 367 | m_PrefabAsset: {fileID: 0} 368 | m_GameObject: {fileID: 963194225} 369 | serializedVersion: 2 370 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 371 | m_LocalPosition: {x: 0, y: 1, z: -10} 372 | m_LocalScale: {x: 1, y: 1, z: 1} 373 | m_ConstrainProportionsScale: 0 374 | m_Children: [] 375 | m_Father: {fileID: 0} 376 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 377 | --- !u!1001 &4415765545301428196 378 | PrefabInstance: 379 | m_ObjectHideFlags: 0 380 | serializedVersion: 2 381 | m_Modification: 382 | serializedVersion: 3 383 | m_TransformParent: {fileID: 0} 384 | m_Modifications: 385 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 386 | propertyPath: m_LocalPosition.x 387 | value: -0 388 | objectReference: {fileID: 0} 389 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 390 | propertyPath: m_LocalPosition.y 391 | value: 0 392 | objectReference: {fileID: 0} 393 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 394 | propertyPath: m_LocalPosition.z 395 | value: 0 396 | objectReference: {fileID: 0} 397 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 398 | propertyPath: m_LocalRotation.w 399 | value: 0.7071067 400 | objectReference: {fileID: 0} 401 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 402 | propertyPath: m_LocalRotation.x 403 | value: -0.7071068 404 | objectReference: {fileID: 0} 405 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 406 | propertyPath: m_LocalRotation.y 407 | value: 0 408 | objectReference: {fileID: 0} 409 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 410 | propertyPath: m_LocalRotation.z 411 | value: -0 412 | objectReference: {fileID: 0} 413 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 414 | propertyPath: m_LocalEulerAnglesHint.x 415 | value: 0 416 | objectReference: {fileID: 0} 417 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 418 | propertyPath: m_LocalEulerAnglesHint.y 419 | value: 0 420 | objectReference: {fileID: 0} 421 | - target: {fileID: 3817581503675372597, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 422 | propertyPath: m_LocalEulerAnglesHint.z 423 | value: 0 424 | objectReference: {fileID: 0} 425 | - target: {fileID: 4589474277918264975, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 426 | propertyPath: m_Name 427 | value: BlenderCubePrefab 428 | objectReference: {fileID: 0} 429 | - target: {fileID: 5161132684604175936, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 430 | propertyPath: m_BlendShapeWeights.Array.data[0] 431 | value: 0 432 | objectReference: {fileID: 0} 433 | m_RemovedComponents: [] 434 | m_RemovedGameObjects: [] 435 | m_AddedGameObjects: [] 436 | m_AddedComponents: [] 437 | m_SourcePrefab: {fileID: 100100000, guid: 55f4eeaf0a7e4ef4c95ac038c1d6b070, type: 3} 438 | --- !u!1660057539 &9223372036854775807 439 | SceneRoots: 440 | m_ObjectHideFlags: 0 441 | m_Roots: 442 | - {fileID: 963194228} 443 | - {fileID: 705507995} 444 | - {fileID: 4415765545301428196} 445 | - {fileID: 824192954} 446 | -------------------------------------------------------------------------------- /DemoProject/Assets/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DemoProject/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.collab-proxy": "2.2.0", 4 | "com.unity.feature.development": "1.0.1", 5 | "com.unity.textmeshpro": "3.0.6", 6 | "com.unity.timeline": "1.7.5", 7 | "com.unity.ugui": "1.0.0", 8 | "com.unity.visualscripting": "1.8.0", 9 | "com.unity.modules.ai": "1.0.0", 10 | "com.unity.modules.androidjni": "1.0.0", 11 | "com.unity.modules.animation": "1.0.0", 12 | "com.unity.modules.assetbundle": "1.0.0", 13 | "com.unity.modules.audio": "1.0.0", 14 | "com.unity.modules.cloth": "1.0.0", 15 | "com.unity.modules.director": "1.0.0", 16 | "com.unity.modules.imageconversion": "1.0.0", 17 | "com.unity.modules.imgui": "1.0.0", 18 | "com.unity.modules.jsonserialize": "1.0.0", 19 | "com.unity.modules.particlesystem": "1.0.0", 20 | "com.unity.modules.physics": "1.0.0", 21 | "com.unity.modules.physics2d": "1.0.0", 22 | "com.unity.modules.screencapture": "1.0.0", 23 | "com.unity.modules.terrain": "1.0.0", 24 | "com.unity.modules.terrainphysics": "1.0.0", 25 | "com.unity.modules.tilemap": "1.0.0", 26 | "com.unity.modules.ui": "1.0.0", 27 | "com.unity.modules.uielements": "1.0.0", 28 | "com.unity.modules.umbra": "1.0.0", 29 | "com.unity.modules.unityanalytics": "1.0.0", 30 | "com.unity.modules.unitywebrequest": "1.0.0", 31 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 32 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 33 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 34 | "com.unity.modules.unitywebrequestwww": "1.0.0", 35 | "com.unity.modules.vehicles": "1.0.0", 36 | "com.unity.modules.video": "1.0.0", 37 | "com.unity.modules.vr": "1.0.0", 38 | "com.unity.modules.wind": "1.0.0", 39 | "com.unity.modules.xr": "1.0.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /DemoProject/Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.collab-proxy": { 4 | "version": "2.2.0", 5 | "depth": 0, 6 | "source": "registry", 7 | "dependencies": {}, 8 | "url": "https://packages.unity.com" 9 | }, 10 | "com.unity.editorcoroutines": { 11 | "version": "1.0.0", 12 | "depth": 1, 13 | "source": "registry", 14 | "dependencies": {}, 15 | "url": "https://packages.unity.com" 16 | }, 17 | "com.unity.ext.nunit": { 18 | "version": "1.0.6", 19 | "depth": 2, 20 | "source": "registry", 21 | "dependencies": {}, 22 | "url": "https://packages.unity.com" 23 | }, 24 | "com.unity.feature.development": { 25 | "version": "1.0.1", 26 | "depth": 0, 27 | "source": "builtin", 28 | "dependencies": { 29 | "com.unity.ide.visualstudio": "2.0.18", 30 | "com.unity.ide.rider": "3.0.24", 31 | "com.unity.ide.vscode": "1.2.5", 32 | "com.unity.editorcoroutines": "1.0.0", 33 | "com.unity.performance.profile-analyzer": "1.2.2", 34 | "com.unity.test-framework": "1.1.33", 35 | "com.unity.testtools.codecoverage": "1.2.4" 36 | } 37 | }, 38 | "com.unity.ide.rider": { 39 | "version": "3.0.24", 40 | "depth": 1, 41 | "source": "registry", 42 | "dependencies": { 43 | "com.unity.ext.nunit": "1.0.6" 44 | }, 45 | "url": "https://packages.unity.com" 46 | }, 47 | "com.unity.ide.visualstudio": { 48 | "version": "2.0.18", 49 | "depth": 1, 50 | "source": "registry", 51 | "dependencies": { 52 | "com.unity.test-framework": "1.1.9" 53 | }, 54 | "url": "https://packages.unity.com" 55 | }, 56 | "com.unity.ide.vscode": { 57 | "version": "1.2.5", 58 | "depth": 1, 59 | "source": "registry", 60 | "dependencies": {}, 61 | "url": "https://packages.unity.com" 62 | }, 63 | "com.unity.performance.profile-analyzer": { 64 | "version": "1.2.2", 65 | "depth": 1, 66 | "source": "registry", 67 | "dependencies": {}, 68 | "url": "https://packages.unity.com" 69 | }, 70 | "com.unity.settings-manager": { 71 | "version": "2.0.1", 72 | "depth": 2, 73 | "source": "registry", 74 | "dependencies": {}, 75 | "url": "https://packages.unity.com" 76 | }, 77 | "com.unity.test-framework": { 78 | "version": "1.1.33", 79 | "depth": 1, 80 | "source": "registry", 81 | "dependencies": { 82 | "com.unity.ext.nunit": "1.0.6", 83 | "com.unity.modules.imgui": "1.0.0", 84 | "com.unity.modules.jsonserialize": "1.0.0" 85 | }, 86 | "url": "https://packages.unity.com" 87 | }, 88 | "com.unity.testtools.codecoverage": { 89 | "version": "1.2.4", 90 | "depth": 1, 91 | "source": "registry", 92 | "dependencies": { 93 | "com.unity.test-framework": "1.0.16", 94 | "com.unity.settings-manager": "1.0.1" 95 | }, 96 | "url": "https://packages.unity.com" 97 | }, 98 | "com.unity.textmeshpro": { 99 | "version": "3.0.6", 100 | "depth": 0, 101 | "source": "registry", 102 | "dependencies": { 103 | "com.unity.ugui": "1.0.0" 104 | }, 105 | "url": "https://packages.unity.com" 106 | }, 107 | "com.unity.timeline": { 108 | "version": "1.7.5", 109 | "depth": 0, 110 | "source": "registry", 111 | "dependencies": { 112 | "com.unity.modules.director": "1.0.0", 113 | "com.unity.modules.animation": "1.0.0", 114 | "com.unity.modules.audio": "1.0.0", 115 | "com.unity.modules.particlesystem": "1.0.0" 116 | }, 117 | "url": "https://packages.unity.com" 118 | }, 119 | "com.unity.ugui": { 120 | "version": "1.0.0", 121 | "depth": 0, 122 | "source": "builtin", 123 | "dependencies": { 124 | "com.unity.modules.ui": "1.0.0", 125 | "com.unity.modules.imgui": "1.0.0" 126 | } 127 | }, 128 | "com.unity.visualscripting": { 129 | "version": "1.8.0", 130 | "depth": 0, 131 | "source": "registry", 132 | "dependencies": { 133 | "com.unity.ugui": "1.0.0", 134 | "com.unity.modules.jsonserialize": "1.0.0" 135 | }, 136 | "url": "https://packages.unity.com" 137 | }, 138 | "com.unity.modules.ai": { 139 | "version": "1.0.0", 140 | "depth": 0, 141 | "source": "builtin", 142 | "dependencies": {} 143 | }, 144 | "com.unity.modules.androidjni": { 145 | "version": "1.0.0", 146 | "depth": 0, 147 | "source": "builtin", 148 | "dependencies": {} 149 | }, 150 | "com.unity.modules.animation": { 151 | "version": "1.0.0", 152 | "depth": 0, 153 | "source": "builtin", 154 | "dependencies": {} 155 | }, 156 | "com.unity.modules.assetbundle": { 157 | "version": "1.0.0", 158 | "depth": 0, 159 | "source": "builtin", 160 | "dependencies": {} 161 | }, 162 | "com.unity.modules.audio": { 163 | "version": "1.0.0", 164 | "depth": 0, 165 | "source": "builtin", 166 | "dependencies": {} 167 | }, 168 | "com.unity.modules.cloth": { 169 | "version": "1.0.0", 170 | "depth": 0, 171 | "source": "builtin", 172 | "dependencies": { 173 | "com.unity.modules.physics": "1.0.0" 174 | } 175 | }, 176 | "com.unity.modules.director": { 177 | "version": "1.0.0", 178 | "depth": 0, 179 | "source": "builtin", 180 | "dependencies": { 181 | "com.unity.modules.audio": "1.0.0", 182 | "com.unity.modules.animation": "1.0.0" 183 | } 184 | }, 185 | "com.unity.modules.imageconversion": { 186 | "version": "1.0.0", 187 | "depth": 0, 188 | "source": "builtin", 189 | "dependencies": {} 190 | }, 191 | "com.unity.modules.imgui": { 192 | "version": "1.0.0", 193 | "depth": 0, 194 | "source": "builtin", 195 | "dependencies": {} 196 | }, 197 | "com.unity.modules.jsonserialize": { 198 | "version": "1.0.0", 199 | "depth": 0, 200 | "source": "builtin", 201 | "dependencies": {} 202 | }, 203 | "com.unity.modules.particlesystem": { 204 | "version": "1.0.0", 205 | "depth": 0, 206 | "source": "builtin", 207 | "dependencies": {} 208 | }, 209 | "com.unity.modules.physics": { 210 | "version": "1.0.0", 211 | "depth": 0, 212 | "source": "builtin", 213 | "dependencies": {} 214 | }, 215 | "com.unity.modules.physics2d": { 216 | "version": "1.0.0", 217 | "depth": 0, 218 | "source": "builtin", 219 | "dependencies": {} 220 | }, 221 | "com.unity.modules.screencapture": { 222 | "version": "1.0.0", 223 | "depth": 0, 224 | "source": "builtin", 225 | "dependencies": { 226 | "com.unity.modules.imageconversion": "1.0.0" 227 | } 228 | }, 229 | "com.unity.modules.subsystems": { 230 | "version": "1.0.0", 231 | "depth": 1, 232 | "source": "builtin", 233 | "dependencies": { 234 | "com.unity.modules.jsonserialize": "1.0.0" 235 | } 236 | }, 237 | "com.unity.modules.terrain": { 238 | "version": "1.0.0", 239 | "depth": 0, 240 | "source": "builtin", 241 | "dependencies": {} 242 | }, 243 | "com.unity.modules.terrainphysics": { 244 | "version": "1.0.0", 245 | "depth": 0, 246 | "source": "builtin", 247 | "dependencies": { 248 | "com.unity.modules.physics": "1.0.0", 249 | "com.unity.modules.terrain": "1.0.0" 250 | } 251 | }, 252 | "com.unity.modules.tilemap": { 253 | "version": "1.0.0", 254 | "depth": 0, 255 | "source": "builtin", 256 | "dependencies": { 257 | "com.unity.modules.physics2d": "1.0.0" 258 | } 259 | }, 260 | "com.unity.modules.ui": { 261 | "version": "1.0.0", 262 | "depth": 0, 263 | "source": "builtin", 264 | "dependencies": {} 265 | }, 266 | "com.unity.modules.uielements": { 267 | "version": "1.0.0", 268 | "depth": 0, 269 | "source": "builtin", 270 | "dependencies": { 271 | "com.unity.modules.ui": "1.0.0", 272 | "com.unity.modules.imgui": "1.0.0", 273 | "com.unity.modules.jsonserialize": "1.0.0" 274 | } 275 | }, 276 | "com.unity.modules.umbra": { 277 | "version": "1.0.0", 278 | "depth": 0, 279 | "source": "builtin", 280 | "dependencies": {} 281 | }, 282 | "com.unity.modules.unityanalytics": { 283 | "version": "1.0.0", 284 | "depth": 0, 285 | "source": "builtin", 286 | "dependencies": { 287 | "com.unity.modules.unitywebrequest": "1.0.0", 288 | "com.unity.modules.jsonserialize": "1.0.0" 289 | } 290 | }, 291 | "com.unity.modules.unitywebrequest": { 292 | "version": "1.0.0", 293 | "depth": 0, 294 | "source": "builtin", 295 | "dependencies": {} 296 | }, 297 | "com.unity.modules.unitywebrequestassetbundle": { 298 | "version": "1.0.0", 299 | "depth": 0, 300 | "source": "builtin", 301 | "dependencies": { 302 | "com.unity.modules.assetbundle": "1.0.0", 303 | "com.unity.modules.unitywebrequest": "1.0.0" 304 | } 305 | }, 306 | "com.unity.modules.unitywebrequestaudio": { 307 | "version": "1.0.0", 308 | "depth": 0, 309 | "source": "builtin", 310 | "dependencies": { 311 | "com.unity.modules.unitywebrequest": "1.0.0", 312 | "com.unity.modules.audio": "1.0.0" 313 | } 314 | }, 315 | "com.unity.modules.unitywebrequesttexture": { 316 | "version": "1.0.0", 317 | "depth": 0, 318 | "source": "builtin", 319 | "dependencies": { 320 | "com.unity.modules.unitywebrequest": "1.0.0", 321 | "com.unity.modules.imageconversion": "1.0.0" 322 | } 323 | }, 324 | "com.unity.modules.unitywebrequestwww": { 325 | "version": "1.0.0", 326 | "depth": 0, 327 | "source": "builtin", 328 | "dependencies": { 329 | "com.unity.modules.unitywebrequest": "1.0.0", 330 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 331 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 332 | "com.unity.modules.audio": "1.0.0", 333 | "com.unity.modules.assetbundle": "1.0.0", 334 | "com.unity.modules.imageconversion": "1.0.0" 335 | } 336 | }, 337 | "com.unity.modules.vehicles": { 338 | "version": "1.0.0", 339 | "depth": 0, 340 | "source": "builtin", 341 | "dependencies": { 342 | "com.unity.modules.physics": "1.0.0" 343 | } 344 | }, 345 | "com.unity.modules.video": { 346 | "version": "1.0.0", 347 | "depth": 0, 348 | "source": "builtin", 349 | "dependencies": { 350 | "com.unity.modules.audio": "1.0.0", 351 | "com.unity.modules.ui": "1.0.0", 352 | "com.unity.modules.unitywebrequest": "1.0.0" 353 | } 354 | }, 355 | "com.unity.modules.vr": { 356 | "version": "1.0.0", 357 | "depth": 0, 358 | "source": "builtin", 359 | "dependencies": { 360 | "com.unity.modules.jsonserialize": "1.0.0", 361 | "com.unity.modules.physics": "1.0.0", 362 | "com.unity.modules.xr": "1.0.0" 363 | } 364 | }, 365 | "com.unity.modules.wind": { 366 | "version": "1.0.0", 367 | "depth": 0, 368 | "source": "builtin", 369 | "dependencies": {} 370 | }, 371 | "com.unity.modules.xr": { 372 | "version": "1.0.0", 373 | "depth": 0, 374 | "source": "builtin", 375 | "dependencies": { 376 | "com.unity.modules.physics": "1.0.0", 377 | "com.unity.modules.jsonserialize": "1.0.0", 378 | "com.unity.modules.subsystems": "1.0.0" 379 | } 380 | } 381 | } 382 | } 383 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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.com 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: -830 34 | m_OriginalInstanceId: -832 35 | m_LoadAssets: 0 36 | -------------------------------------------------------------------------------- /DemoProject/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "m_Dictionary": { 3 | "m_DictionaryValues": [] 4 | } 5 | } -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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: 26 7 | productGUID: cbebb48fd5f39094b94715988ee6f84f 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: DemoProject 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_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1920 46 | defaultScreenHeight: 1080 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_SpriteBatchVertexThreshold: 300 52 | m_MTRendering: 1 53 | mipStripping: 0 54 | numberOfMipsStripped: 0 55 | numberOfMipsStrippedPerMipmapLimitGroup: {} 56 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 57 | iosShowActivityIndicatorOnLoading: -1 58 | androidShowActivityIndicatorOnLoading: -1 59 | iosUseCustomAppBackgroundBehavior: 0 60 | allowedAutorotateToPortrait: 1 61 | allowedAutorotateToPortraitUpsideDown: 1 62 | allowedAutorotateToLandscapeRight: 1 63 | allowedAutorotateToLandscapeLeft: 1 64 | useOSAutorotation: 1 65 | use32BitDisplayBuffer: 1 66 | preserveFramebufferAlpha: 0 67 | disableDepthAndStencilBuffers: 0 68 | androidStartInFullscreen: 1 69 | androidRenderOutsideSafeArea: 1 70 | androidUseSwappy: 1 71 | androidBlitType: 0 72 | androidResizableWindow: 0 73 | androidDefaultWindowWidth: 1920 74 | androidDefaultWindowHeight: 1080 75 | androidMinimumWindowWidth: 400 76 | androidMinimumWindowHeight: 300 77 | androidFullscreenMode: 1 78 | defaultIsNativeResolution: 1 79 | macRetinaSupport: 1 80 | runInBackground: 1 81 | captureSingleScreen: 0 82 | muteOtherAudioSources: 0 83 | Prepare IOS For Recording: 0 84 | Force IOS Speakers When Recording: 0 85 | deferSystemGesturesMode: 0 86 | hideHomeButton: 0 87 | submitAnalytics: 1 88 | usePlayerLog: 1 89 | bakeCollisionMeshes: 0 90 | forceSingleInstance: 0 91 | useFlipModelSwapchain: 1 92 | resizableWindow: 0 93 | useMacAppStoreValidation: 0 94 | macAppStoreCategory: public.app-category.games 95 | gpuSkinning: 1 96 | xboxPIXTextureCapture: 0 97 | xboxEnableAvatar: 0 98 | xboxEnableKinect: 0 99 | xboxEnableKinectAutoTracking: 0 100 | xboxEnableFitness: 0 101 | visibleInBackground: 1 102 | allowFullscreenSwitch: 1 103 | fullscreenMode: 1 104 | xboxSpeechDB: 0 105 | xboxEnableHeadOrientation: 0 106 | xboxEnableGuest: 0 107 | xboxEnablePIXSampling: 0 108 | metalFramebufferOnly: 0 109 | xboxOneResolution: 0 110 | xboxOneSResolution: 0 111 | xboxOneXResolution: 3 112 | xboxOneMonoLoggingLevel: 0 113 | xboxOneLoggingLevel: 1 114 | xboxOneDisableEsram: 0 115 | xboxOneEnableTypeOptimization: 0 116 | xboxOnePresentImmediateThreshold: 0 117 | switchQueueCommandMemory: 0 118 | switchQueueControlMemory: 16384 119 | switchQueueComputeMemory: 262144 120 | switchNVNShaderPoolsGranularity: 33554432 121 | switchNVNDefaultPoolsGranularity: 16777216 122 | switchNVNOtherPoolsGranularity: 16777216 123 | switchGpuScratchPoolGranularity: 2097152 124 | switchAllowGpuScratchShrinking: 0 125 | switchNVNMaxPublicTextureIDCount: 0 126 | switchNVNMaxPublicSamplerIDCount: 0 127 | switchNVNGraphicsFirmwareMemory: 32 128 | stadiaPresentMode: 0 129 | stadiaTargetFramerate: 0 130 | vulkanNumSwapchainBuffers: 3 131 | vulkanEnableSetSRGBWrite: 0 132 | vulkanEnablePreTransform: 1 133 | vulkanEnableLateAcquireNextImage: 0 134 | vulkanEnableCommandBufferRecycling: 1 135 | loadStoreDebugModeEnabled: 0 136 | bundleVersion: 0.1 137 | preloadedAssets: [] 138 | metroInputSource: 0 139 | wsaTransparentSwapchain: 0 140 | m_HolographicPauseOnTrackingLoss: 1 141 | xboxOneDisableKinectGpuReservation: 1 142 | xboxOneEnable7thCore: 1 143 | vrSettings: 144 | enable360StereoCapture: 0 145 | isWsaHolographicRemotingEnabled: 0 146 | enableFrameTimingStats: 0 147 | enableOpenGLProfilerGPURecorders: 1 148 | useHDRDisplay: 0 149 | hdrBitDepth: 0 150 | m_ColorGamuts: 00000000 151 | targetPixelDensity: 30 152 | resolutionScalingMode: 0 153 | resetResolutionOnWindowResize: 0 154 | androidSupportedAspectRatio: 1 155 | androidMaxAspectRatio: 2.1 156 | applicationIdentifier: {} 157 | buildNumber: 158 | Standalone: 0 159 | VisionOS: 0 160 | iPhone: 0 161 | tvOS: 0 162 | overrideDefaultApplicationIdentifier: 0 163 | AndroidBundleVersionCode: 1 164 | AndroidMinSdkVersion: 22 165 | AndroidTargetSdkVersion: 0 166 | AndroidPreferredInstallLocation: 1 167 | aotOptions: 168 | stripEngineCode: 1 169 | iPhoneStrippingLevel: 0 170 | iPhoneScriptCallOptimization: 0 171 | ForceInternetPermission: 0 172 | ForceSDCardPermission: 0 173 | CreateWallpaper: 0 174 | APKExpansionFiles: 0 175 | keepLoadedShadersAlive: 0 176 | StripUnusedMeshComponents: 1 177 | strictShaderVariantMatching: 0 178 | VertexChannelCompressionMask: 4054 179 | iPhoneSdkVersion: 988 180 | iOSTargetOSVersionString: 12.0 181 | tvOSSdkVersion: 0 182 | tvOSRequireExtendedGameController: 0 183 | tvOSTargetOSVersionString: 12.0 184 | VisionOSSdkVersion: 0 185 | VisionOSTargetOSVersionString: 1.0 186 | uIPrerenderedIcon: 0 187 | uIRequiresPersistentWiFi: 0 188 | uIRequiresFullScreen: 1 189 | uIStatusBarHidden: 1 190 | uIExitOnSuspend: 0 191 | uIStatusBarStyle: 0 192 | appleTVSplashScreen: {fileID: 0} 193 | appleTVSplashScreen2x: {fileID: 0} 194 | tvOSSmallIconLayers: [] 195 | tvOSSmallIconLayers2x: [] 196 | tvOSLargeIconLayers: [] 197 | tvOSLargeIconLayers2x: [] 198 | tvOSTopShelfImageLayers: [] 199 | tvOSTopShelfImageLayers2x: [] 200 | tvOSTopShelfImageWideLayers: [] 201 | tvOSTopShelfImageWideLayers2x: [] 202 | iOSLaunchScreenType: 0 203 | iOSLaunchScreenPortrait: {fileID: 0} 204 | iOSLaunchScreenLandscape: {fileID: 0} 205 | iOSLaunchScreenBackgroundColor: 206 | serializedVersion: 2 207 | rgba: 0 208 | iOSLaunchScreenFillPct: 100 209 | iOSLaunchScreenSize: 100 210 | iOSLaunchScreenCustomXibPath: 211 | iOSLaunchScreeniPadType: 0 212 | iOSLaunchScreeniPadImage: {fileID: 0} 213 | iOSLaunchScreeniPadBackgroundColor: 214 | serializedVersion: 2 215 | rgba: 0 216 | iOSLaunchScreeniPadFillPct: 100 217 | iOSLaunchScreeniPadSize: 100 218 | iOSLaunchScreeniPadCustomXibPath: 219 | iOSLaunchScreenCustomStoryboardPath: 220 | iOSLaunchScreeniPadCustomStoryboardPath: 221 | iOSDeviceRequirements: [] 222 | iOSURLSchemes: [] 223 | macOSURLSchemes: [] 224 | iOSBackgroundModes: 0 225 | iOSMetalForceHardShadows: 0 226 | metalEditorSupport: 1 227 | metalAPIValidation: 1 228 | iOSRenderExtraFrameOnPause: 0 229 | iosCopyPluginsCodeInsteadOfSymlink: 0 230 | appleDeveloperTeamID: 231 | iOSManualSigningProvisioningProfileID: 232 | tvOSManualSigningProvisioningProfileID: 233 | VisionOSManualSigningProvisioningProfileID: 234 | iOSManualSigningProvisioningProfileType: 0 235 | tvOSManualSigningProvisioningProfileType: 0 236 | VisionOSManualSigningProvisioningProfileType: 0 237 | appleEnableAutomaticSigning: 0 238 | iOSRequireARKit: 0 239 | iOSAutomaticallyDetectAndAddCapabilities: 1 240 | appleEnableProMotion: 0 241 | shaderPrecisionModel: 0 242 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 243 | templatePackageId: com.unity.template.3d@8.1.1 244 | templateDefaultScene: Assets/Scenes/SampleScene.unity 245 | useCustomMainManifest: 0 246 | useCustomLauncherManifest: 0 247 | useCustomMainGradleTemplate: 0 248 | useCustomLauncherGradleManifest: 0 249 | useCustomBaseGradleTemplate: 0 250 | useCustomGradlePropertiesTemplate: 0 251 | useCustomGradleSettingsTemplate: 0 252 | useCustomProguardFile: 0 253 | AndroidTargetArchitectures: 1 254 | AndroidTargetDevices: 0 255 | AndroidSplashScreenScale: 0 256 | androidSplashScreen: {fileID: 0} 257 | AndroidKeystoreName: 258 | AndroidKeyaliasName: 259 | AndroidEnableArmv9SecurityFeatures: 0 260 | AndroidBuildApkPerCpuArchitecture: 0 261 | AndroidTVCompatibility: 0 262 | AndroidIsGame: 1 263 | AndroidEnableTango: 0 264 | androidEnableBanner: 1 265 | androidUseLowAccuracyLocation: 0 266 | androidUseCustomKeystore: 0 267 | m_AndroidBanners: 268 | - width: 320 269 | height: 180 270 | banner: {fileID: 0} 271 | androidGamepadSupportLevel: 0 272 | chromeosInputEmulation: 1 273 | AndroidMinifyRelease: 0 274 | AndroidMinifyDebug: 0 275 | AndroidValidateAppBundleSize: 1 276 | AndroidAppBundleSizeToValidate: 150 277 | m_BuildTargetIcons: [] 278 | m_BuildTargetPlatformIcons: 279 | - m_BuildTarget: Android 280 | m_Icons: 281 | - m_Textures: [] 282 | m_Width: 432 283 | m_Height: 432 284 | m_Kind: 2 285 | m_SubKind: 286 | - m_Textures: [] 287 | m_Width: 324 288 | m_Height: 324 289 | m_Kind: 2 290 | m_SubKind: 291 | - m_Textures: [] 292 | m_Width: 216 293 | m_Height: 216 294 | m_Kind: 2 295 | m_SubKind: 296 | - m_Textures: [] 297 | m_Width: 162 298 | m_Height: 162 299 | m_Kind: 2 300 | m_SubKind: 301 | - m_Textures: [] 302 | m_Width: 108 303 | m_Height: 108 304 | m_Kind: 2 305 | m_SubKind: 306 | - m_Textures: [] 307 | m_Width: 81 308 | m_Height: 81 309 | m_Kind: 2 310 | m_SubKind: 311 | - m_Textures: [] 312 | m_Width: 192 313 | m_Height: 192 314 | m_Kind: 1 315 | m_SubKind: 316 | - m_Textures: [] 317 | m_Width: 144 318 | m_Height: 144 319 | m_Kind: 1 320 | m_SubKind: 321 | - m_Textures: [] 322 | m_Width: 96 323 | m_Height: 96 324 | m_Kind: 1 325 | m_SubKind: 326 | - m_Textures: [] 327 | m_Width: 72 328 | m_Height: 72 329 | m_Kind: 1 330 | m_SubKind: 331 | - m_Textures: [] 332 | m_Width: 48 333 | m_Height: 48 334 | m_Kind: 1 335 | m_SubKind: 336 | - m_Textures: [] 337 | m_Width: 36 338 | m_Height: 36 339 | m_Kind: 1 340 | m_SubKind: 341 | - m_Textures: [] 342 | m_Width: 192 343 | m_Height: 192 344 | m_Kind: 0 345 | m_SubKind: 346 | - m_Textures: [] 347 | m_Width: 144 348 | m_Height: 144 349 | m_Kind: 0 350 | m_SubKind: 351 | - m_Textures: [] 352 | m_Width: 96 353 | m_Height: 96 354 | m_Kind: 0 355 | m_SubKind: 356 | - m_Textures: [] 357 | m_Width: 72 358 | m_Height: 72 359 | m_Kind: 0 360 | m_SubKind: 361 | - m_Textures: [] 362 | m_Width: 48 363 | m_Height: 48 364 | m_Kind: 0 365 | m_SubKind: 366 | - m_Textures: [] 367 | m_Width: 36 368 | m_Height: 36 369 | m_Kind: 0 370 | m_SubKind: 371 | m_BuildTargetBatching: 372 | - m_BuildTarget: Standalone 373 | m_StaticBatching: 1 374 | m_DynamicBatching: 0 375 | - m_BuildTarget: tvOS 376 | m_StaticBatching: 1 377 | m_DynamicBatching: 0 378 | - m_BuildTarget: Android 379 | m_StaticBatching: 1 380 | m_DynamicBatching: 0 381 | - m_BuildTarget: iPhone 382 | m_StaticBatching: 1 383 | m_DynamicBatching: 0 384 | - m_BuildTarget: WebGL 385 | m_StaticBatching: 0 386 | m_DynamicBatching: 0 387 | m_BuildTargetShaderSettings: [] 388 | m_BuildTargetGraphicsJobs: 389 | - m_BuildTarget: MacStandaloneSupport 390 | m_GraphicsJobs: 0 391 | - m_BuildTarget: Switch 392 | m_GraphicsJobs: 1 393 | - m_BuildTarget: MetroSupport 394 | m_GraphicsJobs: 1 395 | - m_BuildTarget: AppleTVSupport 396 | m_GraphicsJobs: 0 397 | - m_BuildTarget: BJMSupport 398 | m_GraphicsJobs: 1 399 | - m_BuildTarget: LinuxStandaloneSupport 400 | m_GraphicsJobs: 1 401 | - m_BuildTarget: PS4Player 402 | m_GraphicsJobs: 1 403 | - m_BuildTarget: iOSSupport 404 | m_GraphicsJobs: 0 405 | - m_BuildTarget: WindowsStandaloneSupport 406 | m_GraphicsJobs: 1 407 | - m_BuildTarget: XboxOnePlayer 408 | m_GraphicsJobs: 1 409 | - m_BuildTarget: LuminSupport 410 | m_GraphicsJobs: 0 411 | - m_BuildTarget: AndroidPlayer 412 | m_GraphicsJobs: 0 413 | - m_BuildTarget: WebGLSupport 414 | m_GraphicsJobs: 0 415 | m_BuildTargetGraphicsJobMode: 416 | - m_BuildTarget: PS4Player 417 | m_GraphicsJobMode: 0 418 | - m_BuildTarget: XboxOnePlayer 419 | m_GraphicsJobMode: 0 420 | m_BuildTargetGraphicsAPIs: 421 | - m_BuildTarget: AndroidPlayer 422 | m_APIs: 150000000b000000 423 | m_Automatic: 1 424 | - m_BuildTarget: iOSSupport 425 | m_APIs: 10000000 426 | m_Automatic: 1 427 | - m_BuildTarget: AppleTVSupport 428 | m_APIs: 10000000 429 | m_Automatic: 1 430 | - m_BuildTarget: WebGLSupport 431 | m_APIs: 0b000000 432 | m_Automatic: 1 433 | m_BuildTargetVRSettings: 434 | - m_BuildTarget: Standalone 435 | m_Enabled: 0 436 | m_Devices: 437 | - Oculus 438 | - OpenVR 439 | m_DefaultShaderChunkSizeInMB: 16 440 | m_DefaultShaderChunkCount: 0 441 | openGLRequireES31: 0 442 | openGLRequireES31AEP: 0 443 | openGLRequireES32: 0 444 | m_TemplateCustomTags: {} 445 | mobileMTRendering: 446 | Android: 1 447 | iPhone: 1 448 | tvOS: 1 449 | m_BuildTargetGroupLightmapEncodingQuality: 450 | - m_BuildTarget: Android 451 | m_EncodingQuality: 1 452 | - m_BuildTarget: iPhone 453 | m_EncodingQuality: 1 454 | - m_BuildTarget: tvOS 455 | m_EncodingQuality: 1 456 | m_BuildTargetGroupHDRCubemapEncodingQuality: 457 | - m_BuildTarget: Android 458 | m_EncodingQuality: 1 459 | - m_BuildTarget: iPhone 460 | m_EncodingQuality: 1 461 | - m_BuildTarget: tvOS 462 | m_EncodingQuality: 1 463 | m_BuildTargetGroupLightmapSettings: [] 464 | m_BuildTargetGroupLoadStoreDebugModeSettings: [] 465 | m_BuildTargetNormalMapEncoding: 466 | - m_BuildTarget: Android 467 | m_Encoding: 1 468 | - m_BuildTarget: iPhone 469 | m_Encoding: 1 470 | - m_BuildTarget: tvOS 471 | m_Encoding: 1 472 | m_BuildTargetDefaultTextureCompressionFormat: 473 | - m_BuildTarget: Android 474 | m_Format: 3 475 | playModeTestRunnerEnabled: 0 476 | runPlayModeTestAsEditModeTest: 0 477 | actionOnDotNetUnhandledException: 1 478 | enableInternalProfiler: 0 479 | logObjCUncaughtExceptions: 1 480 | enableCrashReportAPI: 0 481 | cameraUsageDescription: 482 | locationUsageDescription: 483 | microphoneUsageDescription: 484 | bluetoothUsageDescription: 485 | macOSTargetOSVersion: 10.13.0 486 | switchNMETAOverride: 487 | switchNetLibKey: 488 | switchSocketMemoryPoolSize: 6144 489 | switchSocketAllocatorPoolSize: 128 490 | switchSocketConcurrencyLimit: 14 491 | switchScreenResolutionBehavior: 2 492 | switchUseCPUProfiler: 0 493 | switchUseGOLDLinker: 0 494 | switchLTOSetting: 0 495 | switchApplicationID: 0x01004b9000490000 496 | switchNSODependencies: 497 | switchCompilerFlags: 498 | switchTitleNames_0: 499 | switchTitleNames_1: 500 | switchTitleNames_2: 501 | switchTitleNames_3: 502 | switchTitleNames_4: 503 | switchTitleNames_5: 504 | switchTitleNames_6: 505 | switchTitleNames_7: 506 | switchTitleNames_8: 507 | switchTitleNames_9: 508 | switchTitleNames_10: 509 | switchTitleNames_11: 510 | switchTitleNames_12: 511 | switchTitleNames_13: 512 | switchTitleNames_14: 513 | switchTitleNames_15: 514 | switchPublisherNames_0: 515 | switchPublisherNames_1: 516 | switchPublisherNames_2: 517 | switchPublisherNames_3: 518 | switchPublisherNames_4: 519 | switchPublisherNames_5: 520 | switchPublisherNames_6: 521 | switchPublisherNames_7: 522 | switchPublisherNames_8: 523 | switchPublisherNames_9: 524 | switchPublisherNames_10: 525 | switchPublisherNames_11: 526 | switchPublisherNames_12: 527 | switchPublisherNames_13: 528 | switchPublisherNames_14: 529 | switchPublisherNames_15: 530 | switchIcons_0: {fileID: 0} 531 | switchIcons_1: {fileID: 0} 532 | switchIcons_2: {fileID: 0} 533 | switchIcons_3: {fileID: 0} 534 | switchIcons_4: {fileID: 0} 535 | switchIcons_5: {fileID: 0} 536 | switchIcons_6: {fileID: 0} 537 | switchIcons_7: {fileID: 0} 538 | switchIcons_8: {fileID: 0} 539 | switchIcons_9: {fileID: 0} 540 | switchIcons_10: {fileID: 0} 541 | switchIcons_11: {fileID: 0} 542 | switchIcons_12: {fileID: 0} 543 | switchIcons_13: {fileID: 0} 544 | switchIcons_14: {fileID: 0} 545 | switchIcons_15: {fileID: 0} 546 | switchSmallIcons_0: {fileID: 0} 547 | switchSmallIcons_1: {fileID: 0} 548 | switchSmallIcons_2: {fileID: 0} 549 | switchSmallIcons_3: {fileID: 0} 550 | switchSmallIcons_4: {fileID: 0} 551 | switchSmallIcons_5: {fileID: 0} 552 | switchSmallIcons_6: {fileID: 0} 553 | switchSmallIcons_7: {fileID: 0} 554 | switchSmallIcons_8: {fileID: 0} 555 | switchSmallIcons_9: {fileID: 0} 556 | switchSmallIcons_10: {fileID: 0} 557 | switchSmallIcons_11: {fileID: 0} 558 | switchSmallIcons_12: {fileID: 0} 559 | switchSmallIcons_13: {fileID: 0} 560 | switchSmallIcons_14: {fileID: 0} 561 | switchSmallIcons_15: {fileID: 0} 562 | switchManualHTML: 563 | switchAccessibleURLs: 564 | switchLegalInformation: 565 | switchMainThreadStackSize: 1048576 566 | switchPresenceGroupId: 567 | switchLogoHandling: 0 568 | switchReleaseVersion: 0 569 | switchDisplayVersion: 1.0.0 570 | switchStartupUserAccount: 0 571 | switchSupportedLanguagesMask: 0 572 | switchLogoType: 0 573 | switchApplicationErrorCodeCategory: 574 | switchUserAccountSaveDataSize: 0 575 | switchUserAccountSaveDataJournalSize: 0 576 | switchApplicationAttribute: 0 577 | switchCardSpecSize: -1 578 | switchCardSpecClock: -1 579 | switchRatingsMask: 0 580 | switchRatingsInt_0: 0 581 | switchRatingsInt_1: 0 582 | switchRatingsInt_2: 0 583 | switchRatingsInt_3: 0 584 | switchRatingsInt_4: 0 585 | switchRatingsInt_5: 0 586 | switchRatingsInt_6: 0 587 | switchRatingsInt_7: 0 588 | switchRatingsInt_8: 0 589 | switchRatingsInt_9: 0 590 | switchRatingsInt_10: 0 591 | switchRatingsInt_11: 0 592 | switchRatingsInt_12: 0 593 | switchLocalCommunicationIds_0: 594 | switchLocalCommunicationIds_1: 595 | switchLocalCommunicationIds_2: 596 | switchLocalCommunicationIds_3: 597 | switchLocalCommunicationIds_4: 598 | switchLocalCommunicationIds_5: 599 | switchLocalCommunicationIds_6: 600 | switchLocalCommunicationIds_7: 601 | switchParentalControl: 0 602 | switchAllowsScreenshot: 1 603 | switchAllowsVideoCapturing: 1 604 | switchAllowsRuntimeAddOnContentInstall: 0 605 | switchDataLossConfirmation: 0 606 | switchUserAccountLockEnabled: 0 607 | switchSystemResourceMemory: 16777216 608 | switchSupportedNpadStyles: 22 609 | switchNativeFsCacheSize: 32 610 | switchIsHoldTypeHorizontal: 0 611 | switchSupportedNpadCount: 8 612 | switchEnableTouchScreen: 1 613 | switchSocketConfigEnabled: 0 614 | switchTcpInitialSendBufferSize: 32 615 | switchTcpInitialReceiveBufferSize: 64 616 | switchTcpAutoSendBufferSizeMax: 256 617 | switchTcpAutoReceiveBufferSizeMax: 256 618 | switchUdpSendBufferSize: 9 619 | switchUdpReceiveBufferSize: 42 620 | switchSocketBufferEfficiency: 4 621 | switchSocketInitializeEnabled: 1 622 | switchNetworkInterfaceManagerInitializeEnabled: 1 623 | switchPlayerConnectionEnabled: 1 624 | switchUseNewStyleFilepaths: 1 625 | switchUseLegacyFmodPriorities: 0 626 | switchUseMicroSleepForYield: 1 627 | switchEnableRamDiskSupport: 0 628 | switchMicroSleepForYieldTime: 25 629 | switchRamDiskSpaceSize: 12 630 | ps4NPAgeRating: 12 631 | ps4NPTitleSecret: 632 | ps4NPTrophyPackPath: 633 | ps4ParentalLevel: 11 634 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 635 | ps4Category: 0 636 | ps4MasterVersion: 01.00 637 | ps4AppVersion: 01.00 638 | ps4AppType: 0 639 | ps4ParamSfxPath: 640 | ps4VideoOutPixelFormat: 0 641 | ps4VideoOutInitialWidth: 1920 642 | ps4VideoOutBaseModeInitialWidth: 1920 643 | ps4VideoOutReprojectionRate: 60 644 | ps4PronunciationXMLPath: 645 | ps4PronunciationSIGPath: 646 | ps4BackgroundImagePath: 647 | ps4StartupImagePath: 648 | ps4StartupImagesFolder: 649 | ps4IconImagesFolder: 650 | ps4SaveDataImagePath: 651 | ps4SdkOverride: 652 | ps4BGMPath: 653 | ps4ShareFilePath: 654 | ps4ShareOverlayImagePath: 655 | ps4PrivacyGuardImagePath: 656 | ps4ExtraSceSysFile: 657 | ps4NPtitleDatPath: 658 | ps4RemotePlayKeyAssignment: -1 659 | ps4RemotePlayKeyMappingDir: 660 | ps4PlayTogetherPlayerCount: 0 661 | ps4EnterButtonAssignment: 1 662 | ps4ApplicationParam1: 0 663 | ps4ApplicationParam2: 0 664 | ps4ApplicationParam3: 0 665 | ps4ApplicationParam4: 0 666 | ps4DownloadDataSize: 0 667 | ps4GarlicHeapSize: 2048 668 | ps4ProGarlicHeapSize: 2560 669 | playerPrefsMaxSize: 32768 670 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 671 | ps4pnSessions: 1 672 | ps4pnPresence: 1 673 | ps4pnFriends: 1 674 | ps4pnGameCustomData: 1 675 | playerPrefsSupport: 0 676 | enableApplicationExit: 0 677 | resetTempFolder: 1 678 | restrictedAudioUsageRights: 0 679 | ps4UseResolutionFallback: 0 680 | ps4ReprojectionSupport: 0 681 | ps4UseAudio3dBackend: 0 682 | ps4UseLowGarlicFragmentationMode: 1 683 | ps4SocialScreenEnabled: 0 684 | ps4ScriptOptimizationLevel: 0 685 | ps4Audio3dVirtualSpeakerCount: 14 686 | ps4attribCpuUsage: 0 687 | ps4PatchPkgPath: 688 | ps4PatchLatestPkgPath: 689 | ps4PatchChangeinfoPath: 690 | ps4PatchDayOne: 0 691 | ps4attribUserManagement: 0 692 | ps4attribMoveSupport: 0 693 | ps4attrib3DSupport: 0 694 | ps4attribShareSupport: 0 695 | ps4attribExclusiveVR: 0 696 | ps4disableAutoHideSplash: 0 697 | ps4videoRecordingFeaturesUsed: 0 698 | ps4contentSearchFeaturesUsed: 0 699 | ps4CompatibilityPS5: 0 700 | ps4AllowPS5Detection: 0 701 | ps4GPU800MHz: 1 702 | ps4attribEyeToEyeDistanceSettingVR: 0 703 | ps4IncludedModules: [] 704 | ps4attribVROutputEnabled: 0 705 | monoEnv: 706 | splashScreenBackgroundSourceLandscape: {fileID: 0} 707 | splashScreenBackgroundSourcePortrait: {fileID: 0} 708 | blurSplashScreenBackground: 1 709 | spritePackerPolicy: 710 | webGLMemorySize: 16 711 | webGLExceptionSupport: 1 712 | webGLNameFilesAsHashes: 0 713 | webGLShowDiagnostics: 0 714 | webGLDataCaching: 1 715 | webGLDebugSymbols: 0 716 | webGLEmscriptenArgs: 717 | webGLModulesDirectory: 718 | webGLTemplate: APPLICATION:Default 719 | webGLAnalyzeBuildSize: 0 720 | webGLUseEmbeddedResources: 0 721 | webGLCompressionFormat: 1 722 | webGLWasmArithmeticExceptions: 0 723 | webGLLinkerTarget: 1 724 | webGLThreadsSupport: 0 725 | webGLDecompressionFallback: 0 726 | webGLInitialMemorySize: 32 727 | webGLMaximumMemorySize: 2048 728 | webGLMemoryGrowthMode: 2 729 | webGLMemoryLinearGrowthStep: 16 730 | webGLMemoryGeometricGrowthStep: 0.2 731 | webGLMemoryGeometricGrowthCap: 96 732 | webGLPowerPreference: 2 733 | scriptingDefineSymbols: {} 734 | additionalCompilerArguments: {} 735 | platformArchitecture: {} 736 | scriptingBackend: {} 737 | il2cppCompilerConfiguration: {} 738 | il2cppCodeGeneration: {} 739 | managedStrippingLevel: 740 | EmbeddedLinux: 1 741 | GameCoreScarlett: 1 742 | GameCoreXboxOne: 1 743 | Nintendo Switch: 1 744 | PS4: 1 745 | PS5: 1 746 | QNX: 1 747 | Stadia: 1 748 | VisionOS: 1 749 | WebGL: 1 750 | Windows Store Apps: 1 751 | XboxOne: 1 752 | iPhone: 1 753 | tvOS: 1 754 | incrementalIl2cppBuild: {} 755 | suppressCommonWarnings: 1 756 | allowUnsafeCode: 0 757 | useDeterministicCompilation: 1 758 | additionalIl2CppArgs: 759 | scriptingRuntimeVersion: 1 760 | gcIncremental: 1 761 | gcWBarrierValidation: 0 762 | apiCompatibilityLevelPerPlatform: {} 763 | m_RenderingPath: 1 764 | m_MobileRenderingPath: 1 765 | metroPackageName: DemoProject 766 | metroPackageVersion: 767 | metroCertificatePath: 768 | metroCertificatePassword: 769 | metroCertificateSubject: 770 | metroCertificateIssuer: 771 | metroCertificateNotAfter: 0000000000000000 772 | metroApplicationDescription: DemoProject 773 | wsaImages: {} 774 | metroTileShortName: 775 | metroTileShowName: 0 776 | metroMediumTileShowName: 0 777 | metroLargeTileShowName: 0 778 | metroWideTileShowName: 0 779 | metroSupportStreamingInstall: 0 780 | metroLastRequiredScene: 0 781 | metroDefaultTileSize: 1 782 | metroTileForegroundText: 2 783 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 784 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 785 | metroSplashScreenUseBackgroundColor: 0 786 | platformCapabilities: {} 787 | metroTargetDeviceFamilies: {} 788 | metroFTAName: 789 | metroFTAFileTypes: [] 790 | metroProtocolName: 791 | vcxProjDefaultLanguage: 792 | XboxOneProductId: 793 | XboxOneUpdateKey: 794 | XboxOneSandboxId: 795 | XboxOneContentId: 796 | XboxOneTitleId: 797 | XboxOneSCId: 798 | XboxOneGameOsOverridePath: 799 | XboxOnePackagingOverridePath: 800 | XboxOneAppManifestOverridePath: 801 | XboxOneVersion: 1.0.0.0 802 | XboxOnePackageEncryption: 0 803 | XboxOnePackageUpdateGranularity: 2 804 | XboxOneDescription: 805 | XboxOneLanguage: 806 | - enus 807 | XboxOneCapability: [] 808 | XboxOneGameRating: {} 809 | XboxOneIsContentPackage: 0 810 | XboxOneEnhancedXboxCompatibilityMode: 0 811 | XboxOneEnableGPUVariability: 1 812 | XboxOneSockets: {} 813 | XboxOneSplashScreen: {fileID: 0} 814 | XboxOneAllowedProductIds: [] 815 | XboxOnePersistentLocalStorageSize: 0 816 | XboxOneXTitleMemory: 8 817 | XboxOneOverrideIdentityName: 818 | XboxOneOverrideIdentityPublisher: 819 | vrEditorSettings: {} 820 | cloudServicesEnabled: 821 | UNet: 1 822 | luminIcon: 823 | m_Name: 824 | m_ModelFolderPath: 825 | m_PortalFolderPath: 826 | luminCert: 827 | m_CertPath: 828 | m_SignPackage: 1 829 | luminIsChannelApp: 0 830 | luminVersion: 831 | m_VersionCode: 1 832 | m_VersionName: 833 | hmiPlayerDataPath: 834 | hmiForceSRGBBlit: 1 835 | embeddedLinuxEnableGamepadInput: 1 836 | hmiLogStartupTiming: 0 837 | hmiCpuConfiguration: 838 | apiCompatibilityLevel: 6 839 | activeInputHandler: 0 840 | windowsGamepadBackendHint: 0 841 | cloudProjectId: 842 | framebufferDepthMemorylessMode: 0 843 | qualitySettingsNames: [] 844 | projectName: 845 | organizationId: 846 | cloudEnabled: 0 847 | legacyClampBlendShapeWeights: 0 848 | hmiLoadingImage: {fileID: 0} 849 | platformRequiresReadableAssets: 0 850 | virtualTexturingSupportEnabled: 0 851 | insecureHttpOption: 0 852 | -------------------------------------------------------------------------------- /DemoProject/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2022.3.6f1 2 | m_EditorVersionWithRevision: 2022.3.6f1 (b9e6e7e9fa2d) 3 | -------------------------------------------------------------------------------- /DemoProject/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 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /DemoProject/ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "defaultInstantiationMode": 0 8 | }, 9 | { 10 | "userAdded": false, 11 | "type": "UnityEditor.Animations.AnimatorController", 12 | "defaultInstantiationMode": 0 13 | }, 14 | { 15 | "userAdded": false, 16 | "type": "UnityEngine.AnimatorOverrideController", 17 | "defaultInstantiationMode": 0 18 | }, 19 | { 20 | "userAdded": false, 21 | "type": "UnityEditor.Audio.AudioMixerController", 22 | "defaultInstantiationMode": 0 23 | }, 24 | { 25 | "userAdded": false, 26 | "type": "UnityEngine.ComputeShader", 27 | "defaultInstantiationMode": 1 28 | }, 29 | { 30 | "userAdded": false, 31 | "type": "UnityEngine.Cubemap", 32 | "defaultInstantiationMode": 0 33 | }, 34 | { 35 | "userAdded": false, 36 | "type": "UnityEngine.GameObject", 37 | "defaultInstantiationMode": 0 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEditor.LightingDataAsset", 42 | "defaultInstantiationMode": 0 43 | }, 44 | { 45 | "userAdded": false, 46 | "type": "UnityEngine.LightingSettings", 47 | "defaultInstantiationMode": 0 48 | }, 49 | { 50 | "userAdded": false, 51 | "type": "UnityEngine.Material", 52 | "defaultInstantiationMode": 0 53 | }, 54 | { 55 | "userAdded": false, 56 | "type": "UnityEditor.MonoScript", 57 | "defaultInstantiationMode": 1 58 | }, 59 | { 60 | "userAdded": false, 61 | "type": "UnityEngine.PhysicMaterial", 62 | "defaultInstantiationMode": 0 63 | }, 64 | { 65 | "userAdded": false, 66 | "type": "UnityEngine.PhysicsMaterial2D", 67 | "defaultInstantiationMode": 0 68 | }, 69 | { 70 | "userAdded": false, 71 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 72 | "defaultInstantiationMode": 0 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 77 | "defaultInstantiationMode": 0 78 | }, 79 | { 80 | "userAdded": false, 81 | "type": "UnityEngine.Rendering.VolumeProfile", 82 | "defaultInstantiationMode": 0 83 | }, 84 | { 85 | "userAdded": false, 86 | "type": "UnityEditor.SceneAsset", 87 | "defaultInstantiationMode": 1 88 | }, 89 | { 90 | "userAdded": false, 91 | "type": "UnityEngine.Shader", 92 | "defaultInstantiationMode": 1 93 | }, 94 | { 95 | "userAdded": false, 96 | "type": "UnityEngine.ShaderVariantCollection", 97 | "defaultInstantiationMode": 1 98 | }, 99 | { 100 | "userAdded": false, 101 | "type": "UnityEngine.Texture", 102 | "defaultInstantiationMode": 0 103 | }, 104 | { 105 | "userAdded": false, 106 | "type": "UnityEngine.Texture2D", 107 | "defaultInstantiationMode": 0 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Timeline.TimelineAsset", 112 | "defaultInstantiationMode": 0 113 | } 114 | ], 115 | "defaultDependencyTypeInfo": { 116 | "userAdded": false, 117 | "type": "", 118 | "defaultInstantiationMode": 1 119 | }, 120 | "newSceneOverride": 0 121 | } -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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: 0 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_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | -------------------------------------------------------------------------------- /DemoProject/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 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 HashEdits 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | Credit to this piece of software must be atributed to HashEdits evrywhere it's used. 16 | Removing credit is also forbiden. 17 | 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | # EditDistributor 🗳️ 6 | 7 | This is a tool to automate and ease the distribution of modifications of Unity 3D models. 8 | 9 | 10 | 11 |

12 | Overview of the tools 13 |

14 | 15 | 16 | This set of tools enables you to distribute your modifications to any 3D models with ease. 17 | 18 | Its main use case is to generate a difference between your modifications on a 3D model and an original 3D model created by a third party, which you don't have the rights to distribute the original data. 19 | 20 | 21 | My set of tools lets you build a patcher and maintain it with ease, saving you time and letting your customers have a reliable way to install your modifications, building a reliable way for them to interact with your products. 22 | 23 | The updater tool lets you maintain your modifications if the original creator updates their model. 24 | 25 | An option is also avaliable to automate the generation of localized descriptions for your storefronts. 26 | 27 | 28 | This tool is used mainly by the avatar creators from [VRCFT](https://github.com/benaclejames/VRCFaceTracking) to distribute face tracking add-ons/DLC. 29 | 30 | ⚠️**If you end up using the tools please credit my socials and this GitHub Page**⚠️ 31 | 32 | ## Pre-requisites 🤓 33 | 34 | A Unity project 35 | 36 | A 3D model 37 | 38 | A modification of that 3D model 39 | 40 | ## How to use 😎 41 | 42 | [![da tutorial](https://raw.githubusercontent.com/HashEdits/EditDistributionTools/main/ReadMeFiles/distribution_tools_thumbnail.png)](https://youtu.be/Scs3xrX7tCA?si=SA96iIs4U9auXUEA) 43 | 44 | - Make sure both your model and your face tracked model are in your unity project 45 | 46 | - Make sure your modified model is stored in the following file structure: 47 | `Assets/YourName/NameOfTheAvatar/fbx/YourCoolModel.fbx` 48 | 49 | - Access the builder in your toolbar at 50 | `Tools/Hash/EditDistributor/Builder` 51 | 52 | - Drag and drop the prefab of the original model 53 | 54 | - Drag and drop the prefab of the modified model 55 | 56 | - (optional) change the distribution name if you don't want to use the name of the original model 57 | 58 | - Enter your name 59 | 60 | - Enter the name of the original package that end users will import in their projects 61 | 62 | - (optional) gather up your descriptions and readme files in a folder to ease the creation of the store pages pages and fill in the relevent information 63 | 64 | - Hit the `Build` button 65 | 66 | ## Builder🔧 67 | 68 |

69 | Builder Window 70 |

71 | 72 | Number| Name| Description 73 | -------- | -----| ----- 74 | 1| Original model slot| A slot to drag and drop a prefab of the original model into (requires the moddel to have an avatar component for now) | 75 | 2| Modified model slot | A slot to drag and drop a prefab of your modified model into (requires the moddel to have an avatar component for now) | 76 | 3|Overwrite Checkbox | Will use the name of your modified model to created the patcher script and your menu bar if left unckecked. Will use the OverwriteName if checked 77 | 4| OverwriteName | Name that will be used for the patcher script and hotbar menu if the overwrite checkbox is ticked 78 | 5| Your Name | Will be used to organize your patchers in the menu bar 79 | 6| Original package name | Will be used to let your user know which version of the original model they're expected to import. Very crucial to give them some sort of version number here that will resonate with your user. 80 | 7| Generate descriptions checkbox | (`Optional`) Will enable the description generator feature 81 | 8| Description folder selection button | This button will prompt you to select a description folder. All .txt files will be scanned and copied in the destination folder after hitting patch if the Generate descriptions checkbox is checked 82 | 9| Destination folder selection button | This button will prompt you to select a destination folder. All files found in the description folder will be coppied in this directory with the tags changed 83 | 10| Creator name | All `/*AVATAR AUTHOR*/` tags will be replaced by what you put in there 84 | 11| Store page | All `/*StoreLink*/` tags will be replaced by what you put in there 85 | 12| Build button | Will generate a patcher script, the diff files and the descriptions (if you've checked the option) 86 | 87 | 88 | ## Description generator tags 📑 89 | You'll find an example readme in [here](https://github.com/HashEdits/EditDistributionTools/tree/main/demo%20packages/SampleDescriptions) to show you how to write your descriptions 90 | and another one [there](https://github.com/HashEdits/EditDistributionTools/tree/main/demo%20packages/MyCubeDescriptions) to show you how they look like after everything's replaced. 91 | 92 | Tag| Signification| 93 | -------- | ----- 94 | `/*AVATAR NAME*/`|Will be replaced by the name of your custom avatar or the OverwriteName if the coresponding checkbox is checked 95 | `/*AVATAR AUTHOR*/`|Will be replaced by the name of creator 96 | `/*StoreLink*/` |Will be replaced by a link to where the user can buy the original moddel [^(pro-tip for booth users, if you naviagte to the creator page first, it'll translate in the user's prefered language)] 97 | `/*PACKAGE NAME*/` |Will be replaced by the name of the package the user is expected to have on hand when using your patcher 98 | `/*DIR PREFAB*/` |Will be replaced by where your user will be able to find a working prefab of your moddel 99 | `/*DIR PATCHER*/` |Will be replaced by where your user will be able to find your menu bar menu 100 | 101 | Will be replaced by something that makes sense in for your project 102 | 103 | ## Updater 🔧 104 | 105 | You may want to update and maintain your modifications in the future. Instead of having to create a whole new patcher everytime, I created an Updater tool to make the process of porting to a newer version easier: 106 | 107 | 108 |

109 | Updater Window 110 |

111 | 112 | 113 | Number| Name| Description 114 | -------- | -----| ----- 115 | 1| Updated original model slot| A slot to drag and drop a prefab of the updated original model into (requires the model to have an avatar component for now) | 116 | 2| Updated Modified model slot | A slot to drag and drop a prefab of your updated modified model into (requires the model to have an avatar component for now) | 117 | 3| Updated original package name | Will be used to let your user know which version of the original model they're expected to import. very crutial to give them some sort of version number here that will resonate with your user. 118 | 4| Generate descriptions checkbox | (`Optional`) Will enable the description generator feature 119 | 5| Description folder selection button | This button will prompt you to select a description folder. All txt files will be scanned and copied in the destination folder after hitting patch if the Generate descriptions checkbox is checked 120 | 6| Destination folder selection button | This button will prompt you to select a destination folder. all files found in the description folder will be coppied in this directory with the tags changed 121 | 7| Creator name | All `/*AVATAR AUTHOR*/` tags will be replaced by what you put in there 122 | 8| Store page | All `/*StoreLink*/` tags will be replaced by what you put in there 123 | 9| Update button | Will update the patcher script, the diff files and the descriptions (if you've checked the option) 124 | 125 | ## Upcoming features 126 | 127 | I've tried setting up a board for y'all to see what I'd like to add to flesh out my face tracking tools. 128 | 129 | [Here's a link to it!](https://github.com/users/HashEdits/projects/1/views/1) 130 | 131 | 132 | 133 | 134 | ## Credits 📕 135 | 136 | **[VRCFT](https://github.com/benaclejames/VRCFaceTracking)** 137 | 138 | **[HDiffPatch](https://github.com/sisong/HDiffPatch)** 139 | 140 | **[StackEdit](stackedit.io)** 141 | -------------------------------------------------------------------------------- /ReadMeFiles/Builderwindowindex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Builderwindowindex.png -------------------------------------------------------------------------------- /ReadMeFiles/Builderwindowindexwithnumbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Builderwindowindexwithnumbers.png -------------------------------------------------------------------------------- /ReadMeFiles/Remplaced strings sampledescription.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Remplaced strings sampledescription.png -------------------------------------------------------------------------------- /ReadMeFiles/Updaterwindowindex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Updaterwindowindex.png -------------------------------------------------------------------------------- /ReadMeFiles/Updaterwindowindexwithnumbers.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Updaterwindowindexwithnumbers.pdn -------------------------------------------------------------------------------- /ReadMeFiles/Updaterwindowindexwithnumbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/Updaterwindowindexwithnumbers.png -------------------------------------------------------------------------------- /ReadMeFiles/distribution_tools_thumbnail.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/distribution_tools_thumbnail.pdn -------------------------------------------------------------------------------- /ReadMeFiles/distribution_tools_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/distribution_tools_thumbnail.png -------------------------------------------------------------------------------- /ReadMeFiles/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/header.png -------------------------------------------------------------------------------- /ReadMeFiles/sampledescription.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/ReadMeFiles/sampledescription.png -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.0.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.0.unitypackage -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.1.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.1.unitypackage -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.2.1.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.2.1.unitypackage -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.2.2.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.2.2.unitypackage -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.2.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.2.unitypackage -------------------------------------------------------------------------------- /Releases/EditDistributionTools-v2.3.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/Releases/EditDistributionTools-v2.3.unitypackage -------------------------------------------------------------------------------- /demo cube.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/demo cube.blend -------------------------------------------------------------------------------- /demo packages/MyCubeDescriptions/SampleDescription EN.txt: -------------------------------------------------------------------------------- 1 | plz buy my kewl modification of BlenderCube 2 | 3 | you can get the original moddel by Deez at deez.booth.pm 4 | 5 | you need to have this sepcific version of the package: SampleCube v1.0.unitypackage 6 | 7 | once you have the original package and my package imported, 8 | go at the top of your unity window and go to Tools/Hash/BlenderCubePatcher and click patch 9 | 10 | once that is done, drag and drop the prefab located at Tools/Hash/BlenderCubePatcher in your scene 11 | 12 | and enjoy :) -------------------------------------------------------------------------------- /demo packages/MyCubeDescriptions/SampleDescription FR.txt: -------------------------------------------------------------------------------- 1 | svp achet mes modifications de BlenderCube 2 | 3 | tu peux le modèle original fait par Deez à deez.booth.pm 4 | 5 | t'aura besoin de cette version du package SampleCube v1.0.unitypackage 6 | 7 | une fois que t'a ce package et mon package importé 8 | va en haut de ta fenêtre unity et va dans Tools/Hash/BlenderCubePatcher et clique le bouton "patch" 9 | 10 | Une fois que c'est fait, drag and drop la préfab qui se trouve à Tools/Hash/BlenderCubePatcher dans ta scene 11 | 12 | Amuse toi bien :) -------------------------------------------------------------------------------- /demo packages/SampleCube Patcher.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/demo packages/SampleCube Patcher.unitypackage -------------------------------------------------------------------------------- /demo packages/SampleCube v1.0.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HashEdits/EditDistributionTools/3de7d8a5a833ec03bb8361ada23c1185c67ecea3/demo packages/SampleCube v1.0.unitypackage -------------------------------------------------------------------------------- /demo packages/SampleDescriptions/SampleDescription EN.txt: -------------------------------------------------------------------------------- 1 | plz buy my kewl modification of /*AVATAR NAME*/ 2 | 3 | you can get the original moddel by /*AVATAR AUTHOR*/ at /*StoreLink*/ 4 | 5 | you need to have this sepcific version of the package: /*PACKAGE NAME*/ 6 | 7 | once you have the original package and my package imported, 8 | go at the top of your unity window and go to /*DIR PATCHER*/ and click patch 9 | 10 | once that is done, drag and drop the prefab located at /*DIR PATCHER*/ in your scene 11 | 12 | and enjoy :) -------------------------------------------------------------------------------- /demo packages/SampleDescriptions/SampleDescription FR.txt: -------------------------------------------------------------------------------- 1 | svp achet mes modifications de /*AVATAR NAME*/ 2 | 3 | tu peux le modèle original fait par /*AVATAR AUTHOR*/ à /*StoreLink*/ 4 | 5 | t'aura besoin de cette version du package /*PACKAGE NAME*/ 6 | 7 | une fois que t'a ce package et mon package importé 8 | va en haut de ta fenêtre unity et va dans /*DIR PATCHER*/ et clique le bouton "patch" 9 | 10 | Une fois que c'est fait, drag and drop la préfab qui se trouve à /*DIR PATCHER*/ dans ta scene 11 | 12 | Amuse toi bien :) --------------------------------------------------------------------------------