Вы новичок в Unity? Хотите научиться принимать данные от игроков и перемещать персонажей по экрану? Мы создали это руководство, чтобы продемонстрировать три различных способа управления движением игрока в Unity.
Независимо от того, являетесь ли вы новичком в программировании или уже имеете некоторый опыт, этот учебник по C# поможет вам встать на ноги, а вашим персонажам — встать на ноги.
Давайте начнем.
Движение игрока в Unity: сбор входных данных
Перво-наперво, вам нужно знать, как получать входные данные от пользователя и преобразовывать их в движения в игре. Unity делает это довольно просто, если вы знаете, где искать.
Открыв Unity, нажмите Редактировать на верхней панели инструментов. Теперь выберите Настройки проекта. Из списка слева выберите Менеджер ввода. Выбирать Оси, заполняя список входных значений. Вы захотите посмотреть на Горизонтальный а также Вертикальный для основного движения.
Вы будете использовать эти оси вместе с Вход. ПолучитьОсьСрав(); для основного движения в следующем разделе.
Движение игрока в Unity с помощью Rigidbody и коллайдера
Теперь, когда вы знаете названия осей, вы можете использовать их для управления движением игрока.
В вашем проекте Unity Иерархия просмотреть, щелкнуть правой кнопкой мыши и выбрать 3D-объект > Капсула чтобы создать то, чему вы наделите движение. Убедитесь, что используете ту же тактику, чтобы создать землю Самолет чтобы ваша капсула стояла.
Обязательно сбросьте Трансформировать значение обоих объектов и переместите свою капсулу так, чтобы она стояла на плоскости. Переименуйте свою капсулу во что-то вроде «Player» для легкой идентификации.
Связанный: 5 языков разработки игр Unity: какой следует выучить?
Нажать на Игрок объект и, в Инспектор просмотреть, прокрутить вниз до Добавить компонент. Добавить Жесткое тело, а затем добавьте еще один компонент в качестве Капсульный коллайдер этот раз. Вам понадобятся эти компоненты, чтобы добавить физику и, следовательно, движение к вашему Игрок.
Затем щелкните правой кнопкой мыши в своем Скрипты папка и Создавать новый С# Скрипт. Назовите этот скрипт как-то вроде «PlayerMovement». Если вы планируете добавить несколько типов движений для разных персонажей или типов контроллеров, вам потребуется создать много различных сценариев для каждого типа движения. Сейчас мы сосредоточимся на основах и воспользуемся одним скриптом.
Смотрите также: Что такое модульное программирование в Unity и почему это важно?
Дважды щелкните свой сценарий, чтобы открыть его. Вас встретит скрипт Unity по умолчанию:
используя Систему. Коллекции;
используя Систему. Коллекции. универсальный;
с помощью UnityEngine;
открытый класс PlayerMovement: MonoBehaviour
{
// Старт вызывается перед обновлением первого кадра
пустое начало ()
{}
// Обновление вызывается один раз за кадр
пустое обновление ()
{
}
}
Вы можете удалить используя Систему. Коллекции; а также с использованиемСистема. Коллекции. универсальный; поскольку они не нужны для этого скрипта.
Отбросив это, сосредоточьтесь на
открытый класс PlayerMovement: MonoBehaviour {
на данный момент. Внутри открывающей фигурной скобки создайте общественное плавание переменная с именем скорость или что-то подобное. Этот скорость переменная — это множитель, который будет контролировать, насколько быстро Игрок перемещается после некоторого программирования. На данный момент установите скорость равно чему-то вроде 10f.
Вам также нужно сообщить Unity, что в этом скрипте есть Rigidbody, которым можно манипулировать. Это делается с помощью ключевого слова Жесткое тело и имя переменной — мы выберем рб.
открытый класс PlayerMovement: MonoBehaviour
{
общественная скорость поплавка = 10f; //управляет множителем скорости
Жесткий корпус рб; //Сообщает скрипту, что есть твердое тело, мы можем использовать переменную rb для ссылки на него в дальнейшем скрипте
Это все, что вам нужно добавить в этот раздел. Теперь перейдите к пустое начало (). При запуске игры необходимо установить рб переменная, равная Жесткое тело на Игрок вот так:
пустое начало ()
{
rb = ПолучитьКомпонент(); //rb равно жесткому телу игрока
}
Теперь взгляните на пустое обновление () функция. Это функция, которую вы будете использовать для постоянного получения данных с клавиатур, контроллеров и т. д. игроков. Помните, когда вы проверяли Настройки проекта для Входные оси? Вы будете использовать их здесь.
пустое обновление ()
{
поплавок xMove = ввод. GetAxisRaw("Горизонтально"); // ключ d меняет значение на 1, ключ меняет значение на -1
поплавок zMove = ввод. GetAxisRaw("Вертикаль"); // клавиша w изменяет значение на 1, клавиша s изменяет значение на -1
rb.velocity = новый Vector3(xMove, rb.velocity.y, zMove) * скорость; // Создает скорость в направлении значения, равного нажатию клавиши (WASD). rb.velocity.y имеет дело с падением + прыжком, устанавливая скорость в y.
}
Не волнуйтесь, если вы чувствуете себя перегруженным скачком в коде; мы объясним это шаг за шагом. Сначала создайте плавать переменная с именем вроде xMove, и установить его равным Вход. GetAxisRaw("Горизонтально");
Вход. ПолучитьОсьСрав(); это способ Unity записывать входные данные игрока из Оси вы нашли в Настройки проекта. Подробнее об этом можно прочитать в Официальная документация Unity. "Горизонтальный" исходит из Горизонтальная ось имя в единстве. Эта ось управляет движением влево и вправо с помощью клавиш «a» и «d».
Как вы, наверное, уже догадались, поплавок zMove = ввод. GetAxisRaw("Вертикаль");
делает то же самое, но для клавиш «w» и «s».
Связанный: Лучшие учебные пособия по Unity 3D для начинающих
Далее вы поместите это скорость переменную, которую вы создали в игре, и завершите последнюю часть головоломки для движения игрока в Unity.
rb.velocity = новый Vector3(xMove, rb.velocity.y, zMove) * скорость; // Создает скорость в направлении значения, равного нажатию клавиши (WASD). rb.velocity.y имеет дело с падением + прыжком, устанавливая скорость в y.
Вернитесь в Unity Инспектор вид на Игрок объект. Взгляните на Жесткое тело-под Информация, вы увидите значение Скорость. Это значение, на которое вы ориентируетесь rb.velocity.
новый Vector3(xMove, rb.velocity.y, zMove) * скорость, создает новый вектор с предоставленными значениями x, y и z, затем умножает значение вектора на скорость.
Обязательно перетащите движение игрока сценарий на Игрок объект в Unity, и все! В целом у вас есть работающий скрипт C#, который принимает входные данные от игрока и преобразует их в движение персонажа в Unity.
Вот готовый код:
с помощью UnityEngine;
открытый класс PlayerMovement: MonoBehaviour
{
общественная скорость поплавка = 10f; //управляет множителем скорости
Жесткий корпус рб; //Сообщает скрипту, что есть твердое тело, мы можем использовать переменную rb для ссылки на него в дальнейшем скрипте// Старт вызывается перед обновлением первого кадра
пустое начало ()
{
rb = ПолучитьКомпонент(); //rb равно жесткому телу игрока
}// Обновление вызывается один раз за кадр
пустое обновление ()
{
поплавок xMove = ввод. GetAxisRaw("Горизонтально"); // ключ d меняет значение на 1, ключ меняет значение на -1
поплавок zMove = ввод. GetAxisRaw("Вертикаль"); // клавиша w изменяет значение на 1, клавиша s изменяет значение на -1
rb.velocity = новый Vector3(xMove, rb.velocity.y, zMove) * скорость; // Создает скорость в направлении значения, равного нажатию клавиши (WASD). rb.velocity.y имеет дело с падением + прыжком, устанавливая скорость в y.
}
}
Примечание: если вы обнаружите, что ваш персонаж больше всего крутится, не забудьте заблокировать вращение игрока в Инспектор.
Учитесь и делайте больше в Unity
Теперь, когда вы знаете, как программировать движения игрока в Unity с помощью компонентов Rigidbody и Collider, что вы узнаете дальше? Возможно, расширение вашего контроллера движения, чтобы добавить такие вещи, как скольжение, двойной прыжок и многое другое, окажется интересным и увлекательным.
Unity Learn содержит множество интересных тем, которые помогут вам улучшить свои навыки разработки игр. Мы считаем, что одним из наиболее важных факторов в расширении ваших знаний о программировании является изучение чего-то нового каждый день. Оставайтесь любопытными и удачного взлома!
Хотите начать разрабатывать собственные игры? Unity Learn — это лучший и самый простой способ изучить и освоить то, что вам нужно знать.
Читать дальше
- Программирование
- Разработка игр
- Единство
- Программирование
Маркус — технический журналист-фрилансер и младший редактор отдела программирования в MUO. Он учится на протяжении всей жизни, разработчик интерфейса-любителя и автор рассказов с более чем 3-летним опытом разработки прозы, которая держит читателей в курсе.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться