@@ -163,7 +163,44 @@ public int WebViewHeight
163163 private GameObject bridgeWebViewGameObject ;
164164
165165 // Input management
166- private Coroutine inputActivationCoroutine ;
166+ // Note: Input coroutine removed - games should manage cursor state themselves
167+
168+ /// <summary>
169+ /// Auto-initialize PassportUI when the component starts if clientId is configured.
170+ /// This enables "drag and drop" functionality - just configure the Inspector fields and it works.
171+ /// </summary>
172+ private async void Start ( )
173+ {
174+ if ( ! isInitialized && ! string . IsNullOrEmpty ( clientId ) )
175+ {
176+ try
177+ {
178+ PassportLogger . Info ( $ "{ TAG } Auto-initializing PassportUI from Start()...") ;
179+ if ( Passport . Instance != null )
180+ {
181+ PassportLogger . Info ( $ "{ TAG } Auto-initialization: Passport already exists, setting up UI only") ;
182+ await InitializeWithPassport ( Passport . Instance ) ;
183+ }
184+ else
185+ {
186+ PassportLogger . Info ( $ "{ TAG } Auto-initialization: Creating new Passport instance") ;
187+ await InitializeWithPassport ( ) ;
188+ }
189+ }
190+ catch ( Exception ex )
191+ {
192+ PassportLogger . Error ( $ "{ TAG } Auto-initialization failed: { ex . Message } ") ;
193+ }
194+ }
195+ else if ( string . IsNullOrEmpty ( clientId ) )
196+ {
197+ PassportLogger . Warn ( $ "{ TAG } Auto-initialization skipped - Client ID not configured in Inspector") ;
198+ }
199+ else if ( isInitialized )
200+ {
201+ PassportLogger . Info ( $ "{ TAG } Auto-initialization skipped - Already initialized") ;
202+ }
203+ }
167204
168205 /// <summary>
169206 /// Initialize Passport and PassportUI in one call using the configured settings.
@@ -173,6 +210,12 @@ public int WebViewHeight
173210 /// <returns>UniTask that completes when initialization is finished</returns>
174211 public async UniTask InitializeWithPassport ( )
175212 {
213+ if ( isInitialized )
214+ {
215+ PassportLogger . Warn ( $ "{ TAG } PassportUI is already initialized, skipping InitializeWithPassport()") ;
216+ return ;
217+ }
218+
176219 // Validate configuration
177220 if ( string . IsNullOrEmpty ( clientId ) )
178221 {
@@ -208,6 +251,12 @@ public async UniTask InitializeWithPassport()
208251 /// <returns>UniTask that completes when UI initialization is finished</returns>
209252 public async UniTask InitializeWithPassport ( Passport passportInstance )
210253 {
254+ if ( isInitialized )
255+ {
256+ PassportLogger . Warn ( $ "{ TAG } PassportUI is already initialized, skipping InitializeWithPassport(passport)") ;
257+ return ;
258+ }
259+
211260 if ( passportInstance == null )
212261 {
213262 PassportLogger . Error ( $ "{ TAG } Passport instance cannot be null") ;
@@ -241,6 +290,12 @@ public async UniTask InitializeWithPassport(Passport passportInstance)
241290 /// <param name="passportInstance">The initialized Passport instance</param>
242291 public void Init ( Passport passportInstance )
243292 {
293+ if ( isInitialized )
294+ {
295+ PassportLogger . Warn ( $ "{ TAG } PassportUI is already initialized, skipping Init(passport)") ;
296+ return ;
297+ }
298+
244299 if ( passportInstance == null )
245300 {
246301 PassportLogger . Error ( $ "{ TAG } Passport instance cannot be null") ;
@@ -279,6 +334,7 @@ public void Init(Passport passportInstance)
279334 // Hide initially
280335 HideLoginUI ( logMessage : false ) ;
281336
337+ isInitialized = true ;
282338 PassportLogger . Info ( $ "{ TAG } PassportUI initialized successfully") ;
283339 }
284340
@@ -329,7 +385,6 @@ private void CreateWebView()
329385 webView . RegisterJavaScriptMethod ( "HandleLoginError" , HandleLoginError ) ;
330386 webView . RegisterJavaScriptMethod ( "HandleClose" , ( data ) => HideLoginUI ( ) ) ;
331387
332- isInitialized = true ;
333388 PassportLogger . Info ( $ "{ TAG } Cross-platform WebView created successfully") ;
334389 }
335390 catch ( Exception ex )
@@ -678,13 +733,7 @@ private void OnDestroy()
678733 PassportLogger . Info ( $ "{ TAG } WebView disposed on destroy") ;
679734 }
680735
681- // Stop any running coroutines
682- if ( inputActivationCoroutine != null )
683- {
684- StopCoroutine ( inputActivationCoroutine ) ;
685- inputActivationCoroutine = null ;
686- PassportLogger . Info ( $ "{ TAG } Stopped input activation coroutine during cleanup") ;
687- }
736+ // Note: Input coroutine handling removed - games should manage cursor state themselves
688737 }
689738 catch ( Exception ex )
690739 {
0 commit comments