protected virtual void OnDisable()
        {
            for (int i = _graspedBehaviours.Count; i-- != 0;)
            {
                ReleaseObject(_graspedBehaviours[i]);
            }

            _activityManager.UnregisterMisbehavingObjects();

            _idToInteractionHand.Clear();
            _graspedBehaviours.Clear();

            _activityManager.DeactivateAll();
            _activityManager.OnActivate   -= createInteractionShape;
            _activityManager.OnDeactivate -= destroyInteractionShape;

            Assert.AreEqual(_instanceHandleToBehaviour.Count, 0, "All instances should have been destroyed.");

            if (_shapeDescriptionPool != null)
            {
                _shapeDescriptionPool.RemoveAllShapes();
                _shapeDescriptionPool = null;
            }

            if (_hasSceneBeenCreated)
            {
                destroyScene();
            }
        }
        protected virtual void OnEnable()
        {
            if (_leapProvider == null)
            {
                enabled = false;
                Debug.LogError("Could not enable Interaction Manager because no Leap Provider was specified.");
                return;
            }

            Assert.IsFalse(_hasSceneBeenCreated, "Scene should not have been created yet");

            createScene();
            applyDebugSettings();

            _shapeDescriptionPool = new ShapeDescriptionPool(_scene);

            Assert.AreEqual(_instanceHandleToBehaviour.Count, 0, "There should not be any instances before the creation step.");

            _cachedSimulationScale = _leapProvider.transform.lossyScale.x;

            _activityManager.BrushLayer    = InteractionBrushLayer;
            _activityManager.OverlapRadius = _activationRadius * _cachedSimulationScale;
            _activityManager.MaxDepth      = _maxActivationDepth;
            _activityManager.OnActivate   += createInteractionShape;
            _activityManager.OnDeactivate += destroyInteractionShape;

            if (_handPool != null)
            {
                if (_contactEnabled)
                {
                    _handPool.EnableGroup(_brushGroupName);
                }
                else
                {
                    _handPool.DisableGroup(_brushGroupName);
                }
            }
        }
    protected virtual void OnDisable() {
      for (int i = _graspedBehaviours.Count; i-- != 0;) {
        ReleaseObject(_graspedBehaviours[i]);
      }

      _activityManager.UnregisterMisbehavingObjects();

      _idToInteractionHand.Clear();
      _graspedBehaviours.Clear();

      _activityManager.DeactivateAll();
      _activityManager.OnActivate -= createInteractionShape;
      _activityManager.OnDeactivate -= destroyInteractionShape;

      Assert.AreEqual(_instanceHandleToBehaviour.Count, 0, "All instances should have been destroyed.");

      if (_shapeDescriptionPool != null) {
        _shapeDescriptionPool.RemoveAllShapes();
        _shapeDescriptionPool = null;
      }

      if (_hasSceneBeenCreated) {
        destroyScene();
      }
    }
    protected virtual void OnEnable() {
      if (_leapProvider == null) {
        enabled = false;
        Debug.LogError("Could not enable Interaction Manager because no Leap Provider was specified.");
        return;
      }

      Assert.IsFalse(_hasSceneBeenCreated, "Scene should not have been created yet");

      createScene();
      applyDebugSettings();

      _shapeDescriptionPool = new ShapeDescriptionPool(_scene);

      Assert.AreEqual(_instanceHandleToBehaviour.Count, 0, "There should not be any instances before the creation step.");

      _cachedSimulationScale = _leapProvider.transform.lossyScale.x;

      _activityManager.BrushLayer = InteractionBrushLayer;
      _activityManager.OverlapRadius = _activationRadius * _cachedSimulationScale;
      _activityManager.MaxDepth = _maxActivationDepth;
      _activityManager.OnActivate += createInteractionShape;
      _activityManager.OnDeactivate += destroyInteractionShape;

      if (_handPool != null) {
        if (_contactEnabled) {
          _handPool.EnableGroup(_brushGroupName);
        } else {
          _handPool.DisableGroup(_brushGroupName);
        }
      }
    }