Разное |

Как заставить Васю повернуться

История про Васю, с моралью и иллюстрацией.

Чисто из интереса я пытаюсь освоить игровой движок Unity 3D. Видео делать я уже умею, а интерактивное видео — ещё нет. Решил попробовать.

В Unity я сделал себе человечка, который должен по клику мыши поворачиваться и идти туда, куда кликнули. Назовём для ясности это компьютерное существо Васей. И всё бы хорошо, но иногда, особенно когда нужно было развернуться на 180 градусов, Вася начинал идти, так до конца и не развернувшись.

Я решил: это ненормально. Надо исправлять.

Уровень моих знаний по теме программирования в Unity до того, как я начал делать этот шедевр, был меньше или равен примерно нулю. Я стал перекапывать с трудом написанный по подсказкам из туториалов код. Перекопал. Взрыхлил, так сказать. Обработал. Заменил всё, что можно было заменить. Проверил, правильно ли задаётся направление взгляда Васи (правильно). Проверил последовательность действий (правильная). Поменял последовательность действий. Она и так была сложная, состояла из многочисленных функций, обеспечивающих каждый кадр поворот Васи на энное число градусов исходя из текущих координат, координат тыка мышкой и положения Юпитера — а после моих махинаций добавилась туча проверок: а поворачивается ли Вася? а повернулся ли он до конца? а стоит ли ему уже идти или лучше пока постоять, как бы чего не вышло? Обпроверялись. Ну не поворачивается он до конца. Тьфу.

Тогда я узнал, что существует специальное окошко, куда можно через код выводить всякие сообщения вроде «Вращение завершено», «Позиция объекта — три по X, ноль по Y, два по Z» или, если уж совсем коротко, «Здесь (вот конкретно здесь!) был Вася». Окно сие зовётся консолью. Я повтыкал в многострадальный скрипт, управляющий Василием, таких сообщений. На каждую команду в коде приходилось по две штуки, на всякий случай, вдруг одно затеряется. Запустил. Открыл консоль. Выверил. Всё логично. Всё так и должно быть. А Василий один чёрт до конца не поворачивается. Сволочь.

Тогда я плюнул, сдал Василия в папку-василиеприёмник, назвал её в честь своих страданий «Вот, новый поворот» и забросил подальше в анналы жёсткого диска. Фиговый, подумал я, из меня программист на Unity. И пошёл рисовать редизайн одного радио, какого, не скажу, а то вы догадаетесь.

Сегодня Василий был откопан, очищен от пыли и торжественно водружён на пьедестал в оперативной памяти компьютера. Ну, подумал я, чего же такого красивого — и забывать? Потом вспомнил про свою проблему, погрустнел и стал копаться дальше.

Совершенно случайно причина проблемы нашлась, где не ждали.

В самом начале скрипта про Васю есть строчка, проверяющая, кликнул ли юзер мышкой по поверхности. Если кликнул — Вася просыпается, поворачивается и идёт. Без такой строчки Василий бесконечно вращался бы в одной точке, как дервиш, и не мог бы двинуться с места, потому что не знал бы, в какую сторону.

Причина оказалась прозаичной: поворачивался Вася только в то время, пока была нажата левая кнопка мыши. Стоило её отпустить — и Вася поворачиваться переставал. Если времени, в течение которого была нажата кнопка, ему не хватало, чтоб до конца повернуться — Вася начинал идти боком. Ему было неважно, как идти: он же компьютерный.

Мораль: не поворачивается Вася? Зри в корень.

Вася (не тот) в эпизодической роли: Вася умер

Комментировать

Комментировать

10 комментариев