Создание и замена карт действий

Я выполнил финальное задание для нового курса ввода Unity от GameDevHQ. Этот курс помог нам при переходе от старой унаследованной системы к NIS. Я научился создавать карты действий, настраивать взаимодействия и многое другое. Важно отметить, что нет ничего плохого в том, чтобы быстро использовать старую унаследованную систему для создания прототипов. Цель этого последнего задания состояла в том, чтобы заменить все устаревшие системы ввода на новую систему ввода. Это движение игрока, управление дроном, вилочный погрузчик и взаимодействие с зонами. В качестве бонуса нам поручили реализовать управление геймпадом.

Это вторая часть моего последнего задания. Цель состоит в том, чтобы создать карты действий для дрона. Затем с помощью кнопки взаимодействия на проигрывателе переключайтесь между различными элементами управления картами действий.

Дрон

Первое, что я сделал, это создал карту действий для дрона. Я добавил три разных действия «Полет», «Выход» и «Поворот».

  • Полет: – это тип действия со значением с тремя векторными элементами управления и привязками клавиш "Вверх", "Вниз", "Влево", "Вправо", "Вперед" и "Назад".

  • Выход: – это тип действия кнопки, привязанный к клавише выхода. Это приведет к выходу из управления дроном.
  • Поворот: тип действия значения с аналоговым типом управления. Значение равно 1 или -1. Я привязал эти значения к стрелкам влево и вправо для вращения дрона.

C# скрипт дрона

Чтобы переключиться с карты действий игрока на карту действий дрона. Мне нужно отключить карту действий игрока через код и включить карту действий дрона. Это можно делать всякий раз, когда игрок входит в зону для взаимодействия с дроном.

В этом случае, когда вы находитесь рядом с дроном, нажмите «E» и инициируйте взаимодействие. Мы запускаем метод EnterFlightMode.

  private void OnEnable()
        { 
            InteractableZone.onZoneInteractionComplete += EnterFlightMode;
            _input.Drone.Exit.performed += Exit_performed;
        }

Этот метод отключает карту действий игрока и включает карту действий дрона.

  private void EnterFlightMode(InteractableZone zone)
        {
            if (_inFlightMode != true && zone.GetZoneID() == 4) // drone Scene
            {
                _input.Player.Disable();
                _input.Drone.Enable();
                _propAnim.SetTrigger("StartProps");
                _droneCam.Priority = 11;
                _inFlightMode = true;
                OnEnterFlightMode?.Invoke();
                UIManager.Instance.DroneView(true);
                _interactableZone.CompleteTask(4);
            }
        }

Как только карты действий включены, пользователь может использовать назначенные клавиши для перемещения дрона. Есть два метода расчета вращения и управления полетом. Оба они используют метод .readvalue‹T›() из NIS и помогают рассчитать движение дрона.

        private void CalculateMovementUpdate()
        {
           var rotate = _input.Drone.Rotate.ReadValue<float>();
            if (rotate == -1)
            {
                var tempRot = transform.localRotation.eulerAngles;
                tempRot.y -= _speed / 3;
                transform.localRotation = Quaternion.Euler(tempRot);
            }
            else if (rotate == 1)
            {
                var tempRot = transform.localRotation.eulerAngles;
                tempRot.y += _speed / 3;
                transform.localRotation = Quaternion.Euler(tempRot);
            }
        }

Теперь о действии выхода, когда пользователь нажимает Escape. Вызывается метод ExitFlightMode(). Это вызывает событие, которое повторно включает карту действий игрока.