EllanJiang/GameFramework · error · GameFrameworkException
Resource helper is invalid.
Error message
Resource helper is invalid.
What it means
AssetObject.Create validates that the resourceHelper argument is non-null. The helper is needed later for releasing/unloading the asset, so an AssetObject cannot be constructed without one. Fail-fast guard inside the resource loader.
Solutions
- Set the resource helper before loading: m_ResourceManager.SetResourceHelper(new DefaultResourceHelper()) or via ResourceComponent's inspector.
- Check argument order at the AssetObject.Create call site to ensure the helper isn't shifted/null.
- Initialize ResourceManager fully (helper, paths, pools) before any asset load.
Example fix
// before m_ResourceManager.InitResources(); // helper never set // after m_ResourceManager.SetResourceHelper(new DefaultResourceHelper()); m_ResourceManager.InitResources();
Defensive patterns
Strategy: validation
Validate before calling
if (resourceComponent.ResourceHelper == null) resourceComponent.ResourceHelper = new DefaultResourceHelper();
Type guard
bool HelperReady => m_ResourceManager.m_ResourceHelper != null;
Prevention
- Assign the resource helper in Awake/inspector before any loads.
- Centralize ResourceManager initialization in one method.
- Check argument order when calling AssetObject.Create directly.
When it happens
Trigger: Calling AssetObject.Create with resourceHelper == null, typically when wiring a custom resource helper or when the ResourceManager was initialized without setting m_ResourceHelper.
Common situations: Forgot to assign the resource helper (e.g. in ResourceComponent Start or ResourceManager initialize) before loading assets; a refactor renamed/reordered arguments so null landed in the helper slot.
Related errors
- Dependency assets is invalid.
- Resource is invalid.
- Resource loader 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/3a2aa84e95f18a66.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/Resource/ResourceManager.ResourceLoader.AssetObject.cs:59
return base.CustomCanReleaseFlag && targetReferenceCount <= 0;
}
}
public static AssetObject Create(string name, object target, List<object> dependencyAssets, object resource, IResourceHelper resourceHelper, ResourceLoader resourceLoader)
{
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))View on GitHub (pinned to d0c010b051)