{"record":{"id":"561920823ce0d005","repo":"EllanJiang/GameFramework","slug":"entity-group-helper-is-invalid","errorCode":null,"errorMessage":"Entity group helper is invalid.","messagePattern":"Entity group helper is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Entity/EntityManager.EntityGroup.cs","lineNumber":45,"sourceCode":"            /// 初始化实体组的新实例。\n            /// </summary>\n            /// <param name=\"name\">实体组名称。</param>\n            /// <param name=\"instanceAutoReleaseInterval\">实体实例对象池自动释放可释放对象的间隔秒数。</param>\n            /// <param name=\"instanceCapacity\">实体实例对象池容量。</param>\n            /// <param name=\"instanceExpireTime\">实体实例对象池对象过期秒数。</param>\n            /// <param name=\"instancePriority\">实体实例对象池的优先级。</param>\n            /// <param name=\"entityGroupHelper\">实体组辅助器。</param>\n            /// <param name=\"objectPoolManager\">对象池管理器。</param>\n            public EntityGroup(string name, float instanceAutoReleaseInterval, int instanceCapacity, float instanceExpireTime, int instancePriority, IEntityGroupHelper entityGroupHelper, IObjectPoolManager objectPoolManager)\n            {\n                if (string.IsNullOrEmpty(name))\n                {\n                    throw new GameFrameworkException(\"Entity group name is invalid.\");\n                }\n\n                if (entityGroupHelper == null)\n                {\n                    throw new GameFrameworkException(\"Entity group helper is invalid.\");\n                }\n\n                m_Name = name;\n                m_EntityGroupHelper = entityGroupHelper;\n                m_InstancePool = objectPoolManager.CreateSingleSpawnObjectPool<EntityInstanceObject>(Utility.Text.Format(\"Entity Instance Pool ({0})\", name), instanceCapacity, instanceExpireTime, instancePriority);\n                m_InstancePool.AutoReleaseInterval = instanceAutoReleaseInterval;\n                m_Entities = new GameFrameworkLinkedList<IEntity>();\n                m_CachedNode = null;\n            }\n\n            /// <summary>\n            /// 获取实体组名称。\n            /// </summary>\n            public string Name\n            {\n                get\n                {\n                    return m_Name;","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Entity/EntityManager.EntityGroup.cs#L27-L63","documentation":"The EntityGroup constructor throws this when the IEntityGroupHelper argument is null. The helper is required to create/hide entity instance objects, so the group cannot function without it. Thrown right after the name check in the constructor, reached via EntityManager.AddEntityGroup.","triggerScenarios":"Calling AddEntityGroup passing null for the entityGroupHelper argument, or passing a field/property that was never assigned (e.g. not wired in the Unity inspector).","commonSituations":"Forgetting to add an EntityGroupHelper component to the GameObject and passing it; constructing the group in pure code and forgetting `new EntityGroupHelper()`; a DI/reference that resolves to null at runtime.","solutions":["Pass a non-null IEntityGroupHelper implementation (e.g. a component deriving EntityGroupHelper) to AddEntityGroup","In Unity, assign the helper in the inspector or create one with AddComponent before adding the group","Guard the call: if (helper == null) throw/log before calling AddEntityGroup"],"exampleFix":"// before\nentityGroupHelper = null;\nentityManager.AddEntityGroup(\"Player\", 0, 16, 60, 0, entityGroupHelper, objectPoolManager);\n// after\nvar helper = entityGroupHelper != null ? entityGroupHelper : gameObject.AddComponent<EntityGroupHelper>();\nentityManager.AddEntityGroup(\"Player\", 0, 16, 60, 0, helper, objectPoolManager);","handlingStrategy":"validation","validationCode":"if (entityGroupHelper == null) throw new ArgumentNullException(nameof(entityGroupHelper), \"An IEntityGroupHelper implementation is required\");","typeGuard":"static bool HasValidHelper(IEntityGroupHelper helper) => helper != null;","tryCatchPattern":"try { entityManager.AddEntityGroup(name, 0, 16, 60, 0, helper, poolManager); } catch (GameFrameworkException ex) when (ex.Message == \"Entity group helper is invalid.\") { Log.Error(\"EntityGroupHelper was null when adding group '{0}'\", name); }","preventionTips":["In Unity, obtain the helper via GetComponent/AddComponent rather than nullable fields","Never pass 'as SomeHelper' results directly without a null check","Wire helpers in one initialization method so missing references surface immediately"],"tags":["entity","null-argument","constructor"],"backgroundTag":"null-argument","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}