Honestly, I'm still fairly fuzzy on how this field works. Here's the best of my knowledge.
LightmapSettings.lightProbesstores the light probes all scenes currently loaded. It is a single merged array of lightProbes, which is updated whenever a scene is additively loaded or removed.
LightingData.assetare baked into the scene during standalone build.
LightmapSettings.lightProbeslives within the active scene's
LightmapSettings.lightProbesreference to the active scene's lighting data. If the active scene does not have valid lighting data, the old light probes are left in the lighting cache.
There is no way to manually specify light probes, as far as I'm aware. The only mutable field on
LightmapSettings.lightProbes are the spherical harmonic values (
LightmapSettings.lightProbes.bakedProbes). You can blend and modify the lighting values of the probes, but there is no way to fully create new probes at runtime, even if you have the positions and values. Probes cannot be moved at runtime, because the positions array has no setter.
LightmapSettings.lightProbes will be null if there is no valid lighting data in the active scene.
LightmapSettings.lightProbes is just another Unity Object. You can clone it with
Instantiate(LightmapSettings.lightProbes) and then write it to the assets folder. The type even has a special icon! 1)
Sometimes when messing with light probe values, at least in the editor, this can result in an error “pred(*previous, *i)”. The error will occur whenever a scene is loaded additively. An assertion fails while Unity is applying the lighting data for that scene.
You can avoid this error by saving your scenes without a LightingData.asset2). However, this is only helpful if you are already applying lightmapping and lightprobes yourself at runtime. (This saves the scene without *any* lighting data).