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

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

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

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

Гиф из видео

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

  • модель отмычки
  • спрайты замка и фон
  • золотой материал для отмычки

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

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

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

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

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

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

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

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

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

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

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

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

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

C# и комментарии к нему

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

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

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

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

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

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

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

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

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

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

Материал подготовлен командой XYZ Media.

Наши каналы в Telegram и на YouTube.

3232
7 комментариев

За код скринами положен специальный котел

11
Ответить

С одной стороны да, но с другой, на дтф нет нормального редактора и нельзя обеспечить подсветку синтаксиса. И, наверное, лучше иметь возможность прочитать из статьи, что-то почерпнуть и попробовать повторить. Чем просто скопировать, и ничему не научиться

Ответить

А... Так там и ссылка на гитхаб :)

Ответить

Трудно понять что происходит в коде, но глядя на то как определяется правильно ли подобран угол, смею предположить что код мог быть намного проще.

Нужно задавать, правильный угол (желательно вектором или кватернионом), и погрешность float в обе стороны.

Сравнивать тогда правильность попадания гораздо легче c помощью "Vector3.Angle" или "Quaternion.Angle" тогда не будет этого мусора из Abs и скорее всего прочего чего я не понимаю.

2
Ответить

Комментарий недоступен

1
Ответить

А зачем ваш пост, если уже есть видео?

Ответить