EllanJiang/GameFramework · error · GameFrameworkException

Can not load binary ' ' which is not ready.

Error message

Can not load binary '{0}' which is not ready.

What it means

The binary asset name exists in the resource index, but its ResourceInfo.Ready is false — the resource has not been downloaded/copied to a usable local location yet. LoadBinary only serves resources that are fully available; when no LoadBinaryFailureCallback is supplied it throws.

Solutions

  1. Wait for resource update completion (subscribe to ResourceComponent's update events / wait until UpdateResources finishes) before calling LoadBinary.
  2. Check HasAsset/asset readiness before loading, and schedule the load after the resource becomes Ready.
  3. Verify the resource update did not fail (check update error events) and retry the update if it did.
  4. Provide a LoadBinaryFailureCallback so NotReady failures are reported gracefully instead of throwing.

Example fix

// before
m_ResourceComponent.LoadBinary(binaryName, callbacks, userData); // called before hot-update finishes
// after
m_ResourceComponent.ResourceUpdateAllComplete += () => m_ResourceComponent.LoadBinary(binaryName, callbacks, userData);
Defensive patterns

Strategy: retry

Validate before calling

// only load once resource update has finished
if (!m_ResourceComponent.IsResourceAllReady)
{
    pendingLoads.Enqueue(binaryName); // replay after ResourceUpdateAllComplete
    return;
}
m_ResourceComponent.LoadBinary(binaryName, callbacks, userData);

Type guard

bool IsReadyToLoad(ResourceComponent rc) => rc != null && rc.IsResourceAllReady;

Try / catch

try { m_ResourceComponent.LoadBinary(binaryName, callbacks, userData); }
catch (GameFrameworkException ex) when (ex.Message.Contains("which is not ready"))
{ RetryAfterUpdateComplete(binaryName); }

Prevention

When it happens

Trigger: Calling LoadBinary while the resource is still being downloaded in an updatable resource mode (single/multi variant update in progress), or before CheckVersion/UpdateResource completes; also when update failed silently and Ready never became true.

Common situations: Hot-update flow where game logic loads a binary before the ResourceComponent reports all resources updated; weak network leaving the resource in NotReady; user skipping update and directly requesting a remote binary.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15). Data as JSON: /api/errors/a7710210269dd47b. Report an issue: GitHub.

Appendix: source

Thrown at GameFramework/Resource/ResourceManager.ResourceLoader.cs:587

                    if (loadBinaryCallbacks.LoadBinaryFailureCallback != null)
                    {
                        loadBinaryCallbacks.LoadBinaryFailureCallback(binaryAssetName, LoadResourceStatus.NotExist, errorMessage, userData);
                        return;
                    }

                    throw new GameFrameworkException(errorMessage);
                }

                if (!resourceInfo.Ready)
                {
                    string errorMessage = Utility.Text.Format("Can not load binary '{0}' which is not ready.", binaryAssetName);
                    if (loadBinaryCallbacks.LoadBinaryFailureCallback != null)
                    {
                        loadBinaryCallbacks.LoadBinaryFailureCallback(binaryAssetName, LoadResourceStatus.NotReady, errorMessage, userData);
                        return;
                    }

                    throw new GameFrameworkException(errorMessage);
                }

                if (!resourceInfo.IsLoadFromBinary)
                {
                    string errorMessage = Utility.Text.Format("Can not load binary '{0}' which is not a binary asset.", binaryAssetName);
                    if (loadBinaryCallbacks.LoadBinaryFailureCallback != null)
                    {
                        loadBinaryCallbacks.LoadBinaryFailureCallback(binaryAssetName, LoadResourceStatus.TypeError, errorMessage, userData);
                        return;
                    }

                    throw new GameFrameworkException(errorMessage);
                }

                if (resourceInfo.UseFileSystem)
                {
                    loadBinaryCallbacks.LoadBinarySuccessCallback(binaryAssetName, LoadBinaryFromFileSystem(binaryAssetName), 0f, userData);
                }

View on GitHub (pinned to d0c010b051)