EllanJiang/GameFramework · error · GameFrameworkException
Resource loader is invalid.
Error message
Resource loader is invalid.
What it means
AssetObject.Create validates that the resourceLoader argument is non-null, since the created AssetObject needs the loader for reference counting and release/shutdown logic. This is the last null-argument guard before the object is acquired from the ReferencePool.
Solutions
- Only create AssetObjects through ResourceLoader.LoadAsset so the loader is always supplied.
- If calling Create directly, pass the live ResourceLoader instance (e.g. m_ResourceManager.m_ResourceLoader).
- Ensure the loader field is initialized before any load call (order Awake/Start correctly).
Example fix
// before AssetObject.Create(name, target, deps, resource, helper, null); // after AssetObject.Create(name, target, deps, resource, helper, m_ResourceLoader);
Defensive patterns
Strategy: validation
Validate before calling
if (loader == null) throw new InvalidOperationException("ResourceLoader must be initialized before creating AssetObjects."); Type guard
bool LoaderReady => m_ResourceLoader != null;
Prevention
- Create assets only through ResourceLoader.LoadAsset.
- Ensure the loader field is assigned before dependent components run.
- Avoid constructing AssetObject manually in tests without a loader stub.
When it happens
Trigger: Calling AssetObject.Create with resourceLoader == null, e.g. from custom code outside the normal ResourceLoader.LoadAsset flow, or passing an uninitialized loader field.
Common situations: Testing/standalone scripts constructing AssetObject directly without a loader; loader field assigned in Awake but Create called in constructor before assignment; wrong argument order in a custom overload.
Related errors
- Dependency assets is invalid.
- Resource is invalid.
- Resource helper is invalid.
- Resource name is invalid.
- Resource extension is invalid.
AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15).
Data as JSON: /api/errors/5b5b8f7ebf968d99.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/Resource/ResourceManager.ResourceLoader.AssetObject.cs:64
{
if (dependencyAssets == null)
{
throw new GameFrameworkException("Dependency assets is invalid.");
}
if (resource == null)
{
throw new GameFrameworkException("Resource is invalid.");
}
if (resourceHelper == null)
{
throw new GameFrameworkException("Resource helper is invalid.");
}
if (resourceLoader == null)
{
throw new GameFrameworkException("Resource loader is invalid.");
}
AssetObject assetObject = ReferencePool.Acquire<AssetObject>();
assetObject.Initialize(name, target);
assetObject.m_DependencyAssets.AddRange(dependencyAssets);
assetObject.m_Resource = resource;
assetObject.m_ResourceHelper = resourceHelper;
assetObject.m_ResourceLoader = resourceLoader;
foreach (object dependencyAsset in dependencyAssets)
{
int referenceCount = 0;
if (resourceLoader.m_AssetDependencyCount.TryGetValue(dependencyAsset, out referenceCount))
{
resourceLoader.m_AssetDependencyCount[dependencyAsset] = referenceCount + 1;
}
else
{View on GitHub (pinned to d0c010b051)