protected override void Awake()
    {
        base.Awake();
        _mainCamera = Camera.main;

        _offsetOnPullToCamera = GalaxyExplorerManager.ForcePullToCamFixedDistance;

        _manipulationHandler = ManipulationHandler ? ManipulationHandler : GetComponentInChildren <ManipulationHandler>();
        Debug.Assert(_manipulationHandler != null, "Force Solver failed to find a manipulation handler");
        _attractionCollider = AttractionCollider ? AttractionCollider : GetComponentInChildren <Collider>();
        Debug.Assert(_attractionCollider != null, "Force Solver failed to find a attraction collider");

        _manipulationHandler.OnManipulationEnded.AddListener(OnManipulationEnd);

        if (ControllerTracker == null)
        {
            Debug.LogWarning(gameObject.name + " ForceSolver no controller tracker transform supplied will instantiate locally");
            var controllerTrackerObject = new GameObject(gameObject.name + " ForceSolver autogenerated controller tracker");
            ControllerTracker = controllerTrackerObject.AddComponent <ControllerTransformTracker>();
        }

        ControllerTracker.AllTrackingLost += OnControllersLost;
    }
    protected override void Awake()
    {
        base.Awake();
        _handler = GetComponent <SolverHandler>();
        Debug.Assert(_handler != null);
        if (_controllerTracker == null)
        {
            Debug.LogWarning("AttachToControllerSolver missing controller tracker, will create own instance");
            _controllerTracker = gameObject.AddComponent <ControllerTransformTracker>();
        }

        switch (_handedness)
        {
        case Handedness.None:
        case Handedness.Other:
            break;

        case Handedness.Left:
            _controllerTracker.LeftTrackingUpdated += UpdateTrackedTransform;
            _controllerTracker.LeftTrackingLost    += LostTracking;
            break;

        case Handedness.Right:
            _controllerTracker.RightTrackingUpdated += UpdateTrackedTransform;
            _controllerTracker.RightTrackingLost    += LostTracking;
            break;

        case Handedness.Both:
        case Handedness.Any:
            _controllerTracker.TrackingUpdated += UpdateTrackedTransform;
            _controllerTracker.AllTrackingLost += LostTracking;
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }