{"id":16209874,"url":"https://github.com/jdsherbert/unreal-engine-async-load-tool","last_synced_at":"2025-07-15T16:39:13.054Z","repository":{"id":211468986,"uuid":"729240304","full_name":"JDSherbert/Unreal-Engine-Async-Load-Tool","owner":"JDSherbert","description":"Asynchronous Loading tool for Unreal Engine allowing soft loading of objects freely or with a callback.","archived":false,"fork":false,"pushed_at":"2024-05-17T16:24:49.000Z","size":43,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T00:51:47.439Z","etag":null,"topics":["async","asynchronous","asyncloader","callback-functions","cpp","loading","module","unreal-engine","unreal-engine-5"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JDSherbert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-08T17:36:54.000Z","updated_at":"2025-03-11T03:33:53.000Z","dependencies_parsed_at":"2023-12-30T23:26:08.130Z","dependency_job_id":"600af959-9104-456a-8777-4ec70ef5b61a","html_url":"https://github.com/JDSherbert/Unreal-Engine-Async-Load-Tool","commit_stats":null,"previous_names":["jdsherbert/unreal-engine-async-load-tool"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JDSherbert/Unreal-Engine-Async-Load-Tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDSherbert%2FUnreal-Engine-Async-Load-Tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDSherbert%2FUnreal-Engine-Async-Load-Tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDSherbert%2FUnreal-Engine-Async-Load-Tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDSherbert%2FUnreal-Engine-Async-Load-Tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JDSherbert","download_url":"https://codeload.github.com/JDSherbert/Unreal-Engine-Async-Load-Tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDSherbert%2FUnreal-Engine-Async-Load-Tool/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265445569,"owners_count":23766511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","asynchronous","asyncloader","callback-functions","cpp","loading","module","unreal-engine","unreal-engine-5"],"created_at":"2024-10-10T10:33:41.508Z","updated_at":"2025-07-15T16:39:13.027Z","avatar_url":"https://github.com/JDSherbert.png","language":"C++","readme":"![image](https://user-images.githubusercontent.com/43964243/235778441-9dfb45ab-befd-480b-bc30-5eab5dc2efef.png)\n\n# Unreal Engine Async Load Tool\n\n\u003c!-- Header Start --\u003e\n\u003ca href = \"https://docs.unrealengine.com/5.3/en-US/\"\u003e \u003cimg height=\"40\" img width=\"40\" src=\"https://cdn.simpleicons.org/unrealengine/white\"\u003e \u003c/a\u003e \n\u003ca href = \"https://learn.microsoft.com/en-us/cpp/cpp-language\"\u003e \u003cimg height=\"40\" img width=\"40\" src=\"https://cdn.simpleicons.org/c++\"\u003e \u003c/a\u003e\n\u003cimg align=\"right\" alt=\"Stars Badge\" src=\"https://img.shields.io/github/stars/jdsherbert/Unreal-Engine-Async-Load-Tool?label=%E2%AD%90\"/\u003e\n\u003cimg align=\"right\" alt=\"Forks Badge\" src=\"https://img.shields.io/github/forks/jdsherbert/Unreal-Engine-Async-Load-Tool?label=%F0%9F%8D%B4\"/\u003e\n\u003cimg align=\"right\" alt=\"Watchers Badge\" src=\"https://img.shields.io/github/watchers/jdsherbert/Unreal-Engine-Async-Load-Tool?label=%F0%9F%91%81%EF%B8%8F\"/\u003e\n\u003cimg align=\"right\" alt=\"Issues Badge\" src=\"https://img.shields.io/github/issues/jdsherbert/Unreal-Engine-Async-Load-Tool?label=%E2%9A%A0%EF%B8%8F\"/\u003e\n\u003cimg align=\"right\" src=\"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FJDSherbert%2FUnreal-Engine-Async-Load-Tool%2Fhit-counter%2FREADME\u0026count_bg=%2379C83D\u0026title_bg=%23555555\u0026labelColor=0E1128\u0026title=🔍\u0026style=for-the-badge\"\u003e\n\u003c!-- Header End --\u003e \n\n-----------------------------------------------------------------------\n\n\u003ca href=\"https://docs.unrealengine.com/5.3/en-US/\"\u003e \n  \u003cimg align=\"left\" alt=\"Unreal Engine Tool\" src=\"https://img.shields.io/badge/Unreal%20Engine%20Tool-black?style=for-the-badge\u0026logo=unrealengine\u0026logoColor=white\u0026color=black\u0026labelColor=black\"\u003e \u003c/a\u003e\n  \n\u003ca href=\"https://choosealicense.com/licenses/mit/\"\u003e \n  \u003cimg align=\"right\" alt=\"License\" src=\"https://img.shields.io/badge/License%20:%20MIT-black?style=for-the-badge\u0026logo=mit\u0026logoColor=white\u0026color=black\u0026labelColor=black\"\u003e \u003c/a\u003e\n  \n\u003cbr\u003e\u003c/br\u003e\n\n-----------------------------------------------------------------------\n## Overview\nCompact Blueprint Function Library class that contains a set of static functions that makes asynchronous loading of UObjects more unified and easier to do.\nUtilizes the internal streaming assets manager and throwaway lambda callbacks.\nNote that this is naturally latent, so always assess the validity of the asynchronously loaded object before use.\n\nThese functions are also available in blueprint!\n\n-----------------------------------------------------------------------\n\n### Why Asynchronously Load Anything?\nLoading game assets asynchronously offers several benefits:\n\n- Reduced Loading Times: We can preload what we need!\n- Improved Responsiveness: Asynchronous loading helps prevent the main thread from being blocked, allowing other processes to continue unimpeded.\n- Optimized Resource Usage: Loading assets asynchronously allows for better management of system resources and optimization.\n- Dynamic Loading and Unloading: Assets can be loaded or unloaded based on the player's location or progression, helping to conserve resources.\n- Streaming and Seamless Transitions: Asynchronous loading supports streaming of assets, allowing for seamless transitions between different parts of the game world. This is essential for maintaining a continuous and immersive experience without noticeable interruptions or loading screens.\n- Parallel Processing: While one set of assets is being loaded, other game-related tasks can be performed simultaneously, maximizing the utilization of available hardware resources.\n- Adaptability to Varying Hardware: Stability and resource delegation.\n\nIn summary, loading game assets asynchronously contributes to a more responsive, efficient, and immersive gaming experience, particularly in scenarios where large and dynamic game worlds are involved.\n\n-----------------------------------------------------------------------\n### Using the Tool\n\nFirst, implement the this gameplay module into your project.\n\nThen, there are two ways to load with the tool:\n1. Without Callback (Pointer Only)\n```cpp\n    template\u003cclass T = UObject\u003e\n    UFUNCTION(BlueprintCallable, Category = \"Async Loader\")\n    static void AsyncLoadObject(TSoftObjectPtr\u003cT\u003e SoftPtr, T*\u0026 Out_LoadedObject);\n```\nAttempts to load an asset at a defined path asynchronously, and store it in a variable on completion.\n```cpp    \n// EXAMPLE:\nvoid MyClass::MyFunction()\n{ \n    TSoftObjectPtr\u003cUSomeObject\u003e ObjectSoftPtr = SoftObjectPtrToYourObject;\n    USomeObject* SomeLoadedObject = nullptr;\n    UAsyncLoader::AsyncLoadObject\u003cUSomeObject\u003e(ObjectSoftPtr, SomeLoadedObject);\n    // Use the loaded object\n    if (SomeLoadedObject != nullptr) // Always check for nullptrs on asyncloaded objects\n    {\n        // Do something with the loaded object\n    }\n}\n```\n\n\n2. With Callback\n```cpp\n    template\u003cclass T = UObject\u003e\n    UFUNCTION(BlueprintCallable, Category = \"Async Loader\")\n    static void AsyncLoadObject(TSoftObjectPtr\u003cT\u003e SoftPtr, void(*Callback)(T* LoadedObject));\n```\nAttempts to load an asset at a defined path asynchronously.\nWill call the supplied function pointer on success, passing the loaded object pointer as a parameter.\nUseful if you want to be notified when the load is completed.\n```cpp\n// EXAMPLE:\nvoid MyClass::MyLoadCompleteCallback(UObject* LoadedObject)\n{\n    // Handle the loaded object\n    if (LoadedObject != nullptr) // Always check for nullptrs on asyncloaded objects\n    {\n        // Do something with the loaded object\n    }\n}\n\nvoid MyClass::MyFunction()\n{\n    TSoftObjectPtr\u003cUObject\u003e ObjectSoftPtr = SoftObjectPtrToYourObject;\n    UAsyncLoader::AsyncLoadObject(ObjectSoftPtr, \u0026MyLoadCompleteCallback);\n}\n```\n\n\n-----------------------------------------------------------------------\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdsherbert%2Funreal-engine-async-load-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdsherbert%2Funreal-engine-async-load-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdsherbert%2Funreal-engine-async-load-tool/lists"}