Static fields in changed code are lost upon reload
Epicguru opened this issue · 1 comments
I am not sure whether this is expected behaviour or not, but I could not find any reference in the documentation to static fields not being supported.
I am trying to reload a static class that has a static Material
field that is assigned on startup via reflection.
The static class content looks like this:
private static Material material;
public static void DrawReticleCircle(in ReticleDrawArgs args)
{
var position = args.WorldPosition;
// ...
Graphics.DrawMesh(mesh, trs, material, 0);
}
static void OnScriptHotReloadNoInstance()
{
Debug.Log($"Post-reload, asset is {material} (null={material==null})");
}
After changing the contents of DrawReticleCircle, the script is reloaded but the value of material
is lost.
The debug log reads: Post-reload, asset is (null=True)
I would expect for the value to be copied over, or for the new code to reference the field in the old assembly (if this is possible?).
Is this a known limitation or a bug? If it is a limitation, I think it is worth pointing out in the documentation.
Thanks.
Hi - yes it'll be a limitation. When reload happens your new code is technically in class/new assembly with changed name.
Static values are not reinitialized.
I'll leave this one open as it's possible to reinitialize those on reload