public IEnumerator GoldPlayerInitializeGeneratesGarbage()
        {
            GoldPlayerController player = SetupPlayer();

            player.InitOnStart = false;
            Assert.That(() =>
            {
                player.Initialize();
            }, Is.Not.AllocatingGCMemory());
            yield return(null);
        }
        protected virtual GoldPlayerController SetupPlayer()
        {
            GameObject playerGO = new GameObject("[TEST] Test Player", typeof(CharacterController));

            playerGO.transform.position = new Vector3(0, 0.08f, 0);
            playerGO.layer = 31;

            GameObject bobTarget = new GameObject("[TEST] Test Player Bob Target");

            bobTarget.transform.SetParent(playerGO.transform);
            bobTarget.transform.localPosition = new Vector3(0, 1.6f, 0);

            GameObject playerCameraHead = new GameObject("[TEST] Test Player Camera Head");

            playerCameraHead.transform.SetParent(bobTarget.transform);
            playerCameraHead.transform.localPosition = new Vector3(0, 0, 0);
            Camera camera = playerCameraHead.AddComponent <Camera>();

            input = playerGO.AddComponent <GoldPlayerTestInput>();

            GoldPlayerController playerController = playerGO.AddComponent <GoldPlayerController>();

            playerController.GetComponent <CharacterController>().center = new Vector3(0, 1, 0);

            playerController.Camera.CameraHead   = playerCameraHead.transform;
            playerController.Camera.TargetCamera = camera;
            playerController.Camera.FieldOfViewKick.EnableFOVKick = true;

            playerController.HeadBob.BobTarget = bobTarget.transform;

            playerController.Movement.GroundLayer = 1;

            playerController.Movement.MoveInput   = GoldPlayerTestInput.MOVE;
            playerController.Movement.JumpInput   = GoldPlayerTestInput.JUMP;
            playerController.Movement.RunInput    = GoldPlayerTestInput.RUN;
            playerController.Movement.CrouchInput = GoldPlayerTestInput.CROUCH;

            playerController.Camera.LookInput = GoldPlayerTestInput.LOOK;

            playerController.InitOnStart = false;
            playerController.GetReferences();
            playerController.Initialize();

            return(playerController);
        }