«Смертна кара» — щоденник розробки #4

Привіт усім! Що ж, наша гра отримала зелене світло, а отже тепер можна повністю присвятити час роботі! І повірте, працювати є над чим. Як і кожні розробники, ми зрештою зіткнулися з потребою переробити значний кавалок гри. У нашому випадку йдеться про повне переписування системи пострілів.

Трішки теорії про невидимі стіни

1111Певен, у іграх ви часто натикалися на “невидимі стіни”, котрі змушують вас тримати обраного розробниками шляху. Дратують вони не самовито, згоден. Та зараз погляньмо яким же чином гравця замикають у меншому просторі, ніж бачить ваше око.  В ігровому світі є Меші та Колайдери. Меш — це видима нами тривимірна модель. Колайдери, або колізії, — це невидимий об’єкт, який симулює фізичні зіткнення. Тобто крізь меш сам по собі ми спокійно можемо проходити, а от колізія — це якраз ота “невидима стіна”. Часто колізія не повторює форму меша. Це буває з різних причин. Наприклад, для того, щоби герой не застрягав. До речі, “застрягнути в текстурах” неможливо, застрягають саме в колізії! Також є триґери. Триґер — це теж невидимий об’єкт, але він не симулює фізику, а реєструє об’єкти, які входять в поле дії триґера. Фактично це така собі позначка, перетнувши яку, ми запускаємо певну подію у грі. Гадаю найпростіший приклад — це знайоме всім місце в NFS Most Wanted, де наша BMW ламається. Певен, всі його знають і багато хто пробував за допомогою чітів перескочити його =) Так от, там є триґер, який спрацьовує один раз, коли ми туди заїжджаємо на початку гри.

Суть проблеми

1111Раніше у нас була досить проста система пострілів. Коли гравець клацав лівою кнопкою мишки, створювалася куля (а точніше сферичний колайдер) в центрі камери. “Кулі” надавався імпульс, внаслідок чого куля потрапляла в ціль, завдавала пошкоджень і знищувалася. Цей спосіб дозволяв враховувати при пострілі земне тяжіння, вітер, дальність польоту та решту фізичних факторів. Та був у нього один недолік. У грі є зони аномалій, де блукає велика кількість зомбі. Ці зони позначені великим триґером. А в триґері кулі знищувалися. Тобто там фіксувалося зіткнення одразу, коли об’єкт створювався. Я не знав, як цього було уникнути, та й ризик був, що таке трапиться в іншому місці. Тому довелося повністю переробити систему пострілів.

Я обожнюю UE4

1111

UE4 чудовий рушій!  Реалізацію пострілів вирішено було робити за допомогою Line trace. Це проста лінія, яка реєструє перетинання її з іншими об’єктами. І що найважливіше, вона не фіксується триґером! Ба більше, лінія до всього видає досить багато інформації. Зокрема, фізичний матеріал об’єкта зіткнення, координати перетину та ще купу всякого. За наявності цих даних, є змога розійтися на повну. Далі нам потрібно реалізувати ефекти від пострілу. Звісно, постріл у воду має інший ефект, ніж влучання у метал. Для цього нам потрібно декілька масивів (масив —це впорядкований набір фіксованої кількості однотипних елементів).Три, якщо точніше: ефекти пострілу, фізичні матеріали та декалі. Кожний елемент масиву має порядковий номер. Нам потрібно просто при кожному пострілі здійснювати пошук по масиву з фізичними матеріалами, знайти, за яким порядковим номером знаходиться даний фізичний матеріал, та поставити відповідні ефект і декаль дірки від кулі  в точці перетину Line trace з об’єктом. Система досить проста, але дієва. Більше того, можна зробити так, щоби куля пробивала певні матеріали. Не певен, чи це потрібно буде, але штука класна!

Замість висновків

Відверто кажучи, на словах воно дуже просто звучить. Але допетрати до таких речей самому деколи важко. Наступного разу будемо розмовляти про інтерфейс.

«Смертна кара» — щоденник розробки #3


Приєднуйтесь! Ще більше коротких, але цікавих новин в нашій групі VK: vk.com/playua


Вам це може сподобатись

Приєднуйся до обговорення →
  • Віктор Вовкодавець

    Дякую. Як завжди дуже цікаво )

    • Vi Games ;)

      Дякуємо =)

  • Didok

    Класно, стільки всього дізнатися можна, продовжуйте роботу!

    • Vi Games ;)

      Неодмінно! Правда, є ризик навчитися круто так намахувати ігри =)

  • creosine

    Памятаю на юніті теж кулі робив як фізичні обєкти і штовхав імпульсам, аж поки не виявилось що при великій швидкості вони не детектили колізії з меш колайдерами, прийшлось перейти на лайнтрейси((

    • Vi Games ;)

      Теж робив на юніті колись=)
      Цікавий рушій. Але має багато багів =(