Доброго часу доби!
Я б хотів розповісти Вам про свої особисті відчуття про ігростру після року роботи над власним проектом.
До тих пір, як я вперше не доторкнувся до ігрових движків, я думав, що ігри робити просто і весело. Збирається команда з талановитих людей і в якісь певні терміни вони без проблем роблять гру, пишуть її код і заповнюють оточення красивими штуками. Та вже... з якогось боку це все вірно, проте я не очікував що в реальності все набагато складніше.
Ще раз нагадуюся, ця стаття - лише відчуття від знайомства з ігробудом, і розповідь про свій невеликий досвід.
Так от. Почалося все досить давно - в березні 2012 року. Саме тоді я вперше познайомився з ігровим движком, а точніше з тим, що там можна робити. А як виявилося, робити можна все! Для цього «всього лише» потрібне якесь знання мови програмування (JavaScript або C #). І ось тут то я і встряв - до цього я жодного разу в житті не програмував (редактор Warcraft III з його тригерами і Thinking Particles не в рахунок - тут зовсім інший рівень), навіть у школі ніколи не було уроків з програмування. Хоча, були, здається Pascal або щось подібне, але було це так давно і неправда, що всі знання з тих часів відлетучилися без залишку. Довелося лізти в інтернет за навчальними статтями та відео-уроками. Перший урок кожні 5 хвилин нагадував дивитися офіційну довідку за скриптописанням, і це правило мені дуже і дуже допомогло надалі. Ще повним шоком для мене була необхідність писати кілька рядків скрипту для зовсім вже елементарної речі - виходу з гри через Esc.
У підсумку, як виявилося, програмувати не так вже й складно. Головне розуміти логіку програми і мови програмування (до речі, мій вибір припав на C #. Він мені здався більш зрозумілим і гнучким). Мої перші вироби не відрізнялися особливою унікальністю - десь побігати, щось оглянути, кудись натиснути. Раз за разом я відчував себе все краще і краще в написанні скриптів, і в якийсь момент все настільки стало «рідним», що я практично без запинок і помилок писав один скрипт за іншим. І ось тут я загорівся ідеєю зробити щось грандіозне! Для початку досить невелике, але з багатим функціоналом - так народився проект, на який я витратив півтора місяці, чотири тижні з яких я був зайнятий написанням скриптів! Ось це було дійсно класно - однак я розумів, що цього мало. Так, я зміг реалізувати зміну дня і ночі, перемикання камер, безліч різних режимів «гри» і деякі інші фішки. Але весь функціонал був зав'язаний лише на використанні різних компонентів у редакторі, та й годі. Саме тоді народилася ідея створення повноцінної гри.
Ідея (тип) гри визначилася моментально - це буде гра типу Tower Defense. Так, звичайно не дуже оригінально, проте справжніх і повноцінних TD ігор (та ще й в 3D!) практично немає. Перші тижні розробки пішли на створення базової механіки гри, яка згодом не раз змінювалася.
Все-таки скрипти - це двигун гри, і без них красиві модельки так і будуть простими модельками, а розлючені селяни так і залишаться стояти в точці спауну (та й то без скрипту вони навіть не за-спауняться) в дурній позі бігу.
Прикинувши в голові, які мені будуть потрібні можливості біля вежі, я почав писати скрипти. Спочатку було написано два скрипти - перший дозволяв мобу (противнику) мати якесь певне здоров'я і червоніти в міру його зменшення, а другий саме відповідав за постріли біля вежі. Все б нічого, але ось вже дуже нерозумно виглядало те, як вежа завдає шкоди мобу, а снаряд до нього ще не долетів. Довелося правити... і надалі не раз повертатися до скрипту атаки для його модернізації. Але яка TD без можливості встановлення власної вежі? Ще один скрипт, і ми можемо ставити вежу в зазначеному мишкою місці. Через пару днів гра прийняла вигляд скріншоту вище, і настала пора зайнятися більш детальним опрацюванням гри.
І перше що було в списку завдань - змусити мобів йти заздалегідь заданим шляхом. Раніше я з цим жодного разу не стикався і з цим завданням мені довелося провозитися з пів дня, поки не згадав про Pathfinding. Ось тепер то гра заграла новими фарбами! З палаючими щастями я спостерігав за тим, як мої кубики бігли по новій карті, точніше по доріжці нової карти! Але тут то і з'явилися перші косяки з вежею - вона була просто не в змозі потрапити по мобу, та ще й в приціл вона брала тільки саму ближню до себе мету. Довелося міняти скрипти... вводити другий масив і робити вибірку за найдальшими, але в той же час в радіусі дії вежі, цілях. Порадівши правильній роботі скрипту, довелося повернутися до проблеми, коли вежі просто не потрапляли по надто далеких цілях. Ось тут то й стала в нагоді шкільна геометрія:Так, тепер на одне вселенське питання менше - математика з геометрією знайшла своє місце в житті. Повозившись з синусами, косинусами, кількома змінними і ввівши галочку «стріляти на випередження», вежі таки почали успішно потрапляти по цілях, де б вони не перебували! І для цього не було потрібно ніякої «автонаводки» - снаряди летіли по прямій до цілі і вражали її! До цього моменту гра набула досить красивого зовнішнього вигляду і в неї нарешті таки можна було пограти, хоча і всього 5 хвилин.
Але... чогось не вистачає. Дуже не вистачає. Грі не вистачало глибини - монотонний відстріл мобів не дуже цікавив гравців. Тут почали з'являтися перші задумки вже глобальної гри...
Перше, на що я зважився - це прив'язати гру до соціальної мережі. Це давало мені можливість «авторизації» користувача, щоб зберігати його рекорди і якусь іншу інформацію. Після цього думки пішли величезним потоком, вхопитися за який було іноді дуже складно.
Підсумком роздумів стало те, що у гравця буде власне поселення, розвитком якого він буде займатися весь вільний від гри час. Також з'являться три професії, по одній на кожен тип ресурсу (дерево - лісник, камінь - муляр, магія - маг). Вежі вже можна буде купувати не тільки за золото, а й за ресурси - на вибір.
До середини зими 2013 року, я намагався зробити працюючу гру з усіма наворотами, що придумав. Навіть анонсував закрите бета тестування, на яке підписалися 20 осіб. Розробка йшла своєю чергою, довелося шляхом навчитися роботі з MySQL + PHP. Довго було, складно було. Ще одним каменем на шляху став VK.API. Ох, скільки часу було витрачено на розуміння принципів його роботи... нагадаю, програмуванням я на той момент займався всього менше року, і досвіду було ще не так багато, щоб з ходу розуміти написане в довідці. Проте, хоч і із запізненням, гра вийшла на стадію ЗБТ, і люди вперше змогли в неї зіграти.
Очевидно, що перший млинець вийшов грудкою. Купа багів, неочевидні (але для мене то вони були очевидними, адже я все це робив) можливості, відсутність навчання і виразного розуміння того, що відбувається, змусило мене понервувати - гравці були не раді, хоча сама гра їм подобалася. Розробка йшла своєю чергою, тестери звітують про знайдених багах, деякі з багів оперативно правилися, інші - ставилися в «чергу». У той час я вперше відчув себе розробником - без участі тестерів, було якесь незадоволення тим, що я робив.
Але далі ставало тільки веселіше. Анонс ОБТ і сліпе бачення «закінченості» гри. Авральний темп роботи над проектом, часом спати лягав тільки о 3-4 годині ночі (займався грою у вільний час). Але тим не менш, були доопрацьовані багато важливих фішок проекту - редагування села, будівництво будівель, ринок, і багато чого ще. Додав в гру 4 ігрових рівня, тепер хоча б було у що пограти.
У свій день народження я вирішив відкрити доступ до гри всім бажаючим і подивитися на відгуки. У той момент було «готове» близько 70% ядра гри, і дійсно можна було допустити людей до тестування.
Результат знову виявився досить веселим - у всіх спостерігався один і той же погляд, пов'язаний з моїм рішенням трохи змінити одну з моделей, не перевіривши результат. У підсумку, коли всі починали гру, вони спостерігали склад у селі.
За два дні в гру зіграло 330 осіб, а за результатами опитування, середній оціночний бал виявився 7.82. Не знаю, добре це чи погано, але думаю, що можна зробити знижку на незакінченість гри і...
Концепція не кардинально, але змінилася. На основі проведеного тестування були виявлені слабкі сторони проекту. І один з найбільш очевидних - відсутність «автивного» геймлея. Гравці просто приходили в гру, запускали рівень і ставили скрізь, де тільки можна було, вежі. Потім йшли на кілька хвилин від компа, а після повернення їх чекав пройдений рівень і нагорода. Потрібно було щось змінювати...
Знову роздуми, обмірковування ситуації. Також багато хто скаржився на убогість інтерфейсу (зізнаюся, він дійсно виглядав убого), і потрібно було терміново вживати заходів.
Саме з цього моменту почалася «справжня» розробка. На основі накопиченого досвіду, були зроблені деякі важливі висновки, а гра перейшла на нову стадію - альфа версія. Бетою тут навіть і не пахло.
Перш, ніж продовжити, я б хотів дати пару порад розробникам-початківцям:
1) Насамперед - повне обмірковування ідеї та концепції гри, запис усіх можливих особливостей геймплея. Начебто це називається дизайн-документом, і я настійно рекомендую обдумати його перш, ніж почати розробку. Критично рекомендую.
2) Після складання дизайн-документа, подумайте про всі можливі модельки в грі. Складіть чіткий план з моделювання - що потрібно насамперед, а що може і почекати. Чіткий план завжди допоможе зорієнтуватися, коли втрачається нитка розробки.
3) Під час написання скриптів подумайте про «масштабованість» проекту. Передбачити місця, які могли б стати в нагоді в майбутньому і передбачте можливість їх використання поза тим скриптом, де ви всю цю справу пишете. Сподіваюся, думка була зрозуміла.
До речі, одним з дуже несподіваних етапів розробки для мене став інтерфейс. Ось вже чого не очікував - так того, що ним можна займатися вічно. Я почав переробляти інтерфейс наприкінці літа, і займаюся ним досі. Звичайно, не так активно, як міг би, але інтерфейс займає на диво багато часу. Це також слід врахувати багатьом розробникам-початківцям, адже часом вони навіть не замислюються про це так само, як я раніше не думав про прописування кнопки Esc для виходу з гри.
Зараз, напевно, озвучу ще одну очевидну думку, але - при створенні багатокористувацької гри (особливо для соц. мереж), намагайтеся робити якомога більше перевірок на сервері тих дій, що робить гравець. За час розробки я, звичайно ж, дивився на конкурентів. І величезні проблеми із захистом від злому у деяких з них були присутні.
Також дуже рекомендую для плавності дій використовувати інтерполяцію. У Unity3D практично будь-які змінні можна інтерполювати між друг дружкою (Mathf.Lerp (), Vector3.Lerp (), Color.Lerp () тощо), що дозволяє в кілька рядків перетворити інтерфейс, або різні рухи в грі. Чесно кажучи, це також стало одним з одкровень під час розробки.
Ну і остання думка: геймдів це складно. Це не райдужне вигадування «зомбі апокаліпсису з відкритим світом, World-PvP і пограбуванням караванів», це реально важке заняття, особливо для одинака. Потрібно дуже багато вміти (програмування, моделінг, анімація, володіння фотошопом, знання постефектів, шейдерів, інструментарію ПЗ, вміння створювати музику, красивий голос для озвучки і багато іншого), щоб поодинці завершити складний проект. Тому я зараз намагаюся залучити невелику суму на вітчизняному бумстартері - вже дуже мені не вистачає композитора, звукаря і перекладача. Мало кого цікавлять браузерні ігри, і не думаю що мені вийде зібрати потрібну суму. До речі, гру то я насамперед запущу на фейсбуку, і з ним так само буде багато проблем. Кажуть, без дорогого піару там буде дуже важко.
Дякую вам за увагу, сподіваюся, стаття вам сподобалася і можливо, ви візьмете на замітку деякі з моїх думок.