Как сделать механику взлома замков из Skyrim в Unity

Взлом замка в The Elder Scrolls V: Skyrim и серии Fallout — мини-игра. С помощью мышки вы выбираете положение отмычки, а с помощью клавиш A и D поворачиваете замок ножом. Если точка выбрана правильно, замок открывается, если нет — отмычка ломается. Если при повороте замка отмычка дрожит, значит вы близки к разгадке.

Разработчик игр Zeppelin Games на своем ютуб-канале рассказал, как создать такую механику взлома замков в Unity, а мы перевели. С кодом помог Константин Шевяхов, Unity Developer из Hypemasters.

Embedded Image

Гиф из видео

Чтобы повторить эту механику, понадобятся:

модель отмычки

спрайты замка и фон

золотой материал для отмычки

Embedded Image
Embedded Image
Embedded Image

В Unity cоздайте пустой GameObject, назовите его «LockPick», и сбросьте настройки позиции (x, y, z = 0). Этот объект будет отвечать за движение отмычки.

Внутри «LockPick» создайте ещё один GameObject «LockPickingPin» и поместите в него отмычки. Распакуйте модель, удалите пустой объект LockPickingPin, камеру и освещение.

Embedded Image
Embedded Image
Embedded Image

Создайте новый GameObject в корне сцены и назовите его «Lock», поместите в него два спрайта для замка. Слой вращающейся части замка InnerLock расположите выше статичного. Чтобы эта позиция не менялась, поставьте Order in Layer значение 1.

Embedded Image
Embedded Image

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

Embedded Image
Embedded Image
Embedded Image

Transform для отмычки (Pin), Transform для спрайтов замка (InnerLock, OuterLock), Transform для камеры (Main Camera)

Промежуточный результат:

Теперь нужно поменять положение отмычки:

подвиньте объект LockPickingPin, чтобы модель отмычки соответствовала значениям Transform родителя

пивот LockPick отмычки расположите так, чтобы была подвижна только верхняя часть, как стрелка часов

чтобы отмычка не проваливалась в замок, отодвиньте её по оси Z

Embedded Image
Embedded Image
Embedded Image
Embedded Image

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

Embedded Image
Embedded Image

В InnerLock создайте новый GameObject и назовите его «PickFollow». Этот объект свяжет поворот отмычки и поворот внутренней части замка.

Расположите пивот PickFollow во внутренней части замка сверху, чтобы при повороте InnerLock пивот PickFollow тоже вращался.

Embedded Image
Embedded Image

Убедитесь, что сцена выглядит так, будто отмычка находится внутри замка и двигается вместе с ним. Сохраните проект и сцену.

Добавьте скриптовый компонент на объект LockPick, назвав его «LockPick», и откройте в текстовом редакторе.

В оригинальной версии кода автора мы обнаружили баг, поэтому попросили Константина Шевяхова помочь. Новая версия кода доступна здесь, комментарии к ней:

Объявление полей, свойств и события

Функция генерации замка

Функция изменения движения замка

Вернувшись в Unity, в настройках скрипта проставьте нужные референсы.

Embedded Image
Embedded Image

Нажмите Play и попытайтесь взломать замок.

Комментарии: 0