From 211576e0f897b304d89e99f475717de35d36835f Mon Sep 17 00:00:00 2001 From: Sinai Date: Fri, 28 May 2021 18:22:44 +1000 Subject: [PATCH] Fallback to LateUpdate if OnPostRender listener failed --- src/Core/ExplorerBehaviour.cs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Core/ExplorerBehaviour.cs b/src/Core/ExplorerBehaviour.cs index 31e260a..dc81a1c 100644 --- a/src/Core/ExplorerBehaviour.cs +++ b/src/Core/ExplorerBehaviour.cs @@ -32,16 +32,32 @@ namespace UnityExplorer public ExplorerBehaviour(IntPtr ptr) : base(ptr) { } #endif + private static bool onPostRenderFailed; + internal void Awake() { + try + { #if CPP - Camera.onPostRender = Camera.onPostRender == null - ? new Action(OnPostRender) - : Il2CppSystem.Delegate.Combine(Camera.onPostRender, (Camera.CameraCallback)new Action(OnPostRender)).Cast(); + Camera.onPostRender = Camera.onPostRender == null + ? new Action(OnPostRender) + : Il2CppSystem.Delegate.Combine(Camera.onPostRender, + (Camera.CameraCallback)new Action(OnPostRender)).Cast(); + if (Camera.onPostRender == null || Camera.onPostRender.delegates == null) + { + ExplorerCore.LogWarning("Failed to add Camera.onPostRender listener, falling back to LateUpdate instead!"); + onPostRenderFailed = true; + } #else - Camera.onPostRender += OnPostRender; + Camera.onPostRender += OnPostRender; #endif + } + catch (Exception ex) + { + ExplorerCore.LogWarning($"Exception adding onPostRender listener: {ex.ReflectionExToString()}\r\nFalling back to LateUpdate!"); + onPostRenderFailed = true; + } } internal void Update() @@ -54,7 +70,13 @@ namespace UnityExplorer ExplorerCore.FixedUpdate(); } - internal static void OnPostRender(Camera camera) + internal void LateUpdate() + { + if (onPostRenderFailed) + OnPostRender(null); + } + + internal static void OnPostRender(Camera _) { ExplorerCore.OnPostRender(); }