Цель учебника

Создайте простой скрипт управления полетом

Добро пожаловать в этот супер простой учебник. Итак, в этом уроке я покажу вам, как создать скрипт управления полетом. Это руководство создано с помощью Unity 2021.3.7f1. Вы можете использовать любую версию, но я не уверен в версиях старше 2018 года. Не стесняйтесь загружать начальную сцену здесь, чтобы следовать ей.

После того, как вы загрузили сцену, появится папка Complete Scripts. Вы можете получить полный скрипт на тот случай, если захотите сравнить его со своим кодом, если возникнут ошибки.

Создать сценарий

Создайте новый скрипт и назовите его любым именем. Я назвал его FlyingControl.cs. Удалить каждую функцию. Давайте начнем заново.

Объявить переменные

Хорошо, теперь у нас есть пустое расширение класса FlyingControl для MonoBehavior. Чтобы управлять самолетом, нам нужно получить информацию от игрока. Перед этим нам нужно объявить некоторые переменные, которые важны для движения самолета.

  • тяга: получить силу тяги для движения самолета вперед.
  • thrust_multiplier: умножить значение тяги
  • yaw_multiplier: умножает введенное игроком значение рыскания. (Вращение вокруг оси Y)
  • pitch_multiplier: чтобы умножить значение рыскания, введенное игроком. (Вращение вокруг оси X)
  • rigidbody: Rigidbody для хранения данных компонента Rigidbody (физика) для использования в этом скрипте.

Убедитесь, что к игровому объекту вашего игрока прикреплен компонент Rigidbody.

Оставайтесь в безопасности и смотрите любимые спортивные состязания или потоковое видео из любой точки мира с помощью NordVPN. Находитесь ли вы в США или за границей, вы можете получить доступ к своим любимым потоковым сервисам, таким как Netflix, Hulu, BBC iPlayer и другим. Не позволяйте географическим ограничениям мешать вашим развлечениям. Мы защищаем онлайн-трафик с помощью шифрования, что затрудняет слежку или захват данных.

Подробнее о NordVPN👈

Метод пробуждения

Метод Awake вызывается один раз при загрузке экземпляра скрипта. Здесь, в этой функции, мы собираемся получить компонент Rigidbody и сохранить его в нашей недавно объявленной переменной rigidbody. Мы делаем это, вызывая GetComponent с именем компонента.

Метод FixedUpdate

Это метод, который лучше всего подходит для нашего скрипта FlyingControll. При работе с Rigidbody (физика) лучше использовать FixedUpdate. По сравнению с методом Update, который вызывается каждый кадр, FixedUpdate вызывается каждый кадр с фиксированной частотой кадров каждые 0,02 секунды (50 вызовов в секунду). Это делает физическое движение независимым от частоты кадров нашей машины.

Получить информацию от игрока

Мы собираемся использовать ASDW или клавиши управления курсором для управления самолетом. Мы делаем это в методе FixedUpdate. Затем мы сохраняем входные данные в переменных шага (по вертикали) и рыскания (по горизонтали) отдельно. Способ получить направленный ввод игрока — вызвать Input.GetAxis с именем оси. В Unity по умолчанию определены как горизонтальная, так и вертикальная оси ввода.

Управляйте самолетом

Чтобы двигаться вперед, мы должны добавить силы в самолет. Это можно сделать с помощью метода AddRelativeForce из компонента The Rigidbody. Для этого AddRelativeForce требуется 3 параметра, сила по локальным осям x, y и z.

Поскольку нам нужна только сила вдоль оси Z, мы можем сделать первые два параметра равными 0.

  • Силы, которые мы добавляем по оси Z, равны тяге *тяга_множителя * Time.deltaTime.

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

Time.deltaTime — интервал в секундах от последнего кадра до текущего.

Прежде чем мы сможем нажать кнопку воспроизведения, обязательно присвойте нашим переменным какое-то значение, чтобы самолет двигался.

Нажмите кнопку воспроизведения, и мы увидим, как самолет движется вперед.

Теперь мы собираемся дать ему правильную функцию маневренности вверх и вниз из стороны в сторону.

Мы можем использовать метод AddRelativeTorque. Как и метод AddRelativeForce, он требует от нас 3 параметра. Размер крутящего момента вдоль локальных осей x, y и z.

  • Что касается локальной оси X, мы задаем ей шаг (наш вертикальный игрок вводит W, S, клавиши со стрелками вверх, вниз) * pitch_multiplier* Time.deltaВременной размер крутящего момента . Это заставит самолет двигаться вверх и вниз.
  • На локальной оси Y мы задаем yaw (наш горизонтальный игрок вводит A, D, клавиши со стрелками вправо и влево) * yaw_multiplier * Time.deltaTime. Это заставит самолет поворачиваться вправо и влево по горизонтали.
  • На локальной оси Z мы даем -yaw * yaw_multiplier * 2 * Time.deltaTime. Зачем давать отрицательный yaw, потому что мы хотим инвертировать ввод игрока, иначе левая клавиша будет для правого вращения и наоборот.

Это завершило наш сценарий. Попробуйте поиграть и настроить значение скрипта, если оно слишком медленное или быстрое. Я надеюсь, что это поможет, и вы узнаете новые вещи. Чао!

Другие учебники





Раскрытие информации: некоторые из ссылок в этой статье могут быть партнерскими ссылками, которые могут предоставить мне бесплатную компенсацию для вас, если вы решите приобрести платный план.