“Робот Фортран, чисть картошку!” или история передвижения одного куба.

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

Возможно некоторые из вас знакомы с прекрасной книгой “Энциклопедия профессора Фортрана”. В ней очень доступно рассказывается об устройстве компьютера а также о том что такое компьютерный язык. Не смотря на то что книга 1991 года выпуска, по моему мнению, она является лучшим введением в мир компьютеров как для взрослых так и для детей.


Особенно мне запомнился момент из книги, когда кот Икс пытается задать программу, для чистки картошки, профессору Фортран, но простая команда “Робот Фортран, чисть картошку!” не приносит желаемого результата, “робот” начинает полировать картошку носовым платком, или же шкрябать её ручкой от ножа.

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

Это очень наглядный пример к выражению: “Программа делает не то что хочет пользователь, а то на что её запрограммировали”.


Недавно я создал пост о своей первой игре для андроид https://pikabu.ru/story/lozhka_dyogtya_v_bochku_s_dyogtem_il....

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

Если вкратце геймплей Build Way заключается в том, что игрок строит дорогу на пути катящегося куба, помогая ему обходить препятствия и находить различные бонусы в виде монет и ключей. То есть самим кубом мы не управляем,  катиться он автоматически. Куб должен не только двигаться в нужном направлении, но и адаптироваться к выдвижению блоков на стене, тем самым меняя направление движения динамически. Казалось бы что может быть проще чем катить куб по дороге?

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

Но поверьте я дочь программиста и тут не все так однозначно. Не всегда просто добиться естественного поведения движения от куба. Рассмотрим несколько примеров. Чтобы двигать куб вперед будем вращать его вокруг ребр:

1) Простейший пример передвижения вперед без препятствий, для этого достаточно повернуть куб вокруг нижнего переднего ребра на 90°:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

2) Допустим мы встретили препятствие и нужно на него взобраться, для этого нужно повернуть куб на 180° вокруг верхнего переднего ребра:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

3) Усложним еще ситуацию, на пути нашего куба оказалась яма, что же ему делать в этом случае? На самом деле выхода как обычно минимум два - первое забить на яму и крутиться вперед вокруг переднего нижнего ребра, или же закатиться в яму. Мы выбрали второе решение, так как оно показалось нам более естественным и таким образом куб сможет посетить все закоулки в которые заведет его игрок! В этом случае мы крутим куб не вокруг его ребр, а вокруг оси X:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

еще схожий пример но теперь яма не внизу, а напротив нас, теперь крутим куб вокруг оси Y:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

4) Дальше веселее =) Логично предположить что куб должен двигаться вперед(вправо), так как игровой процесс идет слева направо. Но иногда бывают ситуации когда куб должен, например двигаться назад. Для этого были добавлены приоритеты движения, а также исключительные ситуации:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

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

Но мы решили что куб все-таки должен закатиться назад, вернуться и покатиться дальше вперед и вниз. Куб как-бы привязан к стене и должен её полностью обойти.


Пару слов о том как куб анализирует объекты вокруг себя. В Unity engine есть замечательная возможность это сделать с помощью sphere cast. Простыми словами можно сказать, что куб как-бы рисует сферу вокруг себя и возвращает все объекты, которые попали или пересеклись с этой сферой. На данном рисунке видно что вокруг игрового куба находится куб сверху, снизу и снизу справа:

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост

Все эти механики были реализованы чтобы сделать поведение куба более предсказуемым(по нашему мнению =) а также разнообразить геймплей.


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

“Робот Фортран, чисть картошку!” или история передвижения одного куба. Игры на Android, Инди игра, Аркадные игры, Gamedev, Unity, Длиннопост
5
Автор поста оценил этот комментарий

Есть у нас в семье эта книга. Хранится как историческая древность. Раньше порывался сдать её в макулатуру. Спасибо за вашу публикацию я её обязательно полистаю вместе с сыном и племяшками.

5
Автор поста оценил этот комментарий
Помню эту книгу. Даже компьютер из нее клеил. И год его бережно хранил.
раскрыть ветку
2
Автор поста оценил этот комментарий

ностальгия от этих персонажей)

3
Автор поста оценил этот комментарий

/фортран/тред открывается здесь. добро пожаловать

Иллюстрация к комментарию
раскрыть ветку
Автор поста оценил этот комментарий

Ага, у меня у мамы дома такая книга лежит. С детства её обожал.