Контроллер персонажа может помочь вам реализовать в игре простую физику движения.
Вы можете подойти к контроллерам персонажей Unity3D с нескольких точек зрения. Если вы используете библиотеку с мощными классами и функциями, создание контроллера персонажа, основанного на физике, может стать забавным местом для начала разработки вашей игры.
Шаг 1. Создайте сцену с объектами Player и Terrain.
Когда Unity открыт и вы создали новый проект, вы можете начать с добавления нескольких объектов на сцену. Вы можете создавать эти объекты в любом порядке, но убедитесь, что вы используете правильные настройки. Хотя этот проект является базовым, это отличный способ начать работу с Unity.
Объект 3D-плоскости для ландшафта
Первый объект, который нужно добавить в вашу сцену, — это самолет. Щелкните правой кнопкой мыши внутри панели иерархии, наведите 3D-объект
и выберите Самолет из списка. Вы можете отрегулировать размер плоскости, чтобы обеспечить большую область тестирования, но вам не нужно ничего делать с ней.Модель игрока кубического объекта
Теперь пришло время добавить на сцену куб, который будет играть роль модели игрока. Щелкните правой кнопкой мыши внутри панели иерархии, наведите 3D-объекти выберите куб из выпадающего меню. Расположите новый куб так, чтобы он располагался над плоскостью, которую вы также добавили. Вам также необходимо добавить компонент твердого тела, чтобы превратить куб в физический объект.
Выберите куб и перейдите в Инспектор. Нажмите на Добавить компонент в нижней части панели найдите твердое тело и выберите Жесткое тело из списка, когда он появится. Отметьте Используйте гравитацию поставить галочку, а остальные настройки оставить как есть.
Ты можешь найти бесплатные активы Unity онлайн чтобы украсить ваш проект.
Камера от третьего лица
В вашей сцене уже должна быть камера, которую вы можете использовать в качестве камеры от третьего лица. Расположите камеру так, чтобы она находилась в удобном положении от третьего лица над кубом. Перейдите на панель иерархии, прежде чем перетаскивать камеру на куб, чтобы создать связь родитель-потомок. После этого камера будет автоматически следовать за вашим кубом.
Быстрый тест
Хотя в вашей сцене еще нет кода, вы можете протестировать проделанную работу. Нажмите на Играть кнопку в верхней части экрана, чтобы загрузить игру. Вы должны увидеть, как куб падает и приземляется на вершину самолета, а камера должна следовать за кубом, когда он падает.
Шаг 2. Настройте файл C#
Теперь пришло время создать файл C#, чтобы вы могли приступить к программированию движения. Перейдите в раздел «Проект», щелкните правой кнопкой мыши, наведите курсор на «Создать» и выберите «Папка» из списка. Назовите папку Scripts или что-то подобное.
Перейдите в новую папку и повторите процесс, но выберите C# Script из списка. Вы можете дать этому файлу любое имя, но это также будет имя основной функции внутри него. Убедитесь, что ваш новый C# выглядит так.
с использованием Система. Коллекции;
с использованием Система. Коллекции. универсальный;
с использованием ЮнитиДвигатель;публичныйсортПерсонаж_Контроль: моноповедение {
пустотаНачинать() {
}
пустотаОбновлять() {
}
}
Шаг 3. Используйте C# для создания движения вперед и назад со скоростью
Прежде чем добавлять функции в файл сценария, объявите некоторые общедоступные переменные. Прежде всего, это Rigidbody для хранения модели игрока. Также объявите поплавок, чтобы отслеживать скорость движения. Эти переменные идут в основном классе, вне каких-либо функций.
публичный Жесткий кузов
публичныйплавать скорость;
Теперь пришло время добавить одну строку кода в функцию Start. При этом используется объявление GetComponent для назначения компонента твердого тела куба созданной вами переменной твердого тела.
пустотаНачинать() {
Rigidbody = GetComponent < Rigidbody > ();
}
Теперь вы можете добавить код, который заставит вашу модель игрока двигаться. Этот код красивый и простой; вам просто нужны два оператора if, один для движения вперед и один для движения назад. Вы можете использовать ввод. GetKey для определения момента нажатия клавиши. В этом случае вы ищете нажатия клавиш W и S.
Нажатие любой из этих клавиш добавляет силу к жесткому телу куба с помощью функции Ridbody. Аддфорс. Вы можете вычислить направление и скорость добавленной силы, умножив ее положение по оси Z (transform.forward) на переменную скорости. У вас нет класса transform.backward, который вы могли бы использовать для обратного движения, но это достижимо, умножив transform.forward на -1.
если (Вход. ПолучитьКлюч("ж")) {
жесткое тело. AddForce (transform.forward * скорость);
}
если (Вход. ПолучитьКлюч("с")) {
жесткое тело. AddForce((transform.forward * -1) * скорость);
}
Сохраните файл C# и вернитесь в Unity. Найдите сценарий на панели «Проект» и перетащите его на куб модели персонажа внутри иерархии, чтобы назначить сценарий этому объекту. Когда вы выбираете куб, вы должны увидеть скрипт как компонент на панели инспектора. Щелкните внутри поля переменной твердого тела и выберите твердое тело куба.
Теперь вы можете использовать кнопку «Играть», чтобы запустить игру и протестировать свой код. Но ждать! Есть проблема; ваш куб будет катиться, а не двигаться прямо вперед. Вернитесь в инспектор куба, найдите компонент Rigidbody и установите флажки Freeze Rotation по осям X и Z перед повторным запуском игры. Теперь это должно работать.
Шаг 4: Используйте C# для создания левого и правого поворота с крутящим моментом
В отличие от движения вперед и назад, для поворота модели игрока Cube требуется сила, называемая крутящим моментом. Для этого вам нужна еще одна переменная: публичный поплавок для присвоения значения крутящего момента.
публичныйплавать крутящий момент;
Код для поворота влево и вправо в этом сценарии очень похож на код, используемый для перемещения вперед и назад. Есть если оператор для каждого направления, которое ищет нажатия клавиши D (правый поворот) или клавиши A (левый поворот).
Первым шагом в каждом операторе if является определение направления поворота с помощью входных данных. GetAxis и присвоить результат переменной с плавающей запятой. После этого используйте твердое тело. AddTorque, чтобы применить силу вращения к модели персонажа Cube путем умножения крутящего момента, поворота и оси Z куба.
если (Вход. ПолучитьКлюч("д")) {
плавать поворот = ввод. ПолучитьОсь("Горизонтальный");
жесткое тело. AddTorque (transform.up*крутящий момент*поворот);
}
если (Вход. ПолучитьКлюч("а")) {
плавать поворот = ввод. ПолучитьОсь("Горизонтальный");
жесткое тело. AddTorque (transform.up*крутящий момент*поворот);
}
Сохраните свой код и вернитесь в Unity, чтобы протестировать его. Вы можете настроить скорость и время разгона вращения модели игрока, выбрав куб и отредактировав переменные массы, сопротивления и крутящего момента твердого тела в своем скрипте. Этот пример проекта основан на 1 массе, 1 сопротивлении и 2 крутящих моментах.
Шаг 5: Используйте C# для программирования переходов
В качестве последнего элемента этого контроллера персонажа Unity пришло время создать свой прыжок. Создать прыжок сложнее, чем другие основные элементы управления, над которыми вы работали, учитывая, что прыжок должен иметь ограниченную высоту. Начните с добавления закрытой логической переменной, чтобы отслеживать, прыгает ли игрок.
частныйлогический isJumping = ЛОЖЬ;
Эта переменная ничего не сделает без инструкции для ее проверки. В этом случае простой оператор if для проверки того, является ли переменная ложной, поможет. Добавление того же условия к другому движению if остановит игрока от движения во время прыжков.
если (!Прыгает) {
}
Добавление того же условия к другому движению if остановит игрока от движения во время прыжков.
если (Вход. ПолучитьКлюч("ж") && !isJumping) {
жесткое тело. AddForce (transform.forward * скорость);
}
В операторе !isJumping if вам понадобится еще один оператор if, на этот раз для проверки нажатия клавиши кнопки перехода. Установка переменной isJumping в значение true — это первое, что нужно сделать в этом операторе if, а затем сделать объявление hardbody.angularVelocity для удаления сил, приложенных в настоящее время к кубу.
Теперь вы можете использовать твердое тело. Объявление AddForce для добавления силы к кубу по его оси Z, создавая восходящее движение прыжка. Наконец, пришло время использовать объявление invoke для вызова другой функции через 0,8 секунды.
если (!Прыгает) {
если (Вход. ПолучитьКейДаун("космос")) {
isJumping = истинный;
жесткое тело. AddForce (transform.up * скорость * 120);
hardbody.angularVelocity = Vector3.zero;
Вызов("Move_Setter", 0.8 ж);
}
}
Эта функция устанавливает переменную isJumping обратно в false, чтобы движение/прыжки снова были возможны, а задержка в 0,8 секунды предотвращает слишком раннее срабатывание.
пустотаMove_Setter() {
isJumping = ЛОЖЬ;
}
Шаг 6: Протестируйте свой код контроллера персонажа
Сохраните файл и вернитесь в Unity, чтобы протестировать написанный вами код. Как и большинство компиляторов, Unity предоставляет информацию об ошибках и других проблемах с вашим кодом, чтобы было проще увидеть, что вам может понадобиться изменить. Вы можете просмотреть полный код для этого проекта на нашем Гитхаб страница.
Создание контроллеров персонажей Unity
Вы можете выбрать один из множества различных подходов при создании контроллера персонажа в Unity. Использование физики — это один из вариантов, но вы также можете использовать встроенную систему управления персонажем, если хотите.
Изучение различных вариантов, подобных этому, — отличный способ узнать о таких инструментах, как Unity.