Unity-Technologies/UnityCsReference · error · ArgumentException

index must be between 0 and {emissiveTexturePropertiesCount

Error message

index must be between 0 and {emissiveTexturePropertiesCount - 1}, but was {index}

What it means

Thrown by BakeInput.GetEmissiveTextureProperties when the uint index is >= emissiveTexturePropertiesCount. Emissive TextureProperties are a separate collection from emissive TextureData (emissiveTextureCount), so the two counts can differ and must not be used interchangeably.

Source

Thrown at Editor/Mono/GI/LightBaker.bindings.cs:624

        extern TextureData Internal_GetEmissiveTextureData(uint index);
        extern void Internal_SetEmissiveTextureData(uint index, TextureData textureData);
        public TextureData GetEmissiveTextureData(uint index)
        {
            if (index >= emissiveTextureCount)
                throw new ArgumentException($"index must be between 0 and {emissiveTextureCount - 1}, but was {index}");
            return Internal_GetEmissiveTextureData(index);
        }
        public void SetEmissiveTextureData(uint index, TextureData textureData)
        {
            if (index >= emissiveTextureCount)
                throw new ArgumentException($"index must be between 0 and {emissiveTextureCount - 1}, but was {index}");
            Internal_SetEmissiveTextureData(index, textureData);
        }
        extern TextureProperties Internal_GetEmissiveTextureProperties(uint index);
        public TextureProperties GetEmissiveTextureProperties(uint index)
        {
            if (index >= emissiveTexturePropertiesCount)
                throw new ArgumentException($"index must be between 0 and {emissiveTexturePropertiesCount - 1}, but was {index}");
            return Internal_GetEmissiveTextureProperties(index);
        }
        extern void Internal_SetEmissiveTextureProperties(uint index, TextureProperties textureProperties);
        public void SetEmissiveTextureProperties(uint index, TextureProperties textureProperties)
        {
            if (index >= emissiveTexturePropertiesCount)
                throw new ArgumentException($"index must be between 0 and {emissiveTexturePropertiesCount - 1}, but was {index}");
            Internal_SetEmissiveTextureProperties(index, textureProperties);
        }

        extern TextureData Internal_GetTransmissiveTextureData(uint index);
        extern void Internal_SetTransmissiveTextureData(uint index, TextureData textureData);
        public TextureData GetTransmissiveTextureData(uint index)
        {
            if (index >= transmissiveTextureCount)
                throw new ArgumentException($"index must be between 0 and {transmissiveTextureCount - 1}, but was {index}");
            return Internal_GetTransmissiveTextureData(index);
        }

View on GitHub (pinned to 225b0fbdb5)

Solutions

  1. Bound iteration by emissiveTexturePropertiesCount.
  2. Confirm InputExtraction populated emissive properties before reading them.
  3. Guard: if (index < bakeInput.emissiveTexturePropertiesCount) { ... }

Example fix

// before
for (uint i = 0; i < bakeInput.emissiveTextureCount; i++)
    p.Add(bakeInput.GetEmissiveTextureProperties(i));
// after
for (uint i = 0; i < bakeInput.emissiveTexturePropertiesCount; i++)
    p.Add(bakeInput.GetEmissiveTextureProperties(i));
Defensive patterns

Strategy: validation

Validate before calling

if (index < bakeInput.emissiveTexturePropertiesCount)
{
    var p = bakeInput.GetEmissiveTextureProperties(index);
}

Prevention

When it happens

Trigger: Reading emissive properties in a loop bounded by emissiveTextureCount or another channel's count; reading properties that InputExtraction never populated.

Common situations: Readback assuming data and properties are 1:1 per channel; scenes where emissive data exists but properties extraction was skipped.

Related errors


AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13). Data as JSON: /api/errors/23ce4edf834ccc4a. Report an issue: GitHub.