Главная » Статьи » 2D Шутер на Unity3D |
Я надеюсь, Вы не испугались такого объемного кода, что я привел на прошлом уроке? Нет? Тогда идем дальше. Я объясню скрипт построчно, поэтому я сразу дал такой код (Вы можете его скачать – из прошлого урока). Скрипт занимается передвижением персонажа. Если Вы кликнете по кнопке "Play”, то вы сможете поиграть в игру и, конечно же, довольно неуклюже передвигаться персонажем. Давайте сначала посмотрим на нашу функцию Update:
Мы вызываем функцию FindInput, чтобы узнать какие клавиши были нажаты, и установки переменных которые передаются функции ProcessMovement – функция для передвижения персонажа. Если мы (игрок) персонаж, то скрипт вызывает функцию HandleCamera – центрирует камеру вокруг игрока. Следующий метод:
Разбираем этот метод: Мы используем векторы. Если вы не знакомы с векторами, то рекомендую изучить их, так как они лучшие друзья, когда дело доходит до управления перемещением объекта в 3D мире. Первая строка этого метода находит, на какие клавиши нажал игрок. Помните, какой Инпут назывался Horizontal? Если нет идем в Едиторе - edit - project settings – input. Метод - Input.GetAxis("Horizontal") – возвращает нам значения от (-1) до 1. Нажатие на клавишу А даст нам (-1), а на D = 1. Дальше мы находим поворот перса, inputRotation это Vector3, который вычисляет вектор от центра экрана до позиции мыши на экране. В не буду вдаваться в математику, но эта строка работает, так как это надо. В следующем методе мы работаем над передвижением:
Так как мы добавили компонент Rigidbody нашему персу, мы можем вызывать функцию AddForce – функция передвигает перса(Только если добавлен компонент Rigidbody). Rigidbody (в коде) является указателем на свойство Rigidbody у объекта. Помните наш вектор который принимал нажатые клавиши? Сейчас мы положили эти клавиши на Х и Z. Мы ограничиваем вектор в размере 1, если бы мы не сделали этого то игрок передвигался бы с разной скоростью по полю, так как вектор может быть разных размеров. Мы умножаем вектор на скорость передвижения и на Time.deltaTime. Я не знаю имеет ли смысл умножать на Time.deltaTime, но как я понимаю она используется, чтобы сделать движение более гладким и последовательным в зависимости от частоты кадров. 2-я Строка. Quaternion (Кватернион), о том что это можете почитать здесь. Transform.rotation является, как раз таки, кватернионом, и не можем просто указать вектор чтобы объект повернулся. Если объект надо повернуть на направление вектора, то надо использовать метод LookRotation, а в скобках указать к какому векторму нужно повернуть объект, что мы и сделали во второй строке. Так как это 2D игра, мы не хотим, чтобы объект вращался вокруг третьей оси(оси У), в третьей строке мы это и указываем игре. Мы просто сбрасываем поворот вокруг оси Х и Z на 0, и сохраняем оригинальный поворот по оси У. В последней строке мы указываем, что положение объекта по оси У ВСЕГДА должно быть 0. И последний метод HandleCamera:
Просто центрирует камеру вокруг перса. Идем дальше добавим куб в сцену. Жмем на кнопку "Play” и движемся вокруг куба, куб в данном случае служит как-бы ориентиром, так как если бы мы не добавили его нам бы казалось, что перс не движется. | |||||
Категория: 2D Шутер на Unity3D | Добавил: Шаке (29.06.2012) | |||||
Просмотров: 4216 | Комментарии: 1 |
Всего комментариев: 0 | |