Создание и замена карт действий
Я выполнил финальное задание для нового курса ввода 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(). Это вызывает событие, которое повторно включает карту действий игрока.