Привіт усім! Що ж, наша гра отримала зелене світло, а отже тепер можна повністю присвятити час роботі! І повірте, працювати є над чим. Як і кожні розробники, ми зрештою зіткнулися з потребою переробити значний кавалок гри. У нашому випадку йдеться про повне переписування системи пострілів.
Трішки теорії про невидимі стіни
Певен, у іграх ви часто натикалися на “невидимі стіни”, котрі змушують вас тримати обраного розробниками шляху. Дратують вони не самовито, згоден. Та зараз погляньмо яким же чином гравця замикають у меншому просторі, ніж бачить ваше око. В ігровому світі є Меші та Колайдери. Меш — це видима нами тривимірна модель. Колайдери, або колізії, — це невидимий об’єкт, який симулює фізичні зіткнення. Тобто крізь меш сам по собі ми спокійно можемо проходити, а от колізія — це якраз ота “невидима стіна”. Часто колізія не повторює форму меша. Це буває з різних причин. Наприклад, для того, щоби герой не застрягав. До речі, “застрягнути в текстурах” неможливо, застрягають саме в колізії! Також є триґери. Триґер — це теж невидимий об’єкт, але він не симулює фізику, а реєструє об’єкти, які входять в поле дії триґера. Фактично це така собі позначка, перетнувши яку, ми запускаємо певну подію у грі. Гадаю найпростіший приклад — це знайоме всім місце в NFS Most Wanted, де наша BMW ламається. Певен, всі його знають і багато хто пробував за допомогою чітів перескочити його =) Так от, там є триґер, який спрацьовує один раз, коли ми туди заїжджаємо на початку гри.
Суть проблеми
Раніше у нас була досить проста система пострілів. Коли гравець клацав лівою кнопкою мишки, створювалася куля (а точніше сферичний колайдер) в центрі камери. “Кулі” надавався імпульс, внаслідок чого куля потрапляла в ціль, завдавала пошкоджень і знищувалася. Цей спосіб дозволяв враховувати при пострілі земне тяжіння, вітер, дальність польоту та решту фізичних факторів. Та був у нього один недолік. У грі є зони аномалій, де блукає велика кількість зомбі. Ці зони позначені великим триґером. А в триґері кулі знищувалися. Тобто там фіксувалося зіткнення одразу, коли об’єкт створювався. Я не знав, як цього було уникнути, та й ризик був, що таке трапиться в іншому місці. Тому довелося повністю переробити систему пострілів.
Я обожнюю UE4
UE4 чудовий рушій! Реалізацію пострілів вирішено було робити за допомогою Line trace. Це проста лінія, яка реєструє перетинання її з іншими об’єктами. І що найважливіше, вона не фіксується триґером! Ба більше, лінія до всього видає досить багато інформації. Зокрема, фізичний матеріал об’єкта зіткнення, координати перетину та ще купу всякого. За наявності цих даних, є змога розійтися на повну. Далі нам потрібно реалізувати ефекти від пострілу. Звісно, постріл у воду має інший ефект, ніж влучання у метал. Для цього нам потрібно декілька масивів (масив —це впорядкований набір фіксованої кількості однотипних елементів).Три, якщо точніше: ефекти пострілу, фізичні матеріали та декалі. Кожний елемент масиву має порядковий номер. Нам потрібно просто при кожному пострілі здійснювати пошук по масиву з фізичними матеріалами, знайти, за яким порядковим номером знаходиться даний фізичний матеріал, та поставити відповідні ефект і декаль дірки від кулі в точці перетину Line trace з об’єктом. Система досить проста, але дієва. Більше того, можна зробити так, щоби куля пробивала певні матеріали. Не певен, чи це потрібно буде, але штука класна!
Замість висновків
Відверто кажучи, на словах воно дуже просто звучить. Але допетрати до таких речей самому деколи важко. Наступного разу будемо розмовляти про інтерфейс.
«Смертна кара» — щоденник розробки #3
Cподобалася стаття? Підтримай PlayUA
На платформі Donatello ви можете підтримати нас як одноразовим донатом, так і оформити щомісячну підписку. Усі наші підписники на Donatello отримують цифрові або фізичні приємнощі залежно від суми донату. Долучайтеся до нашої спільноти!