Fix updating UICanvas when using World/Camera Space

#361
This commit is contained in:
Wojtek Figat
2021-03-18 15:59:01 +01:00
parent abe635ad9b
commit 7a12a6c280

View File

@@ -81,7 +81,7 @@ namespace FlaxEngine
private CanvasRenderMode _renderMode;
private readonly CanvasRootControl _guiRoot;
private CanvasRenderer _renderer;
private bool _isLoading;
private bool _isLoading, _isRegisteredForTick;
/// <summary>
/// Gets or sets the canvas rendering mode.
@@ -237,6 +237,18 @@ namespace FlaxEngine
};
}
/// <summary>
/// Finalizes an instance of the <see cref="UICanvas"/> class.
/// </summary>
~UICanvas()
{
if (_isRegisteredForTick)
{
_isRegisteredForTick = false;
Scripting.Update -= OnUpdate;
}
}
/// <summary>
/// Gets the world-space oriented bounding box that contains a 3D canvas.
/// </summary>
@@ -371,6 +383,11 @@ namespace FlaxEngine
if (_editorRoot != null && IsActiveInHierarchy)
_guiRoot.Parent = _editorRoot;
#endif
if (_isRegisteredForTick)
{
_isRegisteredForTick = false;
Scripting.Update -= OnUpdate;
}
break;
}
case CanvasRenderMode.CameraSpace:
@@ -404,11 +421,32 @@ namespace FlaxEngine
}
#endif
}
if (!_isRegisteredForTick)
{
_isRegisteredForTick = true;
Scripting.Update += OnUpdate;
}
break;
}
}
}
private void OnUpdate()
{
if (this && IsActiveInHierarchy && _renderMode != CanvasRenderMode.ScreenSpace)
{
try
{
Profiler.BeginEvent(Name);
_guiRoot.Update(Time.UnscaledDeltaTime);
}
finally
{
Profiler.EndEvent();
}
}
}
internal string Serialize()
{
StringBuilder sb = new StringBuilder(256);
@@ -585,6 +623,12 @@ namespace FlaxEngine
internal void EndPlay()
{
if (_isRegisteredForTick)
{
_isRegisteredForTick = false;
Scripting.Update -= OnUpdate;
}
if (_renderer)
{
SceneRenderTask.GlobalCustomPostFx.Remove(_renderer);