BIOSHOCK THE COLLECTION

На PS4 вышла «BIOSHOCK THE COLLECTION». «Биошок» мне нравился своей новизной, необычностью, продуманностью, ощущающейся глубиной мира и атмосферой. Но на ПК я играл в игру вполглаза (на ПК я вообще во все, кроме Crysis и King’s Bounty играл вполглаза), кажется, даже не прошел. На PS3 играл углубленнее, но кажущийся поломанным баланс между сложностью и странной шутерной боевкой заставлял переключаться с уровня сложности Hard на Medium, а то и на изи. В итоге — на фиг плазмиды, бошки крошишь гаечным ключом, по углам не шаришься, пробегаешь игру налегке, материшься на финальном боссе и поскорее начинаешь играть в другой шутер, в котором все правильнее и четче. Из-за этого казалось, что в игру я полностью не погружался, что лишался чего-то важного, было как-то не по себе.

Но тут пронесся слух, что игра выходит на моей любимой PS4, внутри все зачесалось; «погружусь», приговаривал я в ожидании. Релиз откладывался, вернее, даже непонятно было, когда же. НА ПК переиздание уже вышло, ПКгеймеры вовсю материли его, некоторые материли и PS4 версию, что было удивительно для меня, потому как PSStore игру зажимал до последнего. Испытав наконец детское удовольствие траты денег на так нужную игрушку, запустил. Играть решил сразу на сложности Survivor. Но через пару миссий дал слабину, переключился на Hard, прошел еще одну миссию, понял, что не по-задротски это, и начал новую игру снова на Survivor.

И вот тут я понял, что в Bioshock играть нужно строго на Survivor. Потому что весело раздавая звездюлей налево и направо гаечным ключом пробежать игру просто не получится — даже какая-то вшивая алкоголичка убивает тебя несколькими ударами, а уж если ты встретился с нитросволочью, гаечным ключом лучше начинать стучать по голове себе, а не ей, чтобы не мучаться. Заглядываешь в каждую щель, слушаешь каждый дневник, собираешь каждый доллар, цепенеешь от счастья, когда удается одним только электрическим разрядом плазмида умертвить сразу трех гадов, замираешь от страха, когда жизни осталось всего чуть-чуть, а надо «кровь-из-носу» взломать Security Bot, чтобы он удачно пристрелил ту самую нитросволочь, которая тебя обязательно бы закидала своим дерьмом до смерти. Под конец (не без тоников, конечно) взламываешь ЛЮБОЕ, потому что ты крутой, эти трубки и сочленения — это больше не источник страха и нервов, это теперь источник низких цен и драгоценной жизни. Потом ты встречаешь своего первого Big Daddy, которого нужно умертивить. И понимаешь, что лучше бы десяток нитрогадов, чем эта огромная бешеная шняга, подгоняемая сестричкиным: «unzip ‘im, Mr. B! Unzip ‘im!» Но ты уже взломал две турели, и они за тебя. Они стреляют в бешеную шнягу, немного портят его, шняга ломится на тебя, раздолбав героические турели, но ты уже принес в проход, куда папочке нужно будет протиснуться, все баллоны с газом, что смог найти на уровне, и от взрыва этих баллонов Mr. B повреждается так сильно, что добить его получается проще, особенно, если стреляешь в него специальными бронебойными патронами.

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

А потом тебе дают арбалет. И первый хэдшот из него заставляет тебя пустить слюну.

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

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

И, как оказалось, никакой особой меткости и ловкости для игры на Survivor сложности не требуется. Я до самого конца так и не смог научиться попадать электрическим разрядом в летающего бота. Но если использовать все, что дается, если экономить боеприпасы, колотя по башке врага тем же гаечным ключом (потому что тоник и не один делает гаечный ключ очень мощной штуковиной), но не потому что лень искать патроны и «скорей уже пробежать», а потому что скоро будет сильный враг, которому мои патроны нужнее, чем этой алкоголичке, которой и ключа разводного хватит, то получаешь какое-то неизгладимое дополнительное наслаждение.

Был момент, когда я думал, что действительно застрял. Момент, когда ты убиваешь одного из главных парсонажей, оказываешься заперт на небольшом уровне и на тебя летят злые боты. Сохранятся в этой миссии почему-то не разрешают (пожалуй, один из самых неприятных минусов игры), если убили — слушай и смотри немаленькую катсцену заново. Я понял, что простым нахрапом и даже вламыванием ботов делу не помочь. А у каждого оружия есть три разных вида боеприпасов. И у моего любимого арбалета были электрические ловушки, которые втыкались в поверхность и протягивались веревкой до противоположной поверхности. Враг, натыкаясь на веревку, получал удар током. Развесив по всему уровню эти ловушки, я запустил триггер, который вызывал ботов, и просто смотрел, как они, натыкаясь на электроверевки, падают, как спелые груши с дерева. Ну, а если кто таки половчее, бота можно ударить и электрическим разрядом из руки, взломать его, и он будет сражаться с другими ботами. А можно и просто расстрелять их из дробовика электрическими патронами, если уж совсем ловкий, не то что я.

Про сюжет и говорить не стоит — очень круто и веришь, атмосферно и погружаешься, хихикаешь и сопереживаешь, уважительно киваешь и ахаешь, злорадно кривишься и умиляешься.

Из немногочисленных минусов отметил бы лишь респаун врагов (плохо это, когда нужно убивать одних и тех же, особенно, если это Sirvivor и совсем непростые враги). Понятно, что тут есть камера, которой нужно делать фотографии врагов, и может случиться ситуация, когда врагов больше нет, а фотографии все еще нужны. Вообще, во многих играх респаун — полезная штука, но, на мой взгляд, лучше бы делать его контролируемым. Выпилил врагов, погулял спокойно по захваченным территориям, пособирал лут, спокойно послушал аудио-дневники, получил награду — передышку после сложного боя, и, если по какой-то причине захотелось еще врагов, постучал разводным ключом по какой-нибудь специальной хреновине, отчего на звук сбежались бы (респаунились) эти самые враги.

Вот такая игра Bioshock. Не откладывая начну вторую часть. В нее тоже когда-то не удалось погрузиться до конца, в этот раз точно погружусь, чего и вам желаю.

14556707_10207645456682044_1934347333674826873_o

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

А не спеть ли мне песню

Недавно я узнал, что компания, которая разрабатывает нежно любимый мною игровой движок Unity3D, решила сделать мне приятно и уменьшить стоимость ежемесячной подписки за пользование их продуктом. Прямо сейчас затраты выглядят так:

2016-06-30_10-48-38

(На самом деле, вы-то платили бы 225 долларов, это я особенный и за iOS Pro плачу только 40).

До этого, где-то в 2011 году я приобрел Unity3D за 1500 долларов (и какие-то такие же цифры были для iOS и, если не ошибаюсь, Android’а). Этого оказалось мало, нужны были еще лицензии, и я подписался. Подписка-приговор от 14 марта 2014 года выглядела так:
2016-06-30_10-42-24

Проще говоря, это не подписка, а, как правильно заметили вчера, рассрочка. Компания грозила небесными карами, если вдруг клиент решал за движок больше не платить. Можно было даже найти слова: “коллекторские агентства”. Ну вы знаете.

Позже я обновил iOS часть подписки (потому она и дешевая для меня), потому что Unity 5, а не обнови, сидел бы на позорном Unity 4. И докупил в конце 2015 года подписку на андроид. Для не особо интересующихся (на фига тогда вы вообще это читаете?): “подписка на iOS Pro” означает, что на iOS, то есть, на айфончики, можно билдить с отключением юнитиевского прекрасного сплешскрина, который, правда, все равно старается просочиться в билд даже при наличии подписки.

Как становится понятно, 95 долларов в месяц я платил, начиная с марта 2014 года, что, как бы, должно означать, что тот 12-месячный план по отъему своих денег в пользу компании, которая производит замечательный движок Unity3D, я выполнил (и даже перевыполнил). Закрытие 12 месяцев не означает, что я могу совсем прекратить оплачивать подписку и оставить продукт себе, нет, как я понял (конечно, я способен ошибаться, делаю это очень часто, не исключено, что я ошибся и здесь), я могу без всяких коллекторов прекратить оплату в любой момент и освободить себя от ига компании, которая производит замечательный движок Unity3D (для не особо интересующихся: я так часто повторяю эту фразу, чтобы было понятно, что это ирония. И какого ляда вы все еще это читаете?), и от самого движка тоже.

Но прекращать подписку я не собирался, мне и так было хорошо. Вовсю мастерилась 3Д игра, которая таки выйдет, верьте мне. Недавно отвлеклись на 2Д, но тоже в юнити, скоро будет пушка, монстры и мясо. (Кстати, пауза, которую мы взяли, очень помогает нашей 3Д игре. Взгляд трезвеет, придумываются новые штуки, игра однозначно будет круче, чем задумывалась. Но потом).

И вот, компания, которая разрабатывает нежно любимый мною игровой движок Unity3D, решила сделать мне приятно и уменьшить стоимость ежемесячной подписки за пользование их продуктом. Теперь я должен буду платить не 190 (а вы — 225) долларов, а только 125. Оставим не очень вменяемый момент, когда, пользователи, платившие только 75 долларов в месяц, потому что им не были нужны ни iOS Pro, ни Android Pro лицензии, станут платить 125, на эту тему высказались тонны людей. Высказались так, что компания, которая бла-бла-бла, стала чуточку вменяемее и предложила тем, кто не зарабатывает больше 200 тысяч долларов в год платить только 35 долларов в месяц и за сам Unity3D, и за iOS Pro, и за Android Pro лицензии без сплешскрина. (Тех, кто зарабатывает больше 200, это не сильно обрадовало, но народ поутих).

Вообще, я отличаюсь какой-то особенно мерзкой безалаберностью в отношении денег. Балбес-балбесом, не коплю, не храню, веду себя в обращении с деньгами как недоразвитый. Но даже я задумался над таким предложением. Конечно, я хочу зарабатывать больше 200 тысяч в год. Конечно, я буду зарабатывать больше 200 тысяч в год (безалаберность-то моя никуда не денется, ей постоянно нужны деньги. Безалаберность — это не мое второе имя, это моя жена). Но прямо сейчас я не зарабатываю больше 200 тысяч долларов в год (фуу, нищеброд, сказали особо и не особо интересующиеся хором), поэтому сэкономить 155 долларов в месяц показалось богоугодным делом. Учитывая, что, например, Гия Заркуа живет только на полтора доллара в день, но при этом питается хинкали, хачапури по-аджарски и пьет исключительно D’Amalfi Limoncello Supreme, я подумал, что экономить — это не только богоугодно, но и хинкали.

И я пошел экономить в панель управления подписками.

Нашел кнопку, нажал, получил вот это:

2016-06-30_11-27-43

Вот это сказало, что истечет срок моей 12-месячной подписки только 1 декабря 2016 года. Это выглядит логичным, потому что в самой первой картинке поста стоит дата ее начала: 28 ноября 2015 года.

Но позвольте, начал я что-то подозревать, ведь я покупал подписку еще в 2014 году! И уж Unity Pro я точно оплатил полностью! Возможно, дело в том, что я не могу отменить только подписки на iOS Pro и Android Pro, потому что они (хотя я сильно так сомневаюсь по поводу iOS Pro), начались только в конце ноября 2015 года и их 12 месячный срок еще не вышел. Но тогда как отменить подписку на Unity Pro, если, к примеру, я решил от него отказаться совсем, и выплачивать дань только за iOS Pro и Android Pro? К сожалению, даты оплат, начала подписок и вообще — история моих денежных взаимоотношений с компанией, которая …, скрыта в недрах моего аккаунта где-то очень глубоко.

Я написал письмо в саппорт. И мне даже прислали ответ.

2016-06-30_11-49-30

От меня часто отмахивались в жизни. По серьезным вопросам или нет. Да и от вас отмахивались тоже. Вы же бывали в паспортных столах. Вы можете войти туда и, если не издадите ни звука, можете простоять там весь день, работники стола будут больше заинтересованы дохлой молью за шкафом, чем вами. Но это был какой-то новый опыт.

Создалось впечатление, что сотрудник и не собирался вникать в проблему, а просто скопировал откуда-то из FAQ эти строчки и вставил их в ответ.

“ДА ВОЗЫМЕЕТ ОТМЕНА СИЛУ!”, в смысле “да едрит твою душу налево и направо!”. Подумав так, я написал новые слова. И даже получил ответ (что, кстати, немного успокаивает, я-то думал, что с их точки зрения проблема была решена):

2016-06-30_11-57-07Видимо, теперь мне нужно направить вопрос (англ.) на этот самый адрес, потому что этот сотрудник явно дал понять, что руки умывает. Зачем он есть, этот сотрудник, мне решительно непонятно. Очень похоже на ситуации, когда звонишь в какие-то российские сервисы, где ты вынужден не по разу объяснять одно и то же разным людям.

И вообще, странно, что у сотрудника нет доступа к истории моих закупок. Еще более странно, что этого доступа нет у меня.

Будем разбираться дальше.

Хотя какой-то небезалаберной чуйкой я понимаю, что мне ответят: что да, повышение подписки означает, что и главная подписка продляется на обязательные 12 месяцев, что вот так вот, что не мы правила устанавливаем, а так программа работает… И я соглашусь с этим, скажу “спасибо” и дальше буду платить эти 190 долларов (или не дальше, и меня переведут на 125 долларов раньше 1 декабря 2016 года, только интересно, эта подписка будет опять обязательной, и я застряну с Unity3D еще на 12 месяцев? Или как?) Эти вещи очень расстраивают, честно говоря.

Посмотрим.

Добавлю лишь еще немного отсебятины.

Вообще, вот такая система монетизации Unity3D кажется не просто порочной, а дьявольски порочной. Стоит тебе сделать первый платеж, и ты уже ПОПАЛ на большие деньги, а отказ платить сулит тебе головные боли и прочие анальные кары.

И ведь ситуация тут, как с налогами в России. Когда ты платишь большие деньги своему государству, ты закономерно хочешь наблюдать, как вокруг тебя будет изменяться мир. Дороги там, чистота, качество образования и медицины. Но платишь, платишь, а мир вокруг тебя не меняется. Местами все становится даже хуже. И начинаешь думать: а зачем я плачу эти налоги там, где они не улучшают жизнь вокруг тебя? Ведь я же не против их платить. Я готов платить даже больше, чем сейчас, да возымели бы силу они уже!

Но нет, изменения в Unity3D очень черепашьи, сравните релизы Unreal Engine и Unity3D, вы увидите, где реальный прогресс. Unreal Engine вообще по-настоящему дружественен к инди-разработчикам. Многое есть “из коробки”, ничего не нужно допокупать, как в случае с Unity3D. Пример? Пожалуйста: визуальное создание шейдеров в Unreal Engine организовано просто на каком-то волшебном уровне. А в Unity3D ты должен писать код, что, конечно же, очень “нравится” художникам. Да, можно купить Shader Forge, его автор вдохновлялся именно шейдеросоздавалкой Unreal Engine. Shader Forge — это очень годный продукт для Unity3D. Всего за 90 долларов. Редактировать геометрию в Unity3D (не тем наипримитивнейшим образом, который там “из коробки”, а полупрофессионально)? Конечно. Возьмите ProBuilder. Он похуже, чем редактирование геометрии в Unreal Engine (где, как вы поняли, оно “из коробки”), но зато стоит всего 95 долларов. Удобно же, можно за не очень большие деньги накупить плагинов и инструментов для Unity3D и сформировать тот игровой движок, который тебе нужен! Ну и что, что какие-то плагины рано или поздно перестанут работать с очередным обновлением Unity3D. Зато звучит красиво.

Вообще, подписка — это неплохо. Это очень хорошо, когда взамен ты получаешь качество за небольшие деньги. Я подписан на Creative Cloud за 1500 рублей в месяц. Что я получаю взамен? Photoshop, Premiere, Audition, годный Media Encoder, Illustrator, After Effects, Flash Builder. И это ведь совсем не все. Нужно ли говорить, что один только Photoshop по сложности и глубине гораздо превосходит Unity3D. И это за 1500 рублей, Антон Карлов! И отменить эту подписку ты можешь в любой момент! И, если я не ошибаюсь, остаток денег тебе еще и вернут.

А Unreal Engine тем временем вообще бесплатный. Да, придется отчислять 5 процентов от дохода с игры. Но разве это не выглядит честной сделкой? Нет денег — нет отчислений. Почему компания, которая делает Unity3D, старается взять с разработчика как можно больше денег ДО того, как разработчик выпустит игру? Я бы назвал это неуверенностью в своем продукте.

Как бы там ни было, Unity3D мог бы взять пример монетизации у Unreal Engine. Пользуешься чем хочешь, сколько хочешь, на сколько хочешь компьютеров. Но отчисляешь какой-то процент с дохода с игры. Зато никаких первоначальных трат. Конечно, сделать это лучше опционально, то есть, в дополнение к тем системам монетизации, которые уже есть.

Потому что имеется очень высокая вероятность того, что после 2Д игр я вернусь к своей 3Д игре и допиливать ее буду уже на Unreal Engine. Я часто так говорю, но однажды это нужно просто сделать.

Мне говорят, что в Unreal Engine тоже есть свои проблемы и косяки. Конечно есть! Но они бесплатные, а не за деньги, которые нужно обязательно платить в течении 12 месяцев.

Всего доброго.

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Билайн, ты всегда думаешь о нас

gepatit

С Билайном я давно. Лет 12 уже, не меньше. А то и больше. Любовь у нас особая, можно сказать — интересная. То они меня любят, то я их нет. Любят настойчиво, не отвяжешься. В начале двухтысячных, когда началась наша романтика, и я поставил подпись; чтобы выглядеть выше и солиднее определили мне прямой номер. В те времена я общался со многими людьми, мобильные телефоны были не у всех, и кому-то действительно было удобнее накручивать на диске телефона только шесть цифр вместо одиннадцати. Когда дисковый телефон стал признаком музея, надобность в прямом номере отпала вместе с памятью о нем, и я продолжал вкладываться в Билайн в размере 5 рублей в день в полном неведении. Потом вспомнил об этом, но Билайн сказал, что нет, нам нравятся твои 5 рублей в день, и либо теряй свой номер, либо продолжай чувствовать себя солиднее и вкладываться в Светлакова. Я не сильно расстроился, отложил проблему подальше, а потом и опять забыл о ней. Все оставались счастливыми. На днях вспомнил, намерен в ближайшее время ее решить. К тому же «с сохранением номера» теперь модное заклинание. А уж коли я теперь почти совсем асоциальный элемент и разговариваю с живыми людьми только по очень большим праздникам (когда говорю «меня не ждите»), отдавать полосатикам 5 рублей в день стало уж как-то совсем несолидно.

Но речь не о 5 рублях. Речь о мобильном интернете.

В целях сохранения моей любимой печени, врачи не стали одобрять мою поездку на DevGAMM, о чем я сильно жалею, уж больно вкусно о нем рассказывают, воткнули в меня трубочки и закачали разные дозы разных веществ. Под капельницей размышляешь о разном, более того, с удивлением обнаруживаешь, что ты вообще все еще можешь размышлять. Но занятие это быстро наскучивает, а руки тянутся к планшетику. В планшетик я еще во времена удаления желчных пузырей засунул сим-карту Билайна с тарифом «Безлимитный интернет в размере 50 гигабайт». За почти 700 рублей. Скорость была так себе, но «Утиные истории» и порно показывало приемлемо. В этот раз показывало плохо, скорость была как во времена дисковых телефонов. Сам тариф на сайте Билайна с этой чудо-опцией «50 гигов» был сверху до низу обмазан Светлаковым с пометками «4G» то,  «4G» сё. «Карта покрытия» показала, что мое место под капельницей полностью накрыто «4G» и порно должно радовать еще даже больше, чем раньше. Но не радовало. Ну и ладно, подумал я опять. Но в ту же самую больницу вскоре поместилась моя родительница, которой мегасимка перешла по наследству в ее айпад. Скорость стала как будто даже еще хуже. И я понял, что пришла пора звонить, так как если я торчал в больнице всего по нескольку часов, мама моя с ее ежегодными профилактическими возлежаниями находилась там круглосуточно, и возвращение в теплый и безотказный уют домашнего вайфая, как в моем случае, ей в ближайшее время не грозило.

И я позвонил.

Телефонный робот Билайна смешной. Если слушаешь его впервые. Я слушал впервые (как оказалось, я нечасто звонил работодателям Светлакова). Взбодренный его шутками, рассказал историю своей жизни девушке и добавил, что, мол, есть у меня два номера, один, с которого я звоню, а другой в планшете, и никогда я не видел никаких «значков LTE», хотя девайсы у меня правильные, да и в настройках LTE выбран. Вообще, сказала девушка, оно и понятно. Чтобы LTE был, мало его выбрать в телефоне, в телефон нужно воткнуть правильную сим-карту. Поезжайте в любой офис Билайна с паспортом. Там есть офигительно правильные сим-карты.

Сказано. Сделано.

«У меня есть две сим-карты. Они не умеют работать с LTE. Но очень хочется. Говорят, у вас можно стать счастливым». Мудрые глаза девушки за стойкой обнюхали меня с ног до головы, а ответ был кратким и емким: «кончились». Я вышел из любого офиса Билайна и пошел искать другой любой офис. В другом офисе девушка была не менее мудрой, но чуть более менее емкой, можно сказать, веселой. «А у вас на тарифе не подключена опция LTE!» — радостно сообщила она, распаковывая правильные нано-симки. Я поцокал языком, мол, вот ведь, она перенесла старые номера на новые нано-симки, я поставил крестик вот тут и с обратной стороны, засунул новую сим-карту вместо старой в свой айфончик и перезагрузил (так, типа, надо). После пяти минут тыкания в настройки, отключения сотовых данных, включения их назад и тупого глядения в экран, в верхнем правом углу зловеще продолжали светиться символы «3G». «Э-э-э,» — спросил я девушку. «А у нас тут нету LTE!» — радостно закричала она. — «В этой зоне нету никакого LTE!» Я поскорее ушел из этой зоны и повез вторую симку маме. Пока вез, колдовал с настройками, но, не смотря на то, что по моим расчетам, мы покинули Зону, «3G» если и менялось, то только на позорное «Е». Нетрудно догадаться, что и у мамы на планшете никакого «LTE» так не появилось.

На следующий день я позвонил еще раз. «Нажмите ноль» не сработал, пришлось слушать робота еще раз. Девушка мило промурлыкала: «А у вас на тарифе не подключена опция LTE». Я почувствовал, как внутри печени что-то зачесалось, и услышал, как далеко на Камчатке в лесной сторожке под сенью дикого березняка беззвучно плачет бывший сотрудник Билайна Михаил. «Э-э-э,» — сказал я. «Хорошо, подождите, пожалуйста, минутку». Она тихонько сопела в трубку (или куда там сопят сотрудники Билайна) и стучала по клавишам. «Все, теперь можете наслаждаться быстрым интернетом на своем телефоне». «А вот еще один номер, и там бы», — удивился я. «Хорошо, подождите, пожалуйста, минутку», — вновь засопела она. В этот раз она сопела гораздо дольше. «Странно», — сказала она, и Михаил всхлипнул. «Почему-то не получается подключить на этом номере…»

В общем, теперь сижу и жду, когда Билайн починит тариф, который у мамы на планшете. Заявочку оставил, специалисты свяжутся. Что-то подсказывает мне, что нужно будет съездить в любой офис Билайна еще раз.

Что касается LTE на телефоне, да, значок наконец-то появился. Правда, скорость, судя по замерам, не изменилась. Никак не 10-20 мегабит в секунду, как обещано, а 3-5, как обещано для 3G. Ну, это же неважно. Зато значок говорит всем вокруг, что у меня LTE. А что у меня прямой номер, я и вслух могу сказать.

 

P.S. К вечеру на планшете были замечены заветные буквы LTE. Скорость возросла, правда, остаток дня LTE светофорил с 3G. С сегодняшнего утра пока больше не светофорил, что не может не радовать.

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

lte

 

P.P.S. Вчера в фейсбуке отписался человек из Билайна, предлагал помощь. Вот об этом я и говорю — интересная любовь.

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Как я ушел из Asset Server на GitHub

Как только я начал делать Verge, сразу же встал вопрос о системе контроля версий. Опыта с такими системами у меня было немного, всего лишь GitHub, который я использовал при работе над Cover Orange: Journey, в целом это меня устраивало, но в те далекие времена гитхаб с юнити не очень дружили. Поэтому я был открыт для нового. Конечно, работай я один, можно было бы обойтись и без такой системы, но времена разработки в одно лицо прошли очень давно, а системы контроля версий, даже если вас всего двое, во многом облегчают жизнь.

Возможно, вы не знаете, что это. В двух словах: внесли вы изменения в код, изменения эти были некой вехой (починили злой баг, прикрутили новую возможность, а то и просто — сделали рефакторинг или написали камменты к классу), и эту веху неплохо бы зафиксировать на случай, если вы пожелаете отменить свои следующие действия с кодом, если что-то пойдет не так. Немного простых заклинаний, и эти изменения уходят на удаленный сервер, где хранится ваш проект и все предыдущие сделанные в нем (и посланные на сервер, разумеется) изменения. Программа-клиент на вашем компьютере позволяет видеть список всех изменений, просматривать сами изменения (причем, не просто новую версию измененного файла, а именно — изменения, которые вы внесли), откатываться на прежние версии файлов, создавать новые ветки изменений (к примеру, вы хотите попробовать что-то, что не хотелось бы применять ко всему проекту сразу, вы можете сделать новую ветку изменений, вести работу там, возможно даже кардинально переделывая проект, при этом главная ветка, где находится основной проект, будет нетронута. Пока, конечно, вы не захотите этого). Одна из главных особенностей системы — это то, что к проекту на удаленном сервере может  быть подключено несколько человек, и каждый из них будет отправлять свои изменения (или дополнения) в него. Конечно, возможны конфликты, если двое изменяют один и тот же файл, но, как правило, все это без проблем решается системой.

Все это очень, повторюсь, облегчает. К примеру, у вас есть дизайнер уровней. Без системы контроля версий у вас и у дизайнера на ваших компьютерах было бы два обособленных друг от друга проекта. И вот дизайнер изменяет какой-то уровень. И, конечно, хочет, чтобы и вы этот уровень увидели. Что он должен сделать? Во-первых: вспомнить, какие изменения и в каких файлах он для этого сделал. Во-вторых: аккуратно собрать обновленные файлы и отправить вам. С инструкциями, конечно, где что заменить. В-третьих: материться вместе с вами, если оказалось, что среди отправляемых файлов есть файл, в котором поковырялись и вы тоже! Последнее может оказаться самым болезненным, так как, как правило, глядя на код сложно на сто процентов быть уверенным, что изменения в нем делались только там, куда вы сейчас смотрите.

Как дело обстоит с контролем версий? Дизайнер уровней, закончив свои правки и решив отправить свою веху вам, открывает программу-клиент, которая услужливо подсказывает, в каких файлах и где именно в этих файлах были сделаны изменения.

g1

Вот такую картинку дизайнер уровней увидит, если запустит программу SourceTreeЯ создал проект, состоящий из одного пустого файла file.txt. На сервере он хранится именно в виде этого одного файла. Теперь на своем компьютере я вписал в этот файл строчку «новые изменения». Программа постоянно мониторит изменения, которые произошли в папке проекта и, если они есть, вносит их в Uncommited changes (верхняя стрелка). Если дизайнер уровней утром открыл программу и увидел эту строчку, значит ему не приснилось, что он сделал что-то важное с уровнем вчера, и самое время посмотреть что же именно. Нижняя левая стрелка указывает, в каком именно файле произошли изменения. Правая — какие именно изменения в этом файле произошли. Левее строки «новые изменения», вы видите +, что означает, что в файл была добавлена новая строка.

Теперь пришло время отправить наш уровень на сервер. На панели инструментов находим кнопку Commit. Программа покажет новое окно:

g2

Все, что нужно сделать, это пометить галкой файл file.txt (он переместится в staged files), написать пояснения к изменениям и нажать кнопку Commit.

g3

Под полем с описанием коммита есть галочка (закинуть изменения на сервер немедленно), если ее поставить, по кнопке Commit изменения тут же уйдут на сервер, если нет, то только в локальный репозиторий проекта, а чтобы отправить их таки на сервер, нужно будет потом нажать на кнопку Push.

g4

Теперь строки Uncommited changes у нас нет, потому что изменения уже закоммичены. Называются они так, как мы их назвали в поле описания, и они теперь всегда будут отображать свое содержимое — файл file.txt, в котором я сделал новую строку.

g5

Я сделал еще некоторые изменения в «проекте». На картинке вы можете видеть, что они заключаются в том, что я добавил новый файл file2.txt,  и сделал изменения в нашем первом file.txt. «Минус» слева от первой строки означает, что строка была удалена, и ниже две строки были добавлены (они начинаются «плюсом»). Я могу послать и эти изменения на сервер, но потом, если вдруг окажется, что они мне не нужны, могу отменить их и откатиться на прежнюю версию проекта, где file2.txt еще не было. Также, если изменения были сделаны по ошибке, или я решил от них отказаться, я могу выделить файл и сделать Discard. Это полностью отменит изменения в этом файле, и он, соответственно, перестанет отображаться в Uncommited changes.

После того, как дизайнер уровней отправит свои изменения на сервер, я могу применить их на свой локальный проект (утянув новые изменения с сервера всего одной кнопкой), причем, меня совершенно не заботит, что именно сделал дизайнер, какие файлы были изменены, программа все сделает сама, избавив меня от необходимости принимать от дизайнера определенные файлы и раскидывать их по определенным папкам.

Если я попытаюсь принять изменения, которые конфликтуют с моими (например, кто-то, кто тоже подключен к нашему проекту, отправит изменения в файл file.txt до того, как это сделаю я), программа заботливо скажет об этом, укажет конфликтный файл и даст возможность сделать merge — объединить изменения — если это возможно или же сделать это вручную, благо вы будете знать номера строк, где они были сделаны другой стороной. Это, и многие другие возможности этой системы я тут описывать не буду. Во-первых: это за рамками этого поста. (А во-вторых: я не очень-то профи в этом высшем пилотаже. Больше того, меня уже половина пользователей систем контроля версий заплюет за этот пост, потому что они не пользуются программами клиентами, а работают в командной строке. Таких людей я очень уважаю и немного боюсь.)

Как бы то ни было, начав работать с юнити, я стал пользоваться системой контроля версий под названием Asset Server. Эта штука встроена в юнити (небесплатно, конечно, точно не помню, но что-то около 500 долларов, не знаю, как сейчас). Штука эта оказалась весьма примитивной, непростой в настройке, а в довершение ко всему еще и медленной. Для нее пришлось заводить сервер на Azure, чтобы там работал сам сервер системы контроля (дополнительные траты), чтобы он вообще заработал там также пришлось помудрить. В работе Asset Server очень нестабильный, иногда (мы уже почти поняли, когда это происходит, и это очень грустно) он отправлял все изменения на сервер, хотя требовалось отправить только пару файлов, бывало, что ему казалось, что проект у нас совсем пустой и нужно скачать все изменения заново. А это очень болезненно, потому что скачивает изменения с сервера он с крайне черепашьей скоростью (и дело тут не в ширине интернет-канала), а когда проект начинает весить гигабайты, полное скачивание проекта с сервера может занять долгие часы. В довершение ко всему хваленый юнитиевский Cloud Build (когда билд проекта для разных платформ собирается на серверах юнити) не работает с юнитиевским же Asset Server. Не то чтобы я хотел Cloud Build, но это стало последней каплей.

Камрады уже давно и успешно пользовались GitHub для своих проектов на юнити, несколько дней назад я понял, что время настало. На github.com вы регистрируетесь, платите несколько долларов в месяц за то, чтобы ваши репозитории были приватными (если вы работаете в открытую и не скрываете свои исходные коды ни от кого, тогда никаких денег тратить не придется), создаете репозиторий и указываете при создании, какого типа нужно сделать специальный файл .gitignore. Файл этот нужен для того, чтобы система контроля версий не возбуждалась на изменения в каких-то конкретных файлах. Например, сам проект юнити состоит из двух папок: Assets и ProjectSettings. Также есть папки Library, obj и Temp, где юнити хранит всякую вспомогательную информацию для проекта: временные файлы, кэш шейдеров, различную метаинформацию, билды каких-то библиотек. Изменения в этих папках нужны только для локальной машины, отправлять на сервер их ни к чему. Но системе контроля версий об этом нужно сообщить, для чего и предназначен файл .gitignore. Возиться с его созданием при создании репозитория на github вам не нужно, тамошние ребята сделали удобно:

g6

Просто выберите его из списка.

После того, как вы создали пустой репозиторий на github, самое время перенести туда свой проект на юнити.

g7

Для этого нажмите кнопку Clone в SourceTree, нажмите кнопку с изображением земного шара (Source Path), войдите в аккаунт (если программа не предложила этого раньше) github, укажите Destination Path — папку, где будет храниться репозиторий проекта, и нажмите Clone. Проект с github будет склонирован на ваш компьютер. Теперь самое важное. Откройте проект, который нужно перенести на github, в юнити. Нужно кое-что настроить. Откройте Edit -> Project Settings -> Editor. После чего сделайте в строчках, на которые указывают стрелки, так:

g8

Юнити на какое-то время призадумается, дождитесь окончания этого процесса.

Затем откройте папку проекта юнити и скопируйте в папку, куда вы только что склонировали проект с github, папки Assets и ProjectSettings (и файлы, которые вы лично создали вне этих папок, если такие есть). После чего возвращайтесь в SourceTree, который покажет вам в Uncommited changes все файлы вашего проекта. Жмите Commit, пометьте галочками все файлы, пишите что-то в описании коммита и делайте коммит. Потом жмите Push, чтобы отправить эти изменения на сервер. Возможно, если ваш проект большой, придется подождать.

После этого возвращайтесь в юнити и в меню выберите «открыть проект», укажите папку, куда вы скопировали папки Assets и ProjectSettings, после чего юнити снова задумается на некоторое время. После чего, собственно, все. Возможно, после того, как юнити импортирует все файлы заново, в SourceTree появятся Uncommited changes, просто закоммитьте их на сервер.

И некоторое добавление: если вы создадите новый префаб, новую сцену или просто добавите файл в библиотеку юнити, в Uncommited changes вы увидите сразу два файла, файл того, что вы создали и такой же файл с дополнительным расширением .meta. Отправлять на сервер нужно оба файла. В дальнейшем, когда вы будете делать изменения в этом файле, .meta в Uncommited changes не появится.

Вот и все. Можете подключать на github.com участников проекта (им тоже нужно будет зарегистрироваться на сайте). Им всего лишь нужно будет склонировать проект на свои компьютеры и открыть его в юнити. Конечно, в самом начале, перед отправкой проекта на сервер github, вы должны убедиться, что все участники проекта отправили все свои изменения на сервер Asset Server, а вы их приняли, и что в процессе того, пока вы переносите проект на github, они не сделали новых изменений.

Сам я сделал это с нашим проектом пару дней назад, очень доволен, производительность выросла, по некоторым ощущениям выросла и надежность. Если кто-то задумывался о системе контроля версий, но руки не доходили, надеюсь, пост оказался полезным.

И спасибо @TimNedvyga за то, что надоумил его написать.

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Поиграл тут в Skyhill, Train Valley и Party Hard

Я не казуальщик, я люблю проходить игры полностью. Заработал недавно платину (собрав все ачивменты) в “Dishonored”. Выбил платину и в “Wolfenstein: The New Order” (а среди достижений игры есть такое: “Complete game on ÜBER”). Почти уже заработал платину в “Mad Max” (собрал весь лут на карте), но споткнулся об совершенно ужасное управление машиной, которое не позволяло выиграть многие гонки, отсутствие быстрого перемещения к гонке (из-за чего приходилось пилить километры, чтобы ее начать) и ландшафт, который цеплял автомобиль мелкими и неожиданными выступами, из-за чего гонка оказывалась запоротой. Поэтому пришлось отложить Макса на какое-то время. И я люблю небольшие игры. Если небольшая игра сделана хорошо и позволяет получать удовольствие от процесса, играю долго, зарабатываю новые ощущения, наслаждаюсь.

Поиграл тут в демку «Skyhill«. Обнаружил, что ловлю кайф от прокачки, радуюсь когда выпадает клевый лут, самодовольно крякаю, когда ловко валю какого-нибудь гада и не получаю значительных повреждений. Но вот второй раз увидев «Новая игра» в главном меню, понял, что не хочу запускать «Skyhill» в третий. Потому что придется начинать все с самого начала. Да, дадут какие-то пассивные и активные умения, которые иногда даже вредят, чем приносят пользу, но это дела не меняет: я не хочу начинать все с самого начала. И генерация новых комнат ситуацию не улучшает — наказание за смерть слишком жестокое.

Недавно имел разговор с Лешей Flazm‘ом Давыдовым про его «Train Valley«. Как по мне (весь этот текст про «как по мне«, я не могу говорить за остальных игроков, которым все это может “быть ок”. Из чего может следовать, что я заблуждаюсь во многих вещах, связанных с играми, и пора все это бросать и устраиваться менеджером по продажам на придорожный прилавок с дынями), в игре прекрасно все, кроме того, что она наказывает меня за ошибки самым жестоким образом: заставляет начинать уровень (в котором я уже мог провести не один десяток минут) с самого начала, не давая никакой возможности выкарабкаться из банкротства. Я выстраиваю свои железные дороги, делаю красивые развязки, творю! И в один прекрасный момент игра говорит: “бро, ты ошибся где-то. Давай-ка я все это сотру, и ты начнешь свое творчество заново”. Да не стану я начинать. Нету у меня времени (хотя, жизнь моя так устроена, что я могу играть и играю в игры 25-30 часов в неделю) на эти переигрыши. Есть другие, которые не заставляют тебя переигрывать снова и снова одно и то же. Даже если тебе нравится это одно и то же. Даже если будут вариации (в виде сгенеренного заново ландшафта). Это одно и то же, это боринг. Надеюсь, что Леша учтет мои пожелания, потому что желаю ему только лучшего в общем и еще лучших продаж в частности.

Я могу ошибаться, и вполне может случиться так, что в полной версии игры “Skyhill” все не так, что там есть сюжет, что там нет возвращения к самому началу, что есть какие-то чекпоинты и возможность пополнить здоровье или немного утолить голод поедая убитых монстров или глодая ножки столов (чтобы была возможность в каких-то точках немного восстановить здоровье так, чтобы опять появился смысл играть дальше. Баланс, конечно, в этом случае нужно соблюдать еще лучше). Если же нет, то в голову приходит только один совет: не сбрасывать прокачку героя. Тогда, конечно, это уже будет не “новая игра” в главном меню, а как-то иначе, но зато каждый сеанс будет определенно вносить лепту в общий прогресс игры. То есть, вот я проиграл во второй раз, дошел до 81, кажется, этажа. Каких-то новых умений для третьего раза мне не дали, весь мой прогресс ушел вникуда, второго раза как будто и не было (хотя досада осталась и минут 15 из жизни стерлись). Сейв, кстати, не помог бы, если я где-то на 80 этаже, и у меня 20 здоровья и голода, я однозначно умру, сохраняйся не сохраняйся.

Почему недавно я бросил “Alien: Isolation”? Потому что отсутствуют чекпоинты, и игра отбрасывает тебя очень далеко назад и заставляет заново ползать по тем же коридорам (хотя она и сама-то далеко не короткая). И ты уже не испытываешь новые ощущения, а ругаешься на Чужого: “давай, скотина тупая, уходи уже! мне в третий раз надо пытаться открыть эту чертову дверь, а до нее еще нужно добежать!” Почему я бросил “The Evil Within”? Да все потому же — загрыз меня очередной гад, игра загружает очень далекий чекпоинт и под злобненький смех геймдизайнера я обнаруживаю, что меня отшвырнуло черт знает куда и нужно заново прибивать уже неинтересных (и кривых) врагов.

Смотрел недавно летсплей тоталбискита. Играл тоталбискит в “Party Hard”. И был момент, когда на главного героя набежала какая-то тетка и запинала его каблуками до смерти. Вот так ни с того ни с сего игра заставила бедного летсплеера проходить уровень с самого начала. С самого начала убивать этих пиксельных сволочей. А их десятки. Тут, конечно, просто помог бы обычный сейв. Можно, чтобы игрок не испортил сейвом ситуацию навсегда, не давать сохраняться, когда по сцене шныряет полицейский. Вот тогда я прошел бы игру и получил бы удовольствие. Пусть не за 10 часов, а за час-два, но я прошел бы ее. Если есть вера в сумасшедших хардкорщиков, всегда можно сделать режим, когда вообще есть только одна жизнь на игру и начинать после смерти нужно с самого первого уровня. В таком режиме я бы не играл, я бы играл в easy с возможностью сейва, но и хардкрощики были бы счастливы вместе со мной.

Вспомните “Super Meat Boy”. Там уровни быстрые, скоротечные, начинать их с самого начала — это не слишком облом, нет жесткой фрустрации после проигрыша (хотя, финальный забег в конце каждой части таки может ее вызвать, но это простительно, он не слишком длинный). Хоть она и хардкорная, но относится к игроку с уважением. Представьте, если в случае смерти она заставляла бы играть уровни с самого начала чаптера, а их в чаптере несколько десятков. Время относительно, кто-то может себе позволить такие забеги, кто-то нет. Как по мне, удовлетворять нужно и тех и других. Я не думаю, что разработчики этих игр скажут: “эта игра для хардкорщиков, не для тебя, не играй в нее”. Но я-то хочу в них играть, мне нравится процесс, дайте мне возможность.

Я не казуальщик, но я и не сумасшедший хардкорщик (очень уважаю их, должен добавить). Я люблю получать удовольствие от прохождения игр, играю долго, зарабатываю новые ощущения, наслаждаюсь. Не прерывайте этот процесс однозначными жесткими наказаниями в виде полного сброса прогресса, заслуженного в течении долгого времени, это убивает удовольствие, а новые ощущения уничтожаются приземленной досадой, и приходится закрывать игру и уходить искать наслаждение к другим разработчикам. Пожалуйста.

Всем пеас!

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Простои

Некоторое время назад я выбыл из строя, после определенного возраста у людей иногда заканчивается срок годности. Чинился почти два месяца, потерял некоторые запчасти, но, вроде бы, гарантию продлили.

Блог тоже решил поломаться пару дней назад. WordPress обновился, и блог сказал, что больше не хочет. Чинить так чинить, решено было сменить еще и хостера. Теперь GoDaddy. Быстрый, местами удобный. Посмотрим. Во время поисков обнаружилось, что популярные хостеры делают свои сервисы для инопланетян.

С FDG Entertainment вовсю готовимся к GamesCom. Меня там не будет, врачи пока не велят, зато FDG покажут там Verge. Игра, конечно, еще не финальная, в демке на выставке сюжета не будет, но побегать-поиграть можно будет вполне. Для этого запиливаю специальную версию с самыми годными уровнями.

Дел много. Нужна эта самая версия, какие-то преверсии для рейтинг-группы (которые ищут свастики во всем, что им дают), трейлер (КАКОЙ ТРЕЙЛЕР??? У нас и клон не валялся!), скрины, лого… Все делается в спешке, конечно, это нехорошо, но уже пора вылезать из под плинтусов. Пусть и так скомканно.

Да, игра про клонов, как написано в блоге игры. Расскажу позже.

Verge_FirstScreenshot

 

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Why so serious?

Внимательные читатели блога наверняка заметили, что мой профиль, профиль Владимира и даже профиль FDG — казуальные игры. Физические паззлы, развеселенькие персонажи и всякое такое. А тут, стало быть, такие мрачные цвета, ржавая кровать, жутковатое помещение и повязка на глазах у такого же, не слишком вселяющего радостные эмоции, героя.

Для начала, я расскажу, как мы с Владимиром пришли к идее создания 3Д паззла от первого лица. Мы большие поклонники игры Portal (а кто нет?), а если покопать поглубже — паззлов в принципе. Именно поэтому почти все игры, которые создавались с момента начала пути по дороге вымощенной желтым кирпичом с указателем «Геймдев — туда», были паззлами. С бросанием кубиков, с какой-то физикой, с «из точки А в точку Б» и вариациями, осознанием того, что очень много физических объектов на экране — это к тормозам, и что физика в большинстве случаев только притворяется физикой, и сбросить один треугольник острием на острие другого треугольника так, чтобы первый треугольник не падал, в физике компьютерных игр гораздо проще, чем в реальной жизни, с первыми опытами изменения гравитации… (Ну ладно-ладно, моей первой игрой был «Гвоздоноид», и он не про физику и паззлы.)

Но с паззлами в 2Д мире стало тесно. Больше того, 3Д выглядело чем-то «серезным», большим делом, «по-взрослому». А еще срочно требовалось залить себя чем-то новым, последние игры были самоповторениями, удовольствия в разработке не приносили, становилось грустно.

Помнится, как в декабре 2013 года мы с Владимиром отвлеклись от андроидной версии Cover Orange, и стали сочинять новую механику для 3Д паззла. Дырки в стенах, в одну из которых входишь, а из другой выходишь — это круто, но это было. Изменение гравитации или физических свойств объекта — тоже. Повторять игровой механикой другие игры совершенно не наш путь. Скоро игровая механика созрела, и мы начали прототипировать уровни. Выглядели они вот так (кстати, именно этого уровня в игре уже нет):

level

Об уровнях вам рассказывает Владимир, лишь с гордостью скажу, что они получились очень умными, и на каждом ты растерянно бегаешь из угла в угол и приговариваешь: «а как? а как?» Очень скучаю по такому чувству, очень за него благодарен Portal и Quantum Conundrum. И желание вызвать такое же чувство у тех, кто играет в твою игру, а еще и в 3Д пространстве и было основной причиной Verge.

Никакой истории, никакой комы, никаких повязок на глазах не было и в помине.

Пока я не сказал вдруг: «а если это будет игра про человека в коме? Который ищет из своей комы выход» Сказал и ужаснулся своей оригинальности. Сколько в играх уже перележало в коме людей? Сотни. И каждый искал выход. И всякий раз это было грустно. И мрачно. Может, и без повязки на глазах, но все-равно казалось, что Леди Оригинальность скептически поджимала губы. Так казалось, а оказалось, что игр не так уж и много, что не так уж и поджимала. Посчитав, что тема комы и интересного проведения в ней времени еще недостаточно полно раскрыта, мы остановились на коме.

Кстати, раньше это была не повязка на глазах. Раньше это была медицинская маска:

mask

Но персонаж выглядел совсем жутковато, а издалека напоминал инопланетянина. А сняли маску, намотали ему на голову тряпку (типа, слепой), и его сразу же стало жалко. (Кто назовет фильм, в котором слепого персонажа с повязкой на лице было жалко?)

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

Учитывая, что это наш первый опыт в создании 3Д игр, мы решили, что грустная и атмосферная игра у нас получится с большей вероятностью, чем, если бы мы стали сочинять юмор, смешных персонажей и нанимать комиков для их озвучания. Юмор отложили на потом, игра будет грустной, мрачненькой и с атмосферой.

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

Вот так.

 

(английский вариант)

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Как я работаю с триггерами в Unity

Unity (а Verge мы делаем в Unity3D) позволяет мастерить триггеры. Все вы знаете, что это за штуки. Для тех, кто не знает: триггер — это некий объем, который чувствует, что в него кто-то вошел, находится или вышел. Это нужно для того, чтобы игра умела реагировать на разные игровые события. Например, вешаем некий триггер (который может быть сферой, прямоугольным параллелипипедом или чем-то еще) на дверной проем и, если туда вошел игрок, правильно приготовленный триггер возбудится на это событие и доложит куда следует (обработчику событий игры или тому самому одному классу, в который вы пытаетесь запихнуть всю игру).

Триггеры работают прекрасно, пока вы не начинаете требовать от них всякий маразм. Мой маразм заключается в том, что объект, который вошел в триггер, не всегда может оттуда выйти, он может просто сгинуть посредством Destroy прямо в этом триггере. И события OnTriggerExit не произойдет. Если это какая-то дрянь, которая окрашивается красным, если в нее кладут, например, кубик, дрянь останется красной, если кубик уничтожить без выноса оного из этой дряни.

Честно говоря, в случае какой-то особенной дряни я не использую триггеры. Я использую функцию Physics.OverlapSphere, которая в нужный мне момент генерирует в нужной точке пространства сферу-триггер с нужным мне радиусом, после чего возвращает массив всякой фигни, которую эта сфера наперекрывала. Делать это я могу реже или чаще, обладаю относительно полным контролем, то есть. Мне почему-то кажется, что вызывая эту функцию реже, я экономлю какие-то ресурсы процессора. Скорее всего, это все шизофрения или, как минимум, менингит, потому что таких сфер я генерирую в количестве максимум 6 штук, ну что тут можно наэкономить?

Но есть ситуации, когда кастовать сферу для проверки какого-то объема нецелесообразно. Например, объем, который нужно проверить кодом, разный, а код один, или объем — плоский, и сфера сюда не подходит. Например, есть у нас торчащие из пола кусочки бумаги («что за херню делают эти ребята???»), если положить на них кубик, они войдут в него, как горячий нож в сливочное масло, а если вошел не весь кусочек, он будет неприятно торчать из кубика у его основания. Делать кусочек физическим — не круто, кубики должны ложиться на пол ровно. Было решено сделать кусочки триггерами, которые могут визуально пропадать, если почувствуют, что в их объем попал кубик. И все прекрасно, кидаем на кусочки кубик, триггеры кусочков, на которые попал кубик, генерируют событие OnTriggerEnter, в котором мы сам кусочек исчезаем. Если же у триггера случилось событие OnTriggerExit, кусочек появляем. Выглядит хорошо, пока мы не решим уничтожить кубик. Событие OnTriggerExit не сработает, кусочек, на котором лежал кубик перед уничтожением, не появится.

(Я только что осознал, что вполне могу получить комментарий, типа: «а, ламер, вот же событие, которое генерируется триггером, если в нем был уничтожен какой-то объект!» Как бы — конфуз. Ну и ладно, хоть кто-то научится чему-то из этого поста).

У триггера есть событие OnTriggerStay, которое генерируется, если в триггере что-то имеется. Как бы это дело и использовать? — подумал я.

Спустя какое-то время скрипения мозгом, придумалось вот что.

(Не густо придумалось, надо сказать.) Это переменные класса. Назначение смотрим ниже.

Ниже — функция OnTriggerEnter, которая будет вызвана, если в триггер что-то попало. Если триггер уже был активирован, ничего не делаем, возбуждаемся только если триггер неактивный. Первым делом активируем триггер флажком _isTriggered, а потом реагируем триггером на вход в него чего-то.

Функция FixedUpdate. Она вызывается движком перед обработкой OnTriggerStay функции (может быть вызван реже, чем Update(), которая вызывается каждый кадр, может чаще), если триггер активирован, просто сбрасываем флажок _isStay; собственно, эта функция нам нужна только потому, что она вызывается строго перед OnTriggerStay.

Функция OnTriggerStay, которая вызывается, если в триггере что-то находится (вызывается для каждого объекта, попавшего в триггер, но нас это не тревожит). Просто устанавливаем флажок _isStay в true.

Функция LateUpdate. Вызывается после (на самом деле, нет) обработки движком всех физических событий. Нас мало волнует так ли это, самое главное, что эта функция не будет вызвана МЕЖДУ FixedUpdate и OnTriggerStay. В LateUpdate мы проверяем — не тру ли наш флажок вызова OnTriggerStay. Если не тру, значит, OnTriggerStay не вызывалась, значит, в триггере ничего больше нет, реагируем триггером на выход (или на исчезновение) из него всех объектов. И сбрасываем флажок активности триггера.

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

Не знаю, почерпнули ли вы что-то полезное из этой простынки, и надеюсь, что в Unity это сделали.

Всем пис.

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Немного лжи (из блога игры Verge, русский вариант)

Расскажу, как мне в голову пришла мысль сделать игру такой, какая она сейчас (такой, какой вы ее еще не видели). Конечно, это будет ложь, и все было совершенно точно не так, и игра получилась такой в процессе унылых и неинтересных проб и ошибок. И только когда стало понятно, что она начала выглядеть созвучно сюжету, стало возможным натянуть на унылое и неинтересное что-нибудь более занятное, что я сейчас и сделаю.

Еще раз — это неправда.

Серьезно, не верьте мне.

Я никогда не был в коме. Я даже никогда не был под общим наркозом. Вернее был, но обеспечил его я сам себе в детстве, когда по собственной глупости получил по затылку угловой сталью советских детских качелей. Мне много рассказывают про тот день, я, оказывается, творил жуткие вещи, но для меня он остался монтажной склейкой пленки моего существования. С людьми, вернувшимися из комы, я тоже не встречался; в интернете пишут, что они видели какие-то сны, но подозреваю, что сны эти им показывали уже на выходе, а в самой коме было что-то другое. Или не было ровным счетом ничего. Именно с этого я и решил (это неправда, не забывайте) начать. С ничего. Ну, с почти ничего.

На самом деле, я абсолютно не уверен, что могу продолжать, и Филипп не убьет меня за разглашение.

Пойду спрошу, не уходите никуда.

 

(английский вариант)

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK

Первый пост (из блога игры Verge, русский вариант)

Добро пожаловать в блог о создании игры «Verge«. Бла-бла-бла, бла-бла-бла, бла-бла-бла.

Вот уже год мы мастерим игру про человека, который лежит в коме. Нет, это не симулятор человека в коме. А, может, и симулятор. Я не знаю, чем занимаются в коме. Возможно, бьют битой по пингвину, возможно, смотрят все серии «Стар Трека» на киргизском языке. Не исключено, что бродят по уровням и решают головоломки. Если знаете, напишите мне.

Мы — это два с половиной человека (на самом деле, три. На самом деле, нет.). И еще FDG Entertainment. Первый человек — это я, Евгений Кузьмин. Меня вы можете знать по играм «Ragdoll Cannon«, «Roly-Poly Cannon» и «Cover Orange«. Второй — Владимир Гусев. Его вы можете знать по играм «Roly-Poly Cannon«, «Cover Orange«, «300 Miles to Pigsland» и «All we need is Brain«. Половинка человека — Леша Бабай. Его вы можете знать по мультфильму «Кочет i курiца» (смотреть строго на работе в присутствии начальника). Половинка он потому что первые двое сидят в одной комнате и пилят игру из нее, а Леша работает с комнатой издалека. А еще совсем недавно к нам присоединилась Ressa M. Schwarzwald. Кто за что отвечает будет описано позже.

И еще есть FDG Entertainment. Их вы тоже можете знать.

Казалось бы, что все эти люди могут сделать из грустной идеи про человека в коме, который решает головоломки?

Оказалось, что могут сделать игру. И скоро доделают. А пока этого не случилось, постараются развлечь вас рассказами о разработке. Любая разработка — это скука большую часть времени, но остальную часть иногда выходит смешно и интересно. Про это и расскажем.

P.S. Посты могут делать разные люди, поэтому, если вы увидите еще одно «Добро пожаловать в блог о создании игры», это нормально, возможно это Филипп из FDG решил поприветствовать вас менее неформальным способом.

 

(английский вариант)

Tweet about this on TwitterShare on FacebookShare on Google+Share on VK