Взлом замка в The Elder Scrolls V: Skyrim и серии Fallout — мини-игра. С помощью мышки вы выбираете положение отмычки, а с помощью клавиш A и D поворачиваете замок ножом. Если точка выбрана правильно, замок открывается, если нет — отмычка ломается. Если при повороте замка отмычка дрожит, значит вы близки к разгадке.
Разработчик игр Zeppelin Games на своем ютуб-канале рассказал, как создать такую механику взлома замков в Unity, а мы перевели. С кодом помог Константин Шевяхов, Unity Developer из Hypemasters.
Гиф из видео
Чтобы повторить эту механику, понадобятся:
модель отмычки
спрайты замка и фон
золотой материал для отмычки
В Unity cоздайте пустой GameObject, назовите его «LockPick», и сбросьте настройки позиции (x, y, z = 0). Этот объект будет отвечать за движение отмычки.
Внутри «LockPick» создайте ещё один GameObject «LockPickingPin» и поместите в него отмычки. Распакуйте модель, удалите пустой объект LockPickingPin, камеру и освещение.
Создайте новый GameObject в корне сцены и назовите его «Lock», поместите в него два спрайта для замка. Слой вращающейся части замка InnerLock расположите выше статичного. Чтобы эта позиция не менялась, поставьте Order in Layer значение 1.
Далее убедитесь, что отмычка и замок правильно масштабированы и расположены перед камерой.
Transform для отмычки (Pin), Transform для спрайтов замка (InnerLock, OuterLock), Transform для камеры (Main Camera)
Промежуточный результат:
Теперь нужно поменять положение отмычки:
подвиньте объект LockPickingPin, чтобы модель отмычки соответствовала значениям Transform родителя
пивот LockPick отмычки расположите так, чтобы была подвижна только верхняя часть, как стрелка часов
чтобы отмычка не проваливалась в замок, отодвиньте её по оси Z
Примените золотой материал к отмычке. Фон можно поменять на черный, чтобы лучше видеть сцену.
В InnerLock создайте новый GameObject и назовите его «PickFollow». Этот объект свяжет поворот отмычки и поворот внутренней части замка.
Расположите пивот PickFollow во внутренней части замка сверху, чтобы при повороте InnerLock пивот PickFollow тоже вращался.
Убедитесь, что сцена выглядит так, будто отмычка находится внутри замка и двигается вместе с ним. Сохраните проект и сцену.
Добавьте скриптовый компонент на объект LockPick, назвав его «LockPick», и откройте в текстовом редакторе.
В оригинальной версии кода автора мы обнаружили баг, поэтому попросили Константина Шевяхова помочь. Новая версия кода доступна здесь, комментарии к ней:
Объявление полей, свойств и события
Функция генерации замка
Функция изменения движения замка
Вернувшись в Unity, в настройках скрипта проставьте нужные референсы.
Нажмите Play и попытайтесь взломать замок.