react-unity-webgl: Unity 2021.2 build throws error when removing the canvas before invoking Quit on the Unity Instance

Please avoid duplicates

Language and Compiler

Other TypeScript compiler

What environment are you using?

Local Development Server

When does your problem occur?

When the Unity Component unmounts

What does your problem relate to?

The problem seems Unity related

React-Unity-WebGL Version

latest

React Version

latest

Unity Version

2021.2

What happened?

Problem occurs within and outside of this module. An error is thrown when the canvas element is removed before invoking the Quit method on the Unity Instance.

TypeError: null is not an object (evaluating 'target.onwheel')
_emscripten_set_wheel_callback_on_thread@http://127.0.0.1:8080/Build/unity.framework.js

Reproducible test case

  • Create a Unity WebGL build
  • Add a button to the index.html which removed the Canvas element and than Quit’s Unity
  • Run the application on a web server and click the button
  • See error

Would you be interested in contributing a fix?

  • yes, I would like to contribute a fix

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 2
  • Comments: 23 (5 by maintainers)

Commits related to this issue

Most upvoted comments

It’s a double problem…

  1. Unity messed up their quit with respect to the DOM
  2. React-router removed all their “history” stuff.

assuming you have a unityContext var and a state var “isLoaded”… the following is a fix.

import { UNSAFE_NavigationContext as NavigationContext } from 'react-router-dom';
// in your component
const { navigator } = useContext( NavigationContext );

    useEffect(() => {
       const unblock = navigator.block( async ( tx ) => {
            if(isLoaded) {
                await unityContext.quitUnityInstance()
                await setIsLoaded(false)
                tx.retry()
            } else {
                unblock()
                tx.retry()
            }
        } );
        return unblock;
    }, [navigator,isLoaded])

There is a suggested workaround in the Unity forums. Haven’t tried yet but it is worth checking out.

https://forum.unity.com/threads/ionic-webgl-out-of-memory-on-quit.1244074/#post-8224548

hey @jeffreylanters looks like the Unity ticket is Closed.

@SashaVigneron1 I’m wrestling with this as well. I can explicitly call unityContext.quitUnityInstance() with a button on my page but when trying to handle the browser navigation I’m not able to work around it. .