@@ -32,6 +32,7 @@ public class ReturnToMenuOverlay : MonoBehaviour
3232 bool m_PanelVisible ;
3333 float m_LastToggleTime ;
3434
35+ Camera m_HelperCamera ;
3536 EventSystem m_OwnEventSystem ;
3637 readonly List < GameObject > m_SuspendedRoots = new List < GameObject > ( ) ;
3738
@@ -179,12 +180,20 @@ void SuspendActiveScene()
179180 m_SuspendedRoots . Add ( root ) ;
180181 }
181182 }
183+
184+ if ( m_HelperCamera != null )
185+ m_HelperCamera . enabled = true ;
186+
182187 ActivateOwnEventSystem ( ) ;
183188 }
184189
185190 void ResumeActiveScene ( )
186191 {
187192 DeactivateOwnEventSystem ( ) ;
193+
194+ if ( m_HelperCamera != null )
195+ m_HelperCamera . enabled = false ;
196+
188197 foreach ( var root in m_SuspendedRoots )
189198 {
190199 if ( root != null )
@@ -221,6 +230,17 @@ void DeactivateOwnEventSystem()
221230
222231 void BuildUI ( )
223232 {
233+ // Helper camera activates while the scene is suspended so Unity doesn't
234+ // show the "No cameras rendering" editor overlay behind the dialog.
235+ var camGo = new GameObject ( "OverlayCamera" ) ;
236+ camGo . transform . SetParent ( transform , false ) ;
237+ m_HelperCamera = camGo . AddComponent < Camera > ( ) ;
238+ m_HelperCamera . clearFlags = CameraClearFlags . SolidColor ;
239+ m_HelperCamera . backgroundColor = new Color32 ( 18 , 18 , 24 , 255 ) ;
240+ m_HelperCamera . cullingMask = 0 ;
241+ m_HelperCamera . depth = - 100 ;
242+ m_HelperCamera . enabled = false ;
243+
224244 var canvas = gameObject . AddComponent < Canvas > ( ) ;
225245 canvas . renderMode = RenderMode . ScreenSpaceOverlay ;
226246 canvas . sortingOrder = 999 ;
@@ -250,9 +270,11 @@ void BuildMenuButton()
250270 m_MenuButtonRect . anchoredPosition = new Vector2 ( 16 , - 16 ) ;
251271 m_MenuButtonRect . sizeDelta = new Vector2 ( 120 , 44 ) ;
252272
253- // Button component provides visual hover/press feedback. onClick is a
254- // secondary path for scenes where the EventSystem routes normally; the
255- // primary click path is the raw polling in Update().
273+ // Button component provides visual hover/press feedback only. No onClick
274+ // listener — the actual click is detected by raw polling in Update() which
275+ // fires on press. Adding onClick would cause a double-toggle (open on
276+ // press via Update, close on release via onClick) if the hold exceeds the
277+ // cooldown window.
256278 var btn = go . AddComponent < Button > ( ) ;
257279 btn . targetGraphic = img ;
258280 var c = btn . colors ;
@@ -262,7 +284,6 @@ void BuildMenuButton()
262284 c . fadeDuration = 0.08f ;
263285 btn . colors = c ;
264286 btn . navigation = new Navigation { mode = Navigation . Mode . None } ;
265- btn . onClick . AddListener ( TogglePanel ) ;
266287
267288 var txt = new GameObject ( "Text" , typeof ( RectTransform ) ) ;
268289 txt . transform . SetParent ( go . transform , false ) ;
0 commit comments