Все думали о телекинезе в детстве. Почему бы не воплотить эту фантазию и не дать себе эту силу в игре? Если вы когда-нибудь задумывались, как это делают такие игры, как Control или Psi Ops: Mindgate Conspiracy, вы попали по адресу. Это проще, чем вы думаете!

Что мы будем создавать:

Это четвертая часть моей серии статей о разработке игр на Unity. Для предыдущей части посетите:



Если вы только начинаете учиться разрабатывать игры, вы можете пройти мой курс udemy по разработке Unity для начинающих:



Настройка сцены

Если у вас есть сцена из предыдущих частей моей серии статей о разработке игр, добавьте компонент RigidBody в блок сцены. Если нет и вы используете собственный контроллер и проигрыватель, просто добавьте 3D-куб и назначьте ему RigidBody.

Создайте тег Box и добавьте его в Box. Мы сможем использовать телекинез на всем, что имеет тег Box.

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

Создайте пустой объект с именем HoldPosition. Поместите его перед игроком и сделайте его родителем объекта Player. Это будет место, куда будет левитировать объект телекинеза после того, как мы его притянем.

Если вы только начинаете учиться разрабатывать игры, вы можете пройти мой курс udemy по разработке Unity для начинающих:



Функционал телекинеза.

Создайте новый скрипт C#, назовите его Telekinesis (код доступен на моем github, ссылка ниже).

Я хочу притягивать объекты, на которые я указываю перекрестием. Я делаю это, вызывая ViewportPointToRay в середине координат x и y.

Если я ударяю объект, который находится достаточно близко от меня, я проверяю, есть ли у него тег Box. Если это так, я создаю объект для объекта holdPosition, который я установил ранее. Затем я замораживаю твердое тело на месте и вызываю функцию вращения (это полирующая функция, которую я буду реализовывать в последнюю очередь, сейчас приоритет отдается функциональности).

CheckDistance просто проверяет расстояние между объектом и точкой удержания. MoveObjectToPosition переводит объект в позицию удержания. Release object освобождает объект от позиции удержания (разыменовывает все значения). ShootObject стреляет в объект с силой броска в прямом направлении камеры.

Эффект вращения будет реализован с помощью функции transform.Rotate. Он использует случайные значения каждый раз, когда он используется.

Все, что нам нужно сделать сейчас, это добавить фактические элементы управления и сопоставить их с функциями.

В Start я просто инициализирую throwForce. Метод Update обрабатывает ввод.

Если я нажимаю левую кнопку мыши, я притягиваю объект. Если я держу правую мышь, бросок будет сильнее. Если я просто нажму на нее, она будет брошена с силой по умолчанию. И если я нажму F, я просто уроню объект.

Завершающие приемы

Добавьте Telekinesisв Player и назначьте необходимые значения, такие как Camera, Hold Position, и выберите собственные значения переменных.

Для перекрестия создайте новый игровой объект — Image ( Canvas создается автоматически).

Установите привязку изображения к центру экрана.

Установите его положение на (0,0,0), чтобы оно помещалось точно посередине экрана, и измените ширину и высоту на 10. Измените исходное изображение на Knob, чтобы оно стало хороший маленький круг.

Запустите игру. Сделанный.

Результат

В следующей части я добавлю динамику врага/телекинеза, чтобы мы могли ранить зомби из части 3.

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





Исходный код на гитхабе.