OSL Easy Patcher
A lightweight Unity patcher for teams that need runtime content updates without adopting a full Addressables workflow. It downloads only changed files, supports optional compressed manifests, and can continue partial transfers when the host supports HTTP Range requests.
Table of Contents
- Overview
- Who Should Use This
- Requirements
- Installation
- Quick Start
- Editor — Uploader Window
- Runtime Setup
- Custom Loader (IOSLLoader)
- Frequently Asked Questions
- Troubleshooting
Overview
OSL Easy Patcher compares a remote manifest with the local cache, downloads only missing or changed files, and retries failures per file. The uploader can keep plain version.json beside optional GZip/Brotli sidecars and supports Local Folder, Google Cloud Storage, AWS S3 or a path-style S3-compatible endpoint, Unity CCD, and Azure Blob Storage without bundling the corresponding cloud SDKs.
Who Should Use This
Use OSL Easy Patcher when your Unity project needs:
- Runtime delivery of changed files
- Resume support for interrupted large files on HTTP Range-capable hosts
- A lightweight patching workflow controlled from the Unity Editor
- Manifest-based patch checks
- Optional GZip/Brotli manifest sidecars with plain JSON fallback
- Optional path-style S3-compatible Editor upload endpoint
- A custom loader hook for your own asset loading strategy
Requirements
| Item | Version |
|---|---|
| Unity | 2021.3 LTS or later |
| Tested Unity versions | 2021.3.45f2 and 6000.3.12f1 (EasyPatcher EditMode tests and package-isolation import/compile) |
| .NET Standard | 2.1 |
| HTTP host | Range request support required for partial-file resume |
| TextMeshPro (optional) | Auto-detected when available |
Installation
- Search for OSL Easy Patcher in the Unity Asset Store, or open it directly at Unity Asset Store (OSL Easy Patcher).
- Click Add to My Assets.
- Open Unity and navigate to Window > Package Manager.
- Select Packages: My Assets from the dropdown.
- Locate OSL Easy Patcher, download it, and click Import.
- Wait for Unity to finish script compilation.
Quick Start
Goal: confirm that the package is imported and the local patch flow can run.
- Prepare a local folder containing test patch files.
- Open Tools > OSL > Easy Patcher Uploader from the Unity menu bar.
- Select the test patch folder.
- Generate the manifest and send/copy the test files to a local destination.
- Configure a test Remote Base URL or local test server.
- Add
OSLPatchUIControllerto a loading scene. - Press Play and confirm that the patch check runs.
Editor — Uploader Window
Open via OSL → Easy Patcher Uploader in the Unity menu bar.
| Field | Description |
|---|---|
| Active Slot | Selects which version slot to work on. |
| Patch Folder | The local folder containing your built patch files. |
| Refresh | Re-scans the folder and rebuilds the file tree. |
| Upload Backend | Selects the configured upload destination. |
| Manifest Compression | Keeps plain JSON and optionally adds GZip, Brotli, or both sidecars. |
| Generate Manifest & Upload | Generates the manifest artifacts and sends files through the selected workflow. |
Runtime Setup
- Add the
OSLPatchUIControllercomponent to a GameObject in your loading scene. - Assign the Remote Base URL, Manifest Compression preference, Progress Slider, Status Text, and Size Text fields.
- Set the Loader field to an
OSLSimpleBundleLoaderinstance or your customIOSLLoaderimplementation.
Custom Loader (IOSLLoader)
Implement IOSLLoader to use Addressables, a custom bundle system, or any other asset loading strategy:
[Serializable]
public class MyCustomLoader : IOSLLoader
{
public async Task InitializeAsync() { /* ... */ }
public async Task<T> LoadAssetAsync<T>(string key) where T : Object { /* ... */ }
public void ReleaseAsset(string key) { /* ... */ }
}
Frequently Asked Questions
Q: Where are patch files cached on the player's device?
A: Application.persistentDataPath/OSL/EasyPatcher/ by default.
Q: What happens if the download is interrupted?
A: A later run can continue the partial file when the HTTP host honors Range requests. If the host ignores Range, the integrity check can reject the appended file and retry it from the beginning.
Q: Can I patch non-AssetBundle files?
A: Yes. The patch system transfers files, and loading is handled by your IOSLLoader implementation.
Q: Are compressed manifests required?
A: No. The uploader always keeps version.json, and compressed runtime modes fall back to that plain manifest.
Troubleshooting
| Symptom | Likely cause | Action |
|---|---|---|
| Patch check does not start | Runtime component is not assigned | Confirm OSLPatchUIController exists in the loading scene. |
| Test files are not detected | Patch folder is empty or not refreshed | Refresh the uploader window and check the selected folder. |
| Assets do not load after patching | Loader setup is incomplete | Assign or implement the correct IOSLLoader. |
| UI text or progress does not update | UI references are missing | Assign the progress and status fields in the Inspector. |